【GAMES101】学习记录1-Transformation
前言
早先接触了一些计算机图形学的知识,记了一些重要的知识点,但由于课业繁忙,好多课内实验报告要写,搁置了一段时间,现在重新整理出来,方便自己复习。如有错误,欢迎斧正。
这里先整理出GAMES101-Lecture-01到05的内容。
GAMES101教程视频传送门
记录
前面几节课讲的内容大概是将模型投影到平面上的需要哪些操作,具体需要经过MVP变换和视口变换。
在计算机中,变换的操作被抽象为对矩阵的运算,如下。
MVP变换
MVP变换,即Model(模型)-View(视图)-Projection(投影)三个变换。
经历MVP变换后,三维空间中的物体会被投影到二维平面上。
具体解释请看下文。
Model变换
Model变换用于调整物体模型的大小、旋转、位置。
经历Model变换后,物体模型会被调整到对应位置。
一般来说,Model变换所需矩阵model_matrix(下文均为类似命名)包含了三类操作,分别用于调整模型的位置、大小和旋转。
model_scale_matrix
model_rotation_matrix:注意,2D模型若未声明旋转方向,默认向逆时针方向旋转。
model_translation_matrix
model_matrix即为这三类矩阵叉乘所得矩阵。
值得一提的是,叉乘无交换律,模型会按照叉乘的运算顺序(从右到左)依次执行相应变换。
View变换
View变换用于调整摄像机的位置与旋转,使其与我们预想的摄像机的三条坐标轴相重合。
经历View变换后,摄像机会被调整到对应位置。
下图说得很清楚,不再解释。
Projection变换
正如其名,Projection变换用于把空间中的模型顺着某个方向投影,得到投影平面。
要注意:Projection变换有两种,一种是Orthographic Projection(正交投影),一种是Perspective Projection(透视投影)。
Orthographic Projection
先来讲较简单的Orthographic Projection:把空间中的模型顺着同一个方向投影,得到投影平面。
看看下面这张图就明白了。
参考上图,整个空间是一个长方体,我们要把整个空间变换成“中心在原点,边长为2”的立方体(方便后面进行视口变换,这个之后再说)。
变换成立方体的对应矩阵为Morthographic:
Perspective Projection
Perspective Projection即透视投影:从一个点放射状地看向模型中的各个部分,得到投影平面。
如下图所示。
参考上图,透视投影所形成的空间不是长方体,我们就要把它变换成一个长方体,这样就可以进行Orthographic Projection了。
怎么变?挤压离摄像机更远的那一个平面。通过一些特殊点坐标的代入,可以解得对应矩阵(具体推导过程见原教程0:50:43左右)。
变换成长方体的对应矩阵为Mperspective->orthographic:
\begin{bmatrix}
n & 0 & 0 & 0\\
0 & n & 0 & 0\\
0 & 0 & n+f & -nf\\
0 & 0 & 1 & 0
\end{bmatrix}
所以Mperspective = Morthographic * Mperspective->orthographic;
值得一提的是,在某次作业中,使用过下图所示的参数 fovY(Y方向视锥的角度)和 aspect(横纵比)。
而作业一中的提高题,利用罗德里格旋转公式能够解决,也可以参考这篇博客,这是后话了。
Viewport变换
Viewport(视口)变换用于把之前得到的立方体空间(暂时不管z轴纵深)映射到屏幕上。
先把立方体中要显示的平面缩放为屏幕大小,再平移使平面左下角与原点重合(屏幕的原点在左下角)。
视口变换对应矩阵为Mviewport:
参考资料
以上笔记(含图片)总结自GAMES101课程及其PPT讲义。
GAMES101教程视频传送门
GAMES-101 Assignment1 提高项解答