OpenGL之gluLookAt函数

来源:互联网 发布:淘宝商品拍摄价格 编辑:程序博客网 时间:2024/05/22 10:55
利用实用库函数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 指定视点向上的方向视点E、参考点C、视点向上的方向U实际上就是设定了一个视觉坐标系。这个视觉坐标系的原点是E,视线的方向(即z轴)是C-U,y轴方向就是视点向上的方向U,剩下的x轴方向就是向量((C-E)*U)。由于y轴和x轴是垂直的,所以也要求向量(C-U)和U互相垂直。这点在设置该函数参数时是必须注意的。由于y轴和x轴是垂直的,所以也要求向量(C-U)和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 恩,1楼正解,那我说个详细的 视点变换可以通过gluLookAt()函数完成,那三组参数分别指定了相机的位置、瞄准方向的参考点和相机向上方向。 通常视点变换操作在模型变换操作之前发出,以便模型变换先对物体发生作用。这样,场景中物体的顶点经过模型转换后一定到所希望的位置,然后再对场景进行视点定位等操作。模型变换和视点变换共同构成模型视景矩阵。 gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); 1、改变前三个参数的值可以模拟人在实际环境中的移动; 2、改变中间三个参数的值,可以模拟人眼的转动,即所观察场景的变化。 3、后三个参数的值比较特殊,它所制定的不是一个点,而是一个方向,即决定将哪一个坐标轴作为向上的方向,如果向上方向与观察点到中心点的方向一致,结果将是不确定的。