OpenGL坐标系变换

世界坐标系

世界坐标系始终是固定不变的。

对象坐标系(也就是 当前绘图坐标系)

该坐标系不是固定的,且仅对该对象适用。在初始默认情况下,该坐标系与世界坐标系重合。这里能用到的函数有glTranslatef(),glScalef(), glRotatef(),当用这些函数对当前绘图坐标系进行平移、伸缩、旋转变换之后, 世界坐标系和当前绘图坐标系不再重合。改变以后,再用glVertex3f()等绘图函数绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相对当前绘图坐标系来讲的。

眼坐标系

为啥要转换到眼坐标系呢?
可以这样理解,当场景已经绘制好了后,这时候我们还不能看到场景哦,因为我们的观察位置还没定呢,而且如果我们眼睛(照相机)的位置不同,那么观察物体的角度则不同,那看到的场景的样子肯定也不同,所以要有这一步,把场景与我们的观察位置对应起来。

默认情况下,眼坐标系与世界坐标系也是重合的。使用函数 gluLookAt()则可以指定眼睛(相机)的位置和眼睛看向的方向。

注解:使用glTranslatef(),glScalef(), glRotatef()这些函数是对对象坐标系进行变动;使用void gluLookAt()是对眼坐标系进行变动,两者可以达到相同的变换效果。相当于对象不动移动相机,和相机不动移动对象。比如场景向x轴正方向移动1个单位(相机不动),相当于相机向x轴负方向移动一个单位(对象不动),glTranslatef(1.0, 0.0, 0.0) <=> gluLookAt(-1.0, 0.0, 0.0, ..., ... )。

注解:GL_MODELVIEW矩阵是模型变换矩阵和视点变换矩阵的组合(Mview*Mmodel),前面已经说了,并不存在单独的模型变换(Model)和视点变换(View)。所以使用GL_MODELVIEW矩阵就可以使对象从对象坐标系转换到眼坐标系。

猜你喜欢

转载自blog.csdn.net/gaoenyang760525/article/details/89075301