图形学games101课程回顾--变换矩阵和MVP变换


前言

这个文档为笔者自用,纯属知识分享和讨论,杜绝商用,有问题欢迎大家指出。

一、计算机图形学?

计算机图形学就是应用计算机合成或生成虚拟信息。在当前生活中,有很多这方面的应用,比如动画《凡人修仙传》、电影《冰雪奇缘》,电影特效《权力的游戏》,游戏,场景模拟,产品设计图,VR等等。

在这个课程中,主要讲解光栅化成像、几何表示、光的传播理论和动画与模拟这四部分。

二、前期准备

1.线性代数

无论是图形学还是机器学习,都离不开用向量、矩阵来表示物体的具体位置等属性。

  • 向量:具有大小和方向。例如给定一个三维直角坐标系,向量 A B ⃗ \vec{AB} AB = B-A,其中A为起始点,通常为原点,B为终点(x, y, z),大小为|| A B ⃗ \vec{AB} AB || x 2 + y 2 + z 2 \sqrt{x^{2} + y^{2} + z^{2}} x2+y2+z2 , 方向为 A B ⃗ / \vec{AB}/ AB /|| A B ⃗ \vec{AB} AB ||.
  • 向量点乘:点乘得到的是一个数, a ⃗ \vec{a} a ⋅ \cdot b ⃗ \vec{b} b = x a x_{a} xa ⋅ \cdot x b x_{b} xb + y a y_{a} ya ⋅ \cdot y b y_{b} yb + z a z_{a} za ⋅ \cdot z b z_{b} zb
  • 向量叉乘:叉乘仍得到一个向量, a ⃗ \vec{a} a × \times × b ⃗ \vec{b} b = c ⃗ \vec{c} c ,其中 c ⃗ \vec{c} c 垂直于 a ⃗ \vec{a} a b ⃗ \vec{b} b 构成的平面。具体运算过程:图形学games101课程回顾--变换矩阵和MVP变换_第1张图片
  • 矩阵:通常为m × \times ×n的数组,矩阵运算满足结合律,不满足交换律。
  • 矩阵转置: ( A B ) T (AB)^{T} (AB)T = B T B^{T} BT A T A^{T} AT
  • 如果A矩阵满足A A − 1 A^{-1} A1 = I, 同时 A T A^{T} AT = A − 1 A^{-1} A1,称为幺正矩阵。

2.二维与三维变换

当我们从某个角度看向三维空间中的场景时,看到的是在这个角度下的二维图像。那么要将我们看到的图像在计算机中描绘出来,就需要将应用变换将3D场景变换到2D,即正交或投影变换;在实际应用中,我们想得到这个物体旋转后的样子,或者让这个物体在另一个位置出现,这时就要用到旋转变换或平移变换,因此变换在图形学中必不可少。

  • 二维缩放矩阵:寻找变换矩阵的常用方法就是找到变换前后特征点的对应关系,构造出变换矩阵即可。对于下图,我们可以选取左图中的在y轴上的点(0,a)以及在x轴上的点(b,0)两点,将图片进行1/2的缩小后,y轴上的点变为(0, a/2),x轴上的点为(2/b, 0),缩放矩阵必须满足上述两个点变换前后的关系,即:
    图形学games101课程回顾--变换矩阵和MVP变换_第2张图片
    推广后即为:

图形学games101课程回顾--变换矩阵和MVP变换_第3张图片

  • 二维反演矩阵:与上述变换矩阵推导一致,选图像右上角的点(a,b), 变换后为(-a, b), 再选x轴上的点(a, 0),变换后为(-a, 0), 以及y轴上的点(0,b),变换后仍为(0,b),即可得反演矩阵;或者直接观察坐标变换规律,沿竖直方向翻转后,图像中的x轴上的坐标相反,y轴保持不变。
    图形学games101课程回顾--变换矩阵和MVP变换_第4张图片
  • 切变矩阵:可以直接观察,沿水平方向的切变,图像中y分量的都是不变的,只有x分量发生变化, x ′ x' x
    = x + ay。

图形学games101课程回顾--变换矩阵和MVP变换_第5张图片

  • 二维旋转矩阵:最简单的寻找方法即是选几个特殊点,好用不费脑。图形学games101课程回顾--变换矩阵和MVP变换_第6张图片
  • 平移变换:平移是比较特殊的一类变换,不属于线性变换(x’ = Mx),而是:图形学games101课程回顾--变换矩阵和MVP变换_第7张图片

