计算机图形学GAMES101(三)变换(模型、视图、投影)
补充内容
Rθ是逆时针方向旋转的矩阵
R-θ是顺时针方向旋转的矩阵
可以发现RθT=Rθ-1 ,像这样的矩阵叫做正交矩阵。以后如果要求往相反的方向旋转相同角度的变换(R-θ),只需要求正向旋转的矩阵然后转置就可以了

本节涉及内容:

仿射变换:线性变换+平移
三维空间中的变换矩阵格式:



3D旋转
任意一个旋转都可以被分解为绕着X,Y,Z轴的旋转 即:

α β γ这三个角叫做欧拉角(Euler angles)
罗德里格斯公式
该公式将解决了绕着任意方向的旋转
表示绕着向量n旋转α°可以使用下面这个公式。

变换的最终目的是让三维空间的物体变为二维空间的一张照片。这样才能在电脑上面展示出来。
怎么理解模型、视图、投影变换
我们拍一张照片需要摆动作(模型变换)
动作摆好后,需要找一个好的拍摄角度(视图变换)
拍照 (投影变换,将三维物体投影到二维的平面上面)
怎么去定义视图变换

想要唯一的确定一个视角,首先需要定义相机在什么位置e(x,y,z),定义了相机的位置之后需要定义相机的朝向g⃗\vec gg,确定朝向后相机仍可以绕着g⃗\vec gg旋转,所以还需要一个t⃗\vec tt来确定相机的向上方向,用来确定图片哪个方向是上方。
如果摄像机和场景中所有的东西一起移动的话,那么整个场景在摄像机中的画面还是相对保持不变。
一般情况下相机的位置位于原点,相机永远朝向-Z方向,相机的向上方向为Y方向。
这样图形变换的时候视角不需要改变只改变物体的位置即可。

现在需要将一个不在标准位置的视角变为标准位置

变为

那么我们需要做以下操作

首先需要将视图位置e移到原点

考虑到要将g旋转到-Z,t旋转到Y,(g x t)旋转到X比较难,所以先求其逆变换,然后通过正交矩阵的性质求原矩阵(RT=R-1)。
其逆变换就是


利用RT=R-1求得

至此就求出来视图变换得矩阵

投影
正交投影:无论观看者在哪里,物体大小维持不变。没有近大远小,正交投影的视图是一个平面,所以物体大小不变,只是映射到一个平面上。
透视投影:近大远小,透视投影的视图是一个点,所以会改变物体大小,与我们日常习惯相符。

正交投影
计算机中正交投影对于一个物体的处理过程
我们要投影的立方体左(l) 右(r)是在x轴的值
我们要投影的立方体下(b)上(t)是在y轴的值
我们要投影的立方体远(f)近(n)是在z轴的值
1、将物体中心点平移到原点
2、将其缩放成一个标准 111 的立方体

计算过程:
只需要乘以矩阵Mortho即可

透视投影
步骤
1、first “squish” the frustum into a cuboid (n->n,f->f)(Mpersp->ottho)
首先把“截锥”挤压成一个长方体(n->n,f->f) 得到矩阵Mpersp->ottho
2、Do orthographic projection
做正交投影,即Mortho*Mpersp->ottho

怎么去挤压
挤压得实质就是求一个挤压矩阵Mpersp->ottho
红色的两个三角形形成一对相似三角形

挤压x和y变为:

使用齐次坐标表示并且写成矩阵乘法的形式

下面可以通过矩阵乘法反推出Mpersp->ottho

Mpersp->ottho的最终结果:

得到Mpersp->ottho后只要再做一次正交投影就可以完成透视投影了
Mpersp为透视投影的变换矩阵

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)