视图、模型、投影、视口变换

来源:互联网 发布:ubuntu 修改时间 编辑:程序博客网 时间:2024/05/17 09:29

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)结合


原创粉丝点击