openGL中的gluLookAt函数

来源:互联网 发布:python示例程序 编辑:程序博客网 时间:2024/05/21 20:22

osg中camera->setViewMatrixAsLopengl 的函数相当于opengl中的glulookat

openGL变换小节:

视图:指定观察者或摄像机的位置

模型:在场景中移动对象

模型视图:描述视图变换盒模型变换的对偶性

投影:对视见空间进行修剪和改变大小

视见区: 对到窗口的最终输出进行缩放

眼坐标:来自观察者的观察点,与可能发生的任何变换无关,可以把它们视为“绝对”屏幕坐标。因此并不是真正的坐标,而是代表一个虚拟的固定坐标系,用作参考的公共框架。大部分变换都是根据它们相对于眼坐标系的效果来描述的。

 glLookAt - 小柳树 - 小柳树的博客

视图变换的过程如下:视图(eye)变换或者模型变换,投影变换(正射投影和透视投影),视见区变换。

利用实用库函数gluLookAt()设置视觉坐标系。在实际的编程应用中,用户在完成场景的建模后,往往需要选择一个合适的视角或者不停地变换视角,以对场景作观察。实用库函数gluLookAt()就提供了这样的一个功能。

void gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,

      GLdouble centerx,GLdouble centery,GLdouble centerz,

      GLdouble upx,GLdouble upy,GLdouble upz);

该函数定义一个视图矩阵,并与当前矩阵相乘。

eyex, eyey,eyez 指定视点的位置

centerx,centery,centerz 指定参考点的位置

upx,upy,upz 指定视点向上的方向

 

glLookAt - 小柳树 - 小柳树的博客

 

视点E、参考点C、视点向上的方向U实际上就是设定了一个视觉坐标系。这个视觉坐标系的原点是E,视线的方向(即z轴)是C-Uy轴方向就是视点向上的方向U,剩下的x轴方向就是向量((C-E)*U)。由于y轴和x轴是垂直的,所以也要求向量(C-U)和U互相垂直。这点在设置该函数参数时是必须注意的。

还是最后一句:

由于y轴和x轴是垂直的,所以也要求向量(C-E)和U互相垂直。这点在设置该函数参数时是必须注意的。

应用中不垂直也是没问题的,所以有找了个可能更合理的解释

void gluLookAt(

GLdouble eyex,

GLdouble eyey,

GLdouble eyez,

GLdouble centerx,

GLdouble centery,

GLdouble centerz,

GLdouble upx,

GLdouble upy,

GLdouble upz

);

eye=(eyex, eyey, eyez)是视点(原点)的位置

center = (centerx, centery, centerz)是视口中心点的位置

center - eye是z轴负方向

z = (eye - center) / |eye - center|

up = (upx, upy, upz) - eye表示上方

x轴正方向x = up × z / |up × z|

y轴正方向(就是正上方)y = z × x

glLookAt - 小柳树 - 小柳树的博客


原文地址:http://blog.163.com/zhaoxin851055@126/blog/static/81129298200921052929831/

原创粉丝点击