games101_笔记_03:矩阵与变换,齐次坐标
课前复习:向量的定义,基本操作,加与乘(点乘与叉乘) dot product and cross product.
transform变换:
ue里面常见的摄像机通过插入关键帧,然后就能实现一个运动,这种运动路线是怎么算出来的呢,变换就是答案。
皮克斯动画那个台灯,i会被压扁,这种压扁也能用变换表示。
用相机拍照,三维变成2维的过程,也是一种变换。
首先说2维的变换:
缩放变换:
反转缩放:
切边(shear matrix):
旋转矩阵:Rotation martrix
过程推导:
上述的矩阵都能写成这种形式,就是线性的
很明显能写出矩阵乘矩阵没有用到加法。这个需要记住对应一下。
如果我们要写平移的矩阵:
只能写出这个形式:
我们无法写成一个矩阵乘以另一个矩阵,同时说明平移不是一个线性的变换,但是是有办法去写成两个矩阵相乘的,来表达这个效果,再引入一个维度,引入一个齐次坐标的概念。
齐次坐标:统一以上所有变换。
对于每一个点加上一个1:
这里的0反而强调了向量的平移不变性。
但如果从向量的代数来源考虑就是点的坐标互相减,那么最终会得到0.无论是从几何角度还是从代数角度,都能明白向量的平移的不变性。
但是我们得到了后面不是1的呢:
这个东西说明了一个概念:在齐次坐标下,两点相加反而是终点。
这个时候我们把之前不能写成矩阵互乘的矩阵式子,我们把这个式子叫仿射变换
齐次坐标统一了一般的变换和仿射变换。
这个时候在齐次坐标之下:
2D的空间矩阵操作就变为了:
代价很小但是统一了矩阵,方便了写代码。这也是为啥在shader里面写float4,而不是float3
反变换:
这个矩阵让效果变回了最初的样子
这幅图的两个思路,一个是先旋转后平移,再是先平移后旋转。但是稍微一思考我们就能发现,思路的不同结果是不同的,这个图的思路就是先旋转再平移
矩阵的组合:
这个组合矩阵就表示了先旋转再平移,同时这个矩阵组合是从右边开始读到左边。这个说明了矩阵的读法问题。
把这个概念推广:
从右边读着走
虽然矩阵是没有交换律的,但是矩阵是有结合律的,那么我把左边所有矩阵先乘
我能得到一个表达非常复杂运动的矩阵。
随着问题也来了,我在表示这个的图的变化的时候,我很容易就会发现一个很大的问题,位置没有改变,但是具体的方向改变了,如果我在这个位置进行旋转,位置是会改变的。
所以一个常见的思路就是先平移回原点,再旋转,然后用平移的逆矩阵,就能得到一个如图的旋转效果的矩阵。但是我们如果把这三个矩阵乘在一起,得到一个组合的矩阵,这个矩阵会出现一个单位矩阵吗?答案是不会的,这里要想到上面的从右边开始读,这样就不会,会产生有单位矩阵的错误想法是因为脑海里面对这三个矩阵做一个交换律
这个过程就是一个变换的分解。
这些讨论都是二维空间的变换。
那么我现在讨论一下三维的变换。
所以在齐次坐标空间下,哪怕是三维空间,相加也是代表了中点。
本文作者:Kerios
本文链接:https://www.cnblogs.com/kerios-123/p/15847012.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步