3D变换(3D Transformation)
如果用齐次坐标来表示三维的点或向量,和二维的情况相似:
- 3D point = (x,y,z,1)T
- 3D vector = (x,y,z,0)T
则一个齐次坐标 (x,y,z,w)T (w≠0) 表示的点为 (xw,yw,zw)
缩放(Scale)
S(sx,sy,sz)=(sx0000sy0000sz00001)
平移(Translation)
T(tx,ty,tz)=(100tx010ty001tz0001)
旋转(Rotation)
自然旋转
📌自然旋转: 绕着某一个坐标轴旋转。
💡思考: 当绕着x轴旋转时,矩阵在x轴上的坐标值是不变的,因此在变换矩阵中,与X相乘的部分,是 (1,0,0),绕y、z轴同理。
绕x轴旋转:
Rx(α)=(10000cosα−sinα00sinαcosα00001)
绕y轴旋转:
Ry(α)=(cosα0sinα00100−sinα0cosα00001)
💡思考: 上式的变换矩阵,与x、z不同,是 R−θ 而不是 Rθ,这是为什么呢?
因为绕y旋转,如果使用 Rθ,那么可以认为在计算过程中x和z坐标在变化,有 (X′Z′)=Rθ⋅(XZ)=(cosθ−sinθsinθcosθ)(XZ) , 但是, →x×→z=−→y,也就是说,使用 Rθ 会导致绕y旋转是顺时针旋转,而我们约定了,旋转默认是逆时针旋转,所以需要用 R−θ=(cosθsinθ−sinθcosθ)
绕z轴旋转:
Rz(α)=(cosα−sinα00sinαcosα0000100001)
一般旋转
任意一个3D旋转,可以写成:
Rxyz(α,β,γ)=Rx(α)Ry(β)Rz(γ)
也就是说,一般旋转可以由绕x、y、z轴的自然旋转组合而成。
在图形学中,任意旋转用矩阵表达为(Rodrigues' Rotation Formula):
R(n,α)=cos(α)I+(1−cos(α))nnT+sin(α)(0−nznynz0−nx−nynx0)⏟N
公式推导:(暂无)
为解决旋转插值问题,参考四元数link。
本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/