视图变换
视图变换改变视点的位置和方向,也就是改变视觉坐标系。在世界坐标系中,视点和物体的位置是一个相对的关系,对物体作一些平移、旋转变换,必定可以通过对视点作相应的平移、旋转变换来达到相同的视觉效果。完成视图变换可以有以下几种方法:
(1).
利用一个或几个造型变换命令(即glTranslate*()和glRotate*())。由于这些命令也是在GL_MODELVIEW状态下执行的,所以较难和那些造型变换命令区分开来,移动视点的变换和移动物体的变换很容易混淆。为了便于建立清晰的物体和场景模型,可以认为只有其中一个变换在起作用,比如认为只有模型变换的话,那么glTranslate*()和glRotate*()将统一被视为对物体的变换。(2).利用实用库函数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
指定视点向上的方向(3).创建封装旋转和平移命令的实用函数。有些应用需要用简便方法指定视图变换的定制函数。例如,在飞机飞行中指定滚动、俯仰和航向旋转角,或对环绕对象运动的照相机指定一种利用极坐标的变换。
glRotate()旋转的单位是度。