关于glulookat 设计得多余且矛盾的一点小猜测
2009-04-26 16:53
381 查看
我发现glulookat(eye_x,eye_y,eye_z,obj_x,obj_y,obj_z,dir_x,dir_y,dir_z)有一点多余和矛盾。
(0)实际上一个相机系统只要一个观察点、两个观察向量就可以了,这两个观察向量一个代表观察的正方向,一个代表相机顶的朝向。
(1)在glulookat中,前三个参数表示观察点。中间三个参数表示目标点。然而,相机需要的是观察方向,所以它会用目标点减去观察点来得到这个向量。该向量只代表方向,因此,它本身有多大是无所谓的。至于你能不能看到目标点不取决于这个向量的大小,而取决于在投影阶段你的视景体的设置(znear,zfar)。因此,这个目标点的设计有点问题,比如,如果观察点是(0,0,0),那么目标点设成(0,0,1)和(0,0,100),其效果是一样的。
(2)最后三个变量代表了相机顶的朝向,这是一个空间向量。然而,一旦设置了观察方向(就是中三减去前三得出的向量),那么这个机头只能在垂直于这个向量的平面内设定,因此实际上只有两个变量(dir_x,dir_y)在决定其朝向。dir_z是不起作用的,这个参数是个没用的参数。如果不好理解,试想这样的画面:一个相机的观察方向,和它的机头方向之间的角度,成了钝角,这个相机是一个怎么样的相机?....显然它们之间的角度永远都是直角的。
(0)实际上一个相机系统只要一个观察点、两个观察向量就可以了,这两个观察向量一个代表观察的正方向,一个代表相机顶的朝向。
(1)在glulookat中,前三个参数表示观察点。中间三个参数表示目标点。然而,相机需要的是观察方向,所以它会用目标点减去观察点来得到这个向量。该向量只代表方向,因此,它本身有多大是无所谓的。至于你能不能看到目标点不取决于这个向量的大小,而取决于在投影阶段你的视景体的设置(znear,zfar)。因此,这个目标点的设计有点问题,比如,如果观察点是(0,0,0),那么目标点设成(0,0,1)和(0,0,100),其效果是一样的。
(2)最后三个变量代表了相机顶的朝向,这是一个空间向量。然而,一旦设置了观察方向(就是中三减去前三得出的向量),那么这个机头只能在垂直于这个向量的平面内设定,因此实际上只有两个变量(dir_x,dir_y)在决定其朝向。dir_z是不起作用的,这个参数是个没用的参数。如果不好理解,试想这样的画面:一个相机的观察方向,和它的机头方向之间的角度,成了钝角,这个相机是一个怎么样的相机?....显然它们之间的角度永远都是直角的。
![](http://img.zemanta.com/pixy.gif?x-id=2c9dbcd1-1d0e-80d1-bd7f-953da6dfaa10)
相关文章推荐
- 关于OPenGL中gluLookAt()与glOrthO()的坐标位置关系
- 关于gluLookAt的构造方法
- OpenGL 函数 gluLookAt() glScalef() glTranslatef() glRotatef() glFrustum() glPerspective() 的使用
- 关于系统模块设计的一点疑问?
- OpenGL - Understand View Matrix by glulookat
- gluLookAt
- 关于流程设计器的一点补充
- OpenGL的gluLookAt和gluPerspective详解
- gluPerspective gluLookAt 关系
- 关于设计模式的一点感想
- 关于接口设计的一点看法
- gluLookAt 的参数
- 关于设计的一点思考:
- 关于Android应用设计中多余的“退出”功能
- 关于camera 构架设计的一点看法
- OpenGL之gluLookAt
- gluPerspective和gluLookAt的关系 (由于写的好我就转了)
- gluPerspective和gluLookAt
- gluLookAt、glTranslatef、glRotatef