在opengl es中,总共会有五种的坐标系统,如下所示:
Local space (or Object space):本地坐标系,即模型本身的坐标系
World space:世界坐标系
View space (or Eye space):视图坐标系
Clip space:裁剪坐标系
Screen space:屏幕坐标系
下图展示了如何从本地坐标系经过一系列的矩阵变换(模型矩阵model matrix,视图矩阵view matrix,投影矩阵projetion matrix等),转换到了屏幕坐标系的过程。
首先从本地坐标系开始,表示一个模型当前开始的坐标。
通过模型矩阵将本地坐标转换到世界坐标当中,世界坐标可以包含很多的模型。
在世界坐标中通过视图转换转换到视图坐标中,视图坐标可以理解成我们从相机中看到的视角。
在视图坐标中通过投影变换(orthographic projection matrix[正交投影矩阵] or a perspective projection matrix[透视投影矩阵])转换到裁剪坐标当中,裁剪坐标的区间在于[-1.0,1.0]。
最后将裁剪坐标转换到屏幕坐标中,这一步通过glViewport()方法进行。
如何理解这些坐标系呢?
首先,本地坐标系很好理解,每个模型都是一个坐标系,中心点位于(0,0,0)点。
对于世界坐标系而言,假设不用世界坐标系,则如何把模型集合到一起呢?例如要在客户端展示两个不同位置立方体,所以才提出了世界坐标系的概念。通过模型矩阵(旋转,平移,放大或者缩小),我们可以很容易把模型展示在不同的位置的世界坐标系上面。
对于视图坐标系(known as camera space or eye space)而言,就是通过摄像机视角观察的坐标系,由世界坐标系通过视图矩阵转换而来。
裁剪坐标系的意义在于裁剪掉超出可观察范围的视图,通过投影变换,转换成NDC(规范化设备坐标)。最终裁剪坐标系会调用glViewport()转换成设备坐标系完成显示。
投影矩阵介绍
在从视图坐标系转换到裁剪坐标系时候,会通过投影矩阵转化,投影矩阵的主要作用就是将三维降成二维,以便显示在屏幕上。
投影矩阵分为两种,一种是
1: 正交投影矩阵
2: 透视投影矩阵。
网友评论