总结
- 对于观察空间(以摄像机为原点的坐标系),Unity使用的是右手坐标系。对于模型空间和世界空间,Unity使用的是左手坐标系。
- 矢量是指n维空间中一种包含模和方向的有向线段。
- 在Unity中,常规做法是把矢量放在矩阵的右侧,即把矢量转换成列矩阵来进行计算。
CBAv = (C(B(Av)) 等价于v A T A^T AT B T B^T BT C T C^T CT = ((v A T A^T AT B T B^T BT) C T C^T CT)
使用列向量的结果是,阅读顺序是从右到左的,即先对 v 使用A进行变换,再使用B进行变换,最后使用C进行变换。 - 大多数情况下,复合变换约定的顺序是先缩放、在旋转,最后平移。
- 绕x轴、y轴、z轴旋转的变换矩阵,在Unity中,这个选择顺序是 zxy。
矢量运算
-
矢量和标量的乘法/除法
kv = (kvx, kvy, kvz)
v/k = (vx/k, vy/k, vz/k) (k != 0) -
矢量的加法和减法
a + b = (ax + bx,ay + by, az + bz)
a - b = (ax - bx, ay - by, az - bz) -
矢量的模
|v| = v x ∗ v x + v y ∗ v y + v z ∗ v z \sqrt{vx*vx + vy*vy + vz*vz} vx∗vx+vy∗vy+vz∗vz -
单位矢量
模为 1 的矢量 -
向量的点积(结果为标量)
a ⋅ b a \cdot b a⋅b = (ax, ay, az) * (bx, by, bz) = ax*bx + ay*by + az*bz
a ⋅ b a \cdot b a⋅b = |a| * |b| * cosα
a ⋅ b a \cdot b a⋅b = b ⋅ a b \cdot a b⋅a
a ⋅ ( b + c ) a \cdot (b + c) a⋅(b+c) = a ⋅ b a \cdot b a⋅b + b ⋅ c b \cdot c b⋅c
意义:
b 在 a 方向上的投影值 -
向量的叉积(结果为矢量)
a x b = (ax, ay, az) x (bx, by, bz) = (aybz - azby, azbx - axbz, axby - aybx)
|a x b| = |a| * |b| * sinα
不满足交换律
a x b != b x a
满足反交换律
a x b = -(b x a)
b x a = (bx, by, bz) x (ax, ay, az) = (by*az - bz*ay, bz*ax - bx*az, bx*ay - by*ax) = - (a x b)
不满足结合律
(a x b) x c != a x (b x c)
意义
对两个矢量进行叉积的结果会得到一个同时垂直于两个矢量的新矢量; -
应用
计算垂直于一个平面、三角形的矢量;判断三角面片的朝向;
矩阵(matrix)运算
矩阵与矩阵的乘法
- 一个 r X n 的矩阵 A 和一个 n X c 的矩阵 B 相乘,结果 C=AB 为 r X c 大小的矩阵;
- C 的每一个元算 Cij = A 的第 i 行和 B 的第 j 列所有对应的矢量进行矢量点乘的结果;
- 矩阵的乘法不满足交换律
AB != BA - 矩阵的乘法满足结合律
(AB)C = A(BC)
特殊的矩阵
方块矩阵(方阵)
- 指的是行与列数目相等的矩阵;
单位矩阵
- 对角元素全部为 1;
- IM = M = MI
转置矩阵
- 把矩阵的第 i 行变成第 i 列,而第 j 列变成第 j 行;
- 矩阵转置的转置等于原矩阵
(MT)T = M - 矩阵串接的转置,等于反向串接各个矩阵的转置
( A B ) T (AB)^T (AB)T = B T A T B^T A^T BTAT
逆矩阵
- 必须是一个方阵;
- 矩阵与矩阵的逆矩阵相乘为单位矩阵
MM-1 = M-1M = I - 逆矩阵的逆矩阵是原矩阵本身
(M-1)-1 = M - 单位矩阵的逆矩阵是它本身
I = I-1 - 转置矩阵的逆矩阵是逆矩阵的转置
(MT)-1 = (M-1)T - 矩阵串接相乘后的逆矩阵等于反向串接各个矩阵的逆矩阵
(ABCD)-1 = D-1 C-1 B-1 A-1
正交矩阵
- 如果一个方阵 M 和他的转置矩阵的乘积是单位矩阵的话,这个矩阵就是正交的;
MMT = MTM = I - 如果一个矩阵是正交的,那么它的转置矩阵和逆矩阵是一样的;
MT = M-1 - 快速判断正交矩阵
1)矩阵的每一行都是单位矢量;
2)矩阵的每一行与另外的每一行相互垂直;
矩阵变换
- 使用 3x3 矩阵就可以表示旋转和缩放等线性变换;
- 不可以使用 3x3 矩阵来表示一个平移变换,扩展到 4x4 的矩阵就可以了;
- 齐次坐标空间,即四维空间;
齐次坐标
一般指的是四维矢量
基础变换矩阵
纯平移、纯旋转和纯缩放的变换矩阵叫做基础变换矩阵
[
M
3
x
3
t
3
x
1
0
1
]
\left[ \begin{matrix} M3x3 & t3x1 \\ 0 & 1 \\ \end{matrix} \right]
[M3x30t3x11]
解释:
M3x3 用于表示旋转和缩放
t3x1 用于表示平移
01x3 是零矩阵
平移矩阵
缩放矩阵
旋转矩阵(是正交矩阵)
绕X轴旋转
绕Y轴旋转
绕Z轴旋转