GAMES101-现代计算机图形学入门(04)笔记--Transformation Cont

本文详细介绍了3D空间中的旋转矩阵特性,包括正交矩阵的概念,以及绕x、y、z轴的旋转。接着,探讨了视图变换的过程,包括观测变换和投影变换,特别是从3D到2D的转换。观测变换中讲解了如何通过矩阵变换将相机定位并朝向指定方向,而投影变换则区分了正交投影和透视投影的原理与实现方法。文章通过实例和矩阵运算,深入浅出地解析了这些概念和技术。
摘要由CSDN通过智能技术生成

 补充上节的一个内容:在旋转中,旋转的矩阵的它的逆矩阵就是它的转置。下面会应用。

在数学上,若一个矩阵它的转置等于它的逆,则称这个矩阵为正交矩阵。

进入今天的内容:

1、3D变换

在上节内容中有相关的内容和解释,与2D变换内容整合在了一起。

 缩放和变换的矩阵式子如上。

 三维空间中最复杂的式子就是旋转了,先从简单的例子说起,假设物体绕的x,y,z轴旋转,其式子如下,已写出:

绕x轴旋转时,点坐标中x值其实是不变的,所以上面的x相关的值应该不变,相关x轴的值就是左上角中3*3的矩阵中的第一行和第一列。而中间的2*2的矩阵其实就是y轴和z轴进行\alpha角度的旋转。

绕z轴旋转也是如此的思想,z轴的不变,x轴和y轴进行\alpha角度的旋转。

绕y轴的旋转是较为难以理解的,根据右手定则可知(在上一节的内容中)是 \vec{z} × \vec{x} = \vec{y}轴,不是相反的,所以,在这里式子有些难理解。(老师只讲到了这,还是有些不懂,但是右手定则是明白的)

但上述所讲的只是旋转中好理解的一部分,其实在大部分实例中,更多的是不规则的x,y,z轴的旋转,换个角度思考:依旧是有三条轴,但是x,y,z轴都进行了不同角度的旋转,从而最终达到旋转的结果。在这时,我们就将引入一个旋转公式,罗德里格斯旋转公式

在这个旋转矩阵中,定义了一个旋转轴n,旋转角度 \alpha 。默认为n轴过原点的。

当要所绕旋转的点不是原点时,就先将移动轴,使其旋转的点到原点上。在进行旋转后,再将原点移回本来的地方,所以上述中所说的默认n轴过原点也是不会影响结果的。

 2、视图变换(Viewing transformation)

简称MVP变换:模型、观测、投影变换

2.1、观测变换(View transformation)

观测变换:将3D中的物体变为了一张2D的图片。

由于物体和相机可以做相对运动,所以,为了简便后来的工作。约定俗成:将相机挪动后放在以y轴的方向上,将相机的中心挪动后永远放在原点(0,0,0),相机挪动后永远向 -Z 方向看。如下图:

 举个例子,如下图:

 题目如 \vec{e}\hat{t} \hat{g} 图,相机中心原本在\vec{e},朝着\hat{g}看,并且上方向是\hat{t},现在要变为,中心在原点,朝着 -Z 方向看。一一对应,在上图的下面一部分有步骤。(为了更好的理解,可以借助坐标轴旁边的类似沙漏型的图来理解旋转,虽然不是很形象,但是可以看出明显的旋转变换,毕竟是三维的物体,多借助想象)。

 

上图就是在数学中的部分了,M_{view}是需要求的矩阵,该矩阵首先是进行矩阵T_{view}的变换,也就是平移变换,上面所说的移动原点;接下来再进行矩阵 R_{view}的变换,也就是旋转变换。(从右至左!)

然后,矩阵T_{view}已经写出,比较好写;难的是矩阵R_{view},由于从\hat{g}到-Z、\hat{t}到Y、(g×t)到X的变换难表示,但是反过来其实会好表示,也就是写从X到(g×t),以此类推的好表示,也就是矩阵R_{view}^{-1},矩阵R_{view}的逆矩阵。再将它逆回去,本节开始之前就说你矩阵等于它的转置矩阵,所以可以从图中所得矩阵R_{view}

向上方向:可以想象下,在相机上插一根草,它会随着相机的旋转变换,而它所指的方向也就是向上方向。

2.2、投影变换(Projection transformation)

 透视投影(左):近大远小

 正交投影(右):一样大

2.2.1、正交投影(op) 

 如图中的坐标轴,对于物体和坐标轴的摆放方式就是上面内容说过的。摆放好后,拿走Z轴,就是正交投影的一个很形象的表现。

 接下来是正式的做法:

 将统一映射在(-1,1)的立方体中也是一个约定俗成的,为了让后面的计算更简单。(先平移后缩放

(f,n)在Z轴上,代表着远近;(b,t)代表着上下,在Y轴上; (l,r)代表着左右,在X轴上

在下图中,矩阵公式中,从右至左,先平移至原点,再缩放到(-1,1)的立方体。

 2.2.2、透视投影(PP)

应用最广泛,近大远小的性质,视觉效果就是平行线不再平行,更接近于眼睛的效果。 

下图中需要做的是:将Frustum中的f面“挤”成Cuboid的f面,其实就是将透视投影变为正交投影,求其M_{persp->ortho}矩阵变换

 如何“挤”就是一个难点,总结为:找特殊(点)倒推!求出M_{persp->ortho}矩阵变换

 可以用相似三角形的思想,如下图

 其中,\frac{y^{'}}{y}  =  \frac{n}{z}  ,即可得上式,便可以以此类推得到x相关的式子。

如下图:在齐次坐标中,在将其乘以z

 在上图中的最右下方的那个矩阵就是结果,现在就可以进行反推,得M_{persp->ortho}矩阵变换,如下图:

 接下来,在Frustum、Cuboid的图中n面为近的平面,并且在f面上的点到n面的距离,无论在“挤”前还是“挤”后都不变,如下图:(x,y,n,1)在n上的点,和在远的平面上点距离都不变

运用上面的规律,可得下图:

 在上述的最上面一行式子中,最左边是通用的公式,而到了右边,将这个式子放在上述所说的特殊规律中,距离不变。而靠下的式子中,(0,0,A,B)是求得的M_{persp->ortho}的第三行。(上述规律可得与x,y无关,所以推出了(0,0))

第二个特殊点:f面的中心点,在“挤”前“挤”后,也不变,则可得下图:f指的的中心点

 为何要将f变换f^{2},取决于最开始得到的结果中,列坐标的最后一个值为z,同上述n->n^{2}

而通过上面所说的n,f面的上的点距离不变可得下图:

 结合两式,解可得

 就可得出M_{persp->ortho}

接下来如图:得到了M_{persp->ortho},做了相关变换以后,还要再做正交的矩阵变换M_{ortho}就可得其透视的矩阵变换M_{persp}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值