因此,为了将平移与其他变换矩阵的形式统一起来,我们引入齐次坐标的概念。

  1. 点: ( x , y ) T (x, y)^{T} (x,y)T= ( x , y , 1 ) T (x, y, 1)^{T} (x,y,1)T
  2. 向量: ( x , y ) T (x, y)^{T} (x,y)T = ( x , y , 0 ) T (x, y, 0)^{T} (x,y,0)T
    这样我们就可以把平移矩阵写为:图形学games101课程回顾--变换矩阵和MVP变换_第8张图片
    总结我们的上述变换矩阵就可以写为3 × \times × 3形式:图形学games101课程回顾--变换矩阵和MVP变换_第9张图片

图形学games101课程回顾--变换矩阵和MVP变换_第10张图片

  • 三维变换矩阵:只需要增加一个维度即可,类似二维,三维的点和向量可定义为:
  1. 点: ( x , y , z ) T (x, y, z)^{T} (x,y,z)T = ( x , y , z , 1 ) T (x, y, z, 1)^{T} (x,y,z,1)T
  2. 向量: ( x , y , z ) T (x, y, z)^{T} (x,y,z)T = ( x , y , z , 0 ) T (x, y, z, 0)^{T} (x,y,z,0)T
    相应的变换矩阵为:
    图形学games101课程回顾--变换矩阵和MVP变换_第11张图片

三、MVP变换

我们要把从某一个角度看到的3D场景呈现出来,就是一个类似于拍照片的过程。拍照片通常分为3步:

  1. 摆好我们即将拍摄的物体,构成场景
  2. 放好照相机位置
  3. “茄子”

对应的,我们把从某个方向看到的3D场景呈现为2D,也要做到这三步,不过是在计算机上做而已。
对应到计算机,我们的步骤为:

1. 将物体摆好造型:比如我们想做拍一个菱形的正方体,那么就可以将正方体做个旋转;再或者我们想把物体移动一下,就需要做个平移变换;在计算机中操作,我们首先给物体自己确定一个自身的坐标,再进行变换操作;这就是Model Transformation.
2. 下一步我们就要摆好摄像机的位置,默认摄像机在右手坐标系中,看向-z方向,成像时相框向上的方向为y正方向。假设我们的摄像机现在的位置在(1,2,10)这样一个位置中,我们就需要将其变换到原点上去并摆好位置,即View Transformation。
1. 第一步先做一个平移,将相机移动到原点图形学games101课程回顾--变换矩阵和MVP变换_第12张图片
2. 将相机的位置摆到默认方向,做正向旋转很难,我们可以先做个逆变换,即假设相机原本就在默认摆放方向,现在将其转到任意一个摆放方向:图形学games101课程回顾--变换矩阵和MVP变换_第13张图片
3. 投影成像-Projection。投影常有两类,一类是正交投影,即假设观测点在无穷远处,投影线是平行的;另一类是透视投影,是我们人眼真实看到的一种投影,看到的物体是近大远小,平行线在远处会相交。图形学games101课程回顾--变换矩阵和MVP变换_第14张图片
透视投影分为两步:
1.将我们看到的锥形物体压缩为长方体,这里应用了齐次坐标的性质, ( x , y , z , 1 ) T (x, y, z, 1)^{T} (x,y,z,1)T = ( w x , w y , w z , w ) T (wx, wy, wz, w)^{T} (wx,wy,wz,w)T。注意,这里的n为近平面,f为远平面,且都为负。

图形学games101课程回顾--变换矩阵和MVP变换_第15张图片
图形学games101课程回顾--变换矩阵和MVP变换_第16张图片

2.将这个长方体规范化为 [ − 1 , 1 ] 3 [-1,1]^{3} [1,1]3 立方体,即简单的平移和缩放变换即可。

四,实际操作

实际上我们通常通过纵横比 = width/height,以及垂直视野fovY ,结合近平面,就可以计算长方体的宽高图形学games101课程回顾--变换矩阵和MVP变换_第17张图片

你可能感兴趣的:(矩阵,线性代数,图形渲染,学习)