GAMES101笔记-02

本篇对应的是GAMES101的第四课

上节课已知旋转θ角度时用矩阵表示为

 

 那么如果要旋转-θ度,则将θ全部替换为-θ,得到结果为

 

 

此时这个矩阵正好与原来矩阵的倒置相同

 

当一个矩阵的逆等于这个矩阵的转置,将其称为正交矩阵。

 

 


 

 

三维空间的变换

三维空间的旋转操作

在三维空间中本身矩阵是3*3的表示xyz轴,因此引入齐次坐标后变为4*4

 

 

 变换如上图,当x轴不变,在yz轴平面上旋转时第一行与单位矩阵的第一行一致,其余不变。同理,z轴不变时第三行与单位矩阵第三行一致。

但y轴不变时的sinα和-sinα互相交换,原因在于当在xz平面旋转时,x轴与z轴叉乘得到的是-y轴而并非y轴(也可以简单理解一下,当你用平时看xzy轴的视角,同时把z轴转到原来y轴的位置,x轴不变,此时y轴朝下)

可以表示三维空间任意旋转操作的公式:罗德里格斯公式

其中n为旋转轴,α为旋转角度。但实际上向量不能作为旋转轴,故在这里默认旋转轴的起点在原点上,方向与该向量方向相同

 绕任意轴旋转,即先将旋转目标平移至原点处旋转后再平移回去


 

视图变换

MVP变换:1.模型变换 2.视图变换 3.投影变换

如何定义一个相机:1.相机位置 2.镜头看的方向  3.向上方向(用于固定相机自身的旋转方向)

实际操作时往往将该相机放置到标准位置上(0,0,0)所以要将原本随意摆放的相机进行移动,将镜头方向和向上方向分别与-z轴和y轴对应

 

然后就是实现方法。首先考虑的是通过矩阵与原始的三个轴旋转最终得到xy和-z轴,但这样实现难度比较大,故考虑反着写,即将结果的三个轴(xy-z)旋转得到初始相机轴的方向。先求逆变换矩阵,然后再得到结果

这是我们要求的逆变换矩阵

 

将该矩阵分别与xy-z轴单位向量相乘,可以得到相机的信息。(第三列为-g是因为与之相乘的是-z轴(0,0,-1))

旋转矩阵是正交矩阵,其逆矩阵就是转置矩阵,因此转置后得到结果

mvp变换中的模型变换与之类似,当摄像机移动时模型也需要同步移动

投影变换

正交投影没有近大远小的变化,常用于工程制图,与之对应的是透视投影。透视投影更贴近人眼所看到的真实景象,有近大远小的现象

正交投影的实现方式:定义一个长宽高均为2且中心在原点的标准立方体,同时标注出需要投影的物体(暂且称为物体A)的长宽高范围。将A的中心移动到原点,之后对其在不同方向上分别进行缩放使其长宽高正好与标准立方体相同,效果如图所示

其中xyz轴上的长度范围分别是[l,r],[b,t],[f,n]。其中f离观察者较近,原因是观察是向着-z方向看的,离得越远z轴坐标越小。

 关于透视投影,要比正交投影麻烦不少。下左图中的线最终会相交于一点而并非平行,要实现这样的效果,该课程给出的方案是:

将较远的面“挤压”,近面不做改变得到一个长方体,然后再将长方体做正交投影得到结果。这样做更有利于我们对其进行处理,做完“挤压”后就可以用正交投影的方法进行处理。(题外话:看到这里的时候我突然想到了三维建模里的FFD非常容易做类似这样的操作,于是我想如果把一个正交视图中的物体用FFD处理一下,是否也能达到透视视图的效果(虽然说有点多此一举))

 接下来是“挤压”步骤的具体实现:

 

此处n是near也就是说n那里的点,实际上对应着近平面。而z对应着远平面。由相似易知远平面上的点变动后y坐标会变为(n/z)*y。x同理,变为n/z)*x。

目前已知的情报:

 也就是说知道开头和结果,所以需要我们把过程,也就是乘的那个矩阵推出来

考虑到齐次坐标的点上的坐标值都扩大相同倍数表示的还是同一个点,将四个数都和z相乘,得到

 于是可以得到如下矩阵,由于z未知,所以第三行的点未知

 但又由于我们知道近平面上的点的z坐标是不会变的所以结果是n²(z为n,又因为坐标都乘上n)

而要得到n²,是不可能有x和y参与的,所以说四个问号的哪一行的前两列是0,因为他们在点乘与x和y相乘

所以可以缩小范围,将这一行写作(0,0,A,B)。它和原坐标相乘后得到n²。

所以我们得到An+B=n²。

又因为远平面上的点z坐标同样不变,设这个z值为f,同理可以得到Af+B=f²

化简得到如下结果

所以我们到这儿就得到了对整个物体上的点都通用的矩阵,任意一点与该矩阵相乘后可以得到挤压后的坐标

本节课到此为止辣!

关于结尾老师问的中间的点z坐标会不会变动,答案是会,并且会整体往远处推。因为既要满足远面近面大小一样,又要有透视关系。因为有透视,所以是仍然符合近大远小的,而挤压过程中离近面越近的直观感受上会拉的越长,在z轴上看也就是离得越远。当然也可以直接代入公式算,比如拿最中间的点坐标,得到仍然是z往远处移动。


 

 两个多星期没更新,我觉得主要还是因为心情不太好,前段日子脚崴了,虽说呆在宿舍的时间长了,但并不像平时那样好歹有一些干劲,整个人像条咸鱼啥都不想干。另外一个原因就是26号的时候星穹铁道开服,一直到昨天都在爆肝.....

posted @ 2023-04-14 17:51  miku今天吃什么  阅读(50)  评论(0编辑  收藏  举报