物体的世界变换矩阵为
正文
物体的世界变换矩阵由以下几个部分组成
- 位置(Translation):物体在世界坐标系中的位置
- 旋转(Rotation):物体相对于世界坐标系的旋转
- 缩放(Scaling):物体各轴的缩放因子
1.定义位置,旋转,缩放的矩阵
- 位置(Translation):T=txtytzT,转换到齐次坐标系中则表示为T=100001000010txtytz1
- 旋转(Rotation):使用旋转矩阵R表示,通常由欧拉角,四元数或其他表示转换法得到
- 欧拉角
- 绕x轴旋转
Rx(α)=10000cosαsinα00−sinαcosα00001
- 绕y轴旋转
Ry(β)=cosβ0−sinβ00100sinβ0cosβ00001
- 绕z轴旋转
Rz(γ)=cosγsinγ00−sinγcosγ0000100001
假设我们有绕X,Y,Z轴旋转角度分别为α,β,γ, 则旋转矩阵可以表示为这三个基本旋转矩阵的乘积:
R=Ry(β)⋅Rx(α)⋅Rz(γ)
注意:欧拉角表示旋转时需要明确旋转的顺序,不同的顺序会产生不同的结果,在unity中表示旋转矩阵时需要按照ZXY的旋转顺序来运算才能得到正确的结果
- 四元数
qx=cos2α+sin2αi
qy=cos2α+sin2αj
qz=cos2α+sin2αk
四元数转换为矩阵
R=1−2(y2+z2)2(xy+wz)2(xz−wy)02(xy−yz)1−2(x2+z2)2(yz+wx)02(xz+wy)2(yz−wx)1−2(x2+y2)00001
- 缩放(Scaling):sxsyszT,转换到齐次坐标系中则表示为T=sx0000sy0000sz00001
2.计算变换矩阵
变换矩阵M是位置,旋转和缩放的组合,且位置矩阵,旋转矩阵,缩放矩阵有明确的运算顺序:Scaling -> Rotation -> Translation:
M=T⋅R⋅S⋅I
I为单位矩阵,引入它来更好的表示运算的顺序
S⋅I=sx0000sy0000sz00001⋅1000010000100001=sx0000sy0000sz00001
R⋅(S⋅I)=cosθsinθ00−sinθcosθ0000100001⋅sx0000sy0000sz00001=sxcosθsxsinθ00−sysinθsycosθ0000sz00001
这里旋转矩阵采用绕z轴的旋转矩阵,如果x,y,z轴均有旋转,需要组合起来进行运算
T⋅(R⋅(S⋅I))=100001000010txtytz1⋅sxcosθsxsinθ00−sysinθsycosθ0000sz00001=sxcosθsxsinθ00−sysinθsycosθ0000sz0txtytz1
总结
- unity使用列主序矩阵,采用右乘法
- 矩阵M表达的信息为
- 自身x轴方向(sxcosθ,sxsinθ,0)
- 自身y轴方向(−sysinθ,sycosθ,0)
- 自身z轴方向为(0,0,sz)