3D坐标转换

坐标的变换过程

3D坐标转换_第1张图片

而在OpenGL中,通常将模型变换,视图变换合称为ModelView变换。也就是在OpenGL中,这是一部操作,只用调用一个函数即可。下图是OpenGL中的变换过程:

 3D坐标转换_第2张图片

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

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



 

 

(从右向左乘)

变换后的坐标 (屏幕坐标)= 视口矩阵 x 投影矩阵 x 视图矩阵 x 模型矩阵 x 模型点坐标(你设置的点坐标)

3D坐标转换_第3张图片

 

3D坐标转换_第4张图片

归一化设备坐标系

在得到投影坐标后,还需要一步归一化操作。

由裁剪坐标系下通过除以W分量得到。这个操作称为透视除法。NDC坐标很像屏幕坐标,但是还没有经过平移和缩放到屏幕像素。现在3个轴上的值范围均为[-1,1]。

屏幕坐标系

通常将屏幕上的设备坐标称为屏幕坐标。设备坐标又称为物理坐标,是指输出设备上的坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的 X 轴向右为正,Y 轴向下为正,坐标原点位于窗口的左上角
从NDC坐标到屏幕坐标基本上是一个线性映射关系。通过对NDC坐标进行视口变换得到。这时候就要用到函数glViewport(),该函数用来定义渲染区域的矩形,也就是最终图像映射到的区域。

 

3D坐标转换_第5张图片

3D坐标转换_第6张图片

最后附上OpenGL的教学:OpenGl教学

你可能感兴趣的:(游戏开发)