游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6403|回复: 21

一个想不通的问题( 急)

[复制链接]

18

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2006-7-18 22:09:00 | 显示全部楼层 |阅读模式
一个立方体 比如六个面都分别标记为1 2 3 4 5 6

然后在一连串平移、绕不同坐标轴旋转等矩阵变换后
想在某时刻把照相机正对准这个立方体的某个面 比如表面2
怎么做?(能用gluLookAt么 ,在这样复杂的情况下怎么用呢)

如果使用gluLookAt需要两个点的坐标值 可opengl进行矩阵变换 只是针对图元的变换

而且好像opengl里面不对图元进行编号 从而通过编号可获取该图元三维坐标值的方法。

怎么办??? 在这个问题上 搞了大半天,痛苦... 等会再来 希望高手支着,谢谢。

[em10]

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2006-7-18 22:42:00 | 显示全部楼层

Re:一个想不通的问题( 急)

在单位矩阵时开始变换立方体,取得变换矩阵,乘以面的坐标,计算其法线,推出目标视点

18

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2006-7-18 23:30:00 | 显示全部楼层

Re: 一个想不通的问题( 急)

楼上说的 我真的不懂

你说的变换矩阵是从最开始到最后整个过程乘起来的矩阵吧,
没用过这个
如何获得呢

我手边只有《OpenGL:A Primer---OpenGL程序设计指南》这本书
好像没讲到这个 [em24] [em22]

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2006-7-19 09:24:00 | 显示全部楼层

Re:一个想不通的问题( 急)

楼主说到:"在一连串平移、绕不同坐标轴旋转等矩阵变换后",这个变化改变的是物体世界坐标呢?还是改变物体的投影矩阵啦?

要是说正方体改变的是物体世界坐标,那么使用 gluLookAt 瞄准它的某个面,这简单.
1. 因为物体是正方体,所以它的中心坐标,就是 gluLookAt 观看的目的坐标.
那么,中心坐标的计算方法,就是把所有点坐标相加求和,再除以 8,最后得到的点为 B.

2. 得到正方体的面ID,我比方说是 2 . 那么要计算面2 的法线.得到得就储存进 normal.
那么,使用 normal* d距离, 这个距离,就是摄像机和面的距离数.最后得到的数,就是 A.

3. 摄像机的正向上方法线,一般设置为 (0,1,0).
最后,使用 gluLookAt(A.x, A.y, A.z,   B.x, B.y, B.z, 0, 1, 0);

第二种情况的话,要楼主把代码具体占出来,看了再说.

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-7-19 09:24:00 | 显示全部楼层

Re:一个想不通的问题( 急)

又一个没看图形学就来看OpenGL的人。。。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-7-19 09:54:00 | 显示全部楼层

Re:一个想不通的问题( 急)

呵呵,没必要看图形学,搞多了就明白了,矩阵其实很简单,告诉楼主一个方法,你在对物体变换的时候同时对摄象机的坐标也一起做变换,当然,前提是你的物体在原点,并且摄象机坐标不在原点而视点在原点。这样的话就相当与地球同步卫星,物体转什么角度,你的摄象机也就旋转什么角度。

18

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2006-7-19 13:10:00 | 显示全部楼层

Re:一个想不通的问题( 急)

只是改变modelview矩阵(和glulookat)的一系列变换。

xikema :如果有很多图元,而我想把摄像机对准不是最后绘制的某个图元的某表面呢

这个函数意思我明白:gluLookAt(A.x, A.y, A.z,   B.x, B.y, B.z, 0, 1, 0);
我是只知道在当前变换矩阵下给图元变换的相对坐标值和相对旋转角度
可不知道如何获取 变换后某图元(如某个vertex)的(在最初的默认坐标系下--就是相对显示器不动的世界坐标系吧的)坐标点值(x,y,z)啊---这是关键不清楚的地方。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-7-19 18:57:00 | 显示全部楼层

Re: Re:一个想不通的问题( 急)

xikema: Re:一个想不通的问题( 急)

呵呵,没必要看图形学,搞多了就明白了,矩阵其实很简单,告诉楼主一个方法,你在对物体变换的时候同时对摄...


给你点复杂的就想不明白了.
严重点说 ... 很多人就是被这样的想法教坏了...

18

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
 楼主| 发表于 2006-7-19 20:34:00 | 显示全部楼层

Re:一个想不通的问题( 急)

楼上是高手 怎么对逆向学习方法也反感呢 很遗憾
如果我再说自己连c都没学过 现在却一周用vc++几千行代码编出一个软件 你一定也嗤之以鼻
谁都可以说我没有系统学过  但这没关系 我只要实现我的功能就行

对矩阵变换当然了解 就是让我自己编程进行各种坐标变换都没有问题
但我现在是用opengl api

我的问题可以形象的描述为 :
向空中扔一个骰子(立方体),该骰子从开始到某时刻经历的所有变换已知,在某时刻的状态当然也就已知了,可是如何把摄像机正对准该骰子的某个面 如点数为1的面。

我知道如果能在点1的面上获得一个点坐标值,再在相对的面对应点也获得一个坐标值
就可以用glulookat解决我这个问题。

可是opengl能否由某个图元获得其坐标值?如果不能,如何解决?

希望大家继续支持

9

主题

198

帖子

198

积分

注册会员

Rank: 2

积分
198
发表于 2006-7-19 22:03:00 | 显示全部楼层

Re:一个想不通的问题( 急)

通过法向量(normal)就可以知道每个面的正对的方向。然后设置摄像机就可以了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 00:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表