图形学的数学基础(六):mvp变换
图形学的数学基础(六):mvp变换
图形学的一个重要任务是将三维空间中的模型映射到二维平面(以像素为单位),这是一个复杂的过程,取决于许多因素,包括但不限于相机的位置,方向,投影的类型(正交/透视),fov,和viewport宽高,对于所有复杂的矩阵变换,最好的做法是将其分解为几个更简单的矩阵乘积。大多数图形系统通过使用四个转换序列来实现mvp变换,以openGL为例:

worldMatrix:将视图从模型空间转换到世界空间。直白的说就是将模型摆放到世界坐标空间。这一步确立了世界空间中各模型的相对布局,摆放位置。
viewMatrix:将视图从世界空间转换到相机空间。简单来讲就是:我们从何处,以什么样的视角观察世界。
Projection:将视图从相机空间映射到$[-1,1]^3$,的单位立方体中,为下一步viewport变换做准备。
viewport: 将视图从单位立方体映射到所需的屏幕空间($screenSpace$),取决于输出图像的大小和位置。

视图变换
现实生活中,如果相机和所有物体一起移动(相对位置关系不变),则拍出来的照片也都是一样的。根据这个原理我们得出:将相机移动到原点,朝向-z方向,构造出一个变换矩阵$\textbf{M}_{view}$,其他物体随着相机一起移动(应用$\textbf{M}_{view}$)。即可完成viewTransform。如何构造$\textbf{M}_{view}$?将视图从世界空间转换到相机空间?首先需要定义相机参数:
- 位置(eye Position):$\mathbf{e}$
- 观测方向(gaze Direction):$\vec{g}$
- 向上方向(up Direction):$\vec{t}$
根据这些信息,我们可以构造一个以$\mathbf{e}$为原点的uvw标准正交基。

