如果对矩阵进行顺时针旋转 θ \theta θ角度,那应该怎么样表示。还是使用特殊值带入可以得到。我们发现更好是逆时针旋转 θ \theta θ角度的逆矩阵。在数学上,一个矩阵的逆矩阵恰好是该矩阵的话,我们称之为正交矩阵。
概述
3D 变换观测变换 视图/相机 变换投影变换 正交投影透视投影
3D 变换
如果绕着坐标轴旋转,变换如图所示。注意绕 y y y轴旋转的话,有点不一样。原因是之前说叉乘确定方向是右手定则, x x x 与 z z z 叉乘得到的向量与 y y y轴方向相反,使用 y y y轴的变换矩阵比较特殊( y y y是由 z ? \vec{z} z 叉乘 x ? \vec{x} x 得到)。
绕着一个坐标轴旋转,其所属坐标保存不变,其他坐标转换为2D旋转模型。
一般旋转
我们能否使用绕轴旋转的组合得到一般旋转?
一般旋转通用公式:
公式证明过程:
和2D变换相似,我们的旋转是默认原点旋转。首先我们讲其平移到原点,然后进行旋转,然后再平移到目标位置。拓展:老师建议学有余力的同学可以考虑了解四元数知识
View/ Camera Transfomation
如何完成视图变换
首先定义相机
位置朝向旋转方向
关键观察
通过 M v i e w M_{view} Mview?矩阵改变相机[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09YUAyn2-1634820015446)(高级计算机图形学二.assets/image-20211021105725142.png)]
首先通过平移移动到原点坐标,变换为 T v i e w T_{view} Tview?;把 t t t轴放置到 y y y轴,把 g g g轴放置到 ? z -z ?z轴,但是直接映射不太好写,如果放过来,把 x 、 y 、 z x、y、z x、y、z轴发过来的话,比较方便,然后进行逆变换:
旋转变换矩阵是正交矩阵,其逆矩阵为它的转置矩阵。
Projection transformation
有两种投影,一一种是正交投影,一种是透视投影
正交投影
把 Z Z Z扔掉,这所有的平面都在 x x x y y y 平面上,然后把结果变成[-1,1]范围。
问题: 如何判断前后面?
如何把物体映射到正交平面
转换为矩阵变换的表示,先平移再调整规格:
因为选定的坐标轴使用右手定则,所以远近的方面恰好相反。
OpenGL使用的 Z Z Z轴和我们这里假定的相反,所以出现相反的结果是合理现象
视图投影——使用最广泛的投影
在同一平面内,两个平行线不会相交。但是在透视投影中,平行线是会相交的。
如何做视图投影
挤压Frustum挤压成Cuboid
给定 y y y变化可以得知变换,最后推广到 x 、 z x、z x、z
根据 x 、 y 、 z x、y、z x、y、z如何变换,可以得到矩阵 M p e r s p ? > o r t h o M_{persp->ortho} Mpersp?>ortho? ,只剩下第三行不知道。
近的平面上任何点不会变换,远的平面 z z z轴的点不会变换
上图中,在近端 x , y x,y x,y保持不变。所以 ( 0 ?? 0 ?? A ? B ) (0\space \space 0 \space \space A \space B) (0??0??A?B)
列方程解出 A ? B A\space B A?B。这一步完成了解压操作,把平面挤压成了正交投影;之后进行正交变换。这样的结果可以得到最终变换。