1、(1)视图变换:对象是照相机
glLookAt()函数指定视图变换,即设置视点
gluLookAt(GLdoble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);
它共接受三对坐标,
分别为eye,center,up
故名思义,eye表示我们眼睛在"世界坐标系"中的位置(即 观察点),
center表示眼睛"看"的那个点的坐标,
最后那个up坐标表示观察者本身的方向,如果将观察点比喻成我们的眼睛,那么这个up则表示我们是正立还是倒立异或某一个角度在看,所看的影像大不相同,故此时需要指明我们现在正立,那么X,Z轴为0,Y轴为正即可,通常将其设置为1,只要表示一个向上的向量(方向)即可
默认情况下:glLookAt(0,0,0,0,0,-1,0,1,0)
1、(2)模型变换:对象是所绘制的物体
设置模型位置和方向,包括glTranslate*(),glRotate*(),glScale*()等
通常把模型变换和试图变换组合成模型视图矩阵,二者结合起来考虑
使用前先指定模型视图矩阵为当前矩阵:glMatrixMode(GL_MODELVIEW)
2、(1)投影变换:对象是场景,设置物体如何映射到计算机屏幕
为相机选择镜头,目的是确定视野(视景体),进而确定哪些物体位于视野之内以及他们能够被看到的程度;
与视口变换共同决定场景是如何被映射到计算机屏幕的;
透视投影:
创建沿视线方向同时对称于x,y轴的平截头体:glPerspective(yz平面上视野的角度,平截头体的纵横比:w/h,观察点与近侧面的距离,观察点距远侧面的距离)
正投影:
创建正交平行的视景体:glOrtho(left,right,bottom,top,near,far)(near和far的设置与观察点的位置有关)(观察点是由glLookAt()设置的)
若没有其他变换,投影的方向与z轴平行,观察点方向朝向z轴负向
二维图像投影:glOrtho(left,right,bottom,top)
2、(2)视口变换:对象是场景,设定相片的大小,是变换的最后一步
默认视口占据整个窗口的像素矩形,可以通过设置对窗口进行分割
glViewport(x,y,width,height)
窗口大小变化并不会自动影响视口的大小,所以要根据窗口变化手动设置视口变化
一般情况下这几个变换的调用顺序为:
先对物体进行设置,即视图变换(LookAt)和模型变换(translate/scale...)结合
然后对场景显示进行设置,即投影变换(glPerspective/glOrtho)和视口变换(glViewport)结合