用于表示所绘制顶点在三维空间中的位置(包括旋转、缩放、平移)。
表示用于观察世界的“摄像机”所处的位置以及姿态。
用于表示摄像机所观察到的物体,如何映射到投影平面上。
投影矩阵分为两种
- 正交投影
- 正交投影没有近大远小,最终渲染空间为一个长方形
- 透视投影
- 透视投影产生近大远小的效果,最终渲染空间为一个梯形体
变换过程为
其中
$pos.x \in [-1, 1] $ $pos.y \in [-1, 1] $ -
GLSurfaceView
中心是$(pos.x, pos.y)$原点
由于使用列向量,所以变换过程从右至左(其中数值为了便于理解,没有实际意义):
-
$V_{input}$ 输入物体坐标,比如绘制一个圆形,中心位置是$(0, 0, 0)$ -
$M_{Model}$ 进行变换,变换后发现圆形中心实际处于$(0, 0, -5)$的位置 -
$M_{View}$ 进行变换,变换后发现圆形中心相对于摄像头处于$(0, 5, -2)$的位置 -
$M_{Projection}$ 进行视角变换,变换后物体位于投影面$(0, 0.3)$,深度$0.2$
得到物体在投影平面的坐标和深度之后,OpenGL对物体进行光栅化、剪裁,而后将像素由投影平面变换到视口空间,即
$x \in [0, view\ width]$ $y \in [0, view\ height]$