Processing math: 100%

3D变换(3D Transformation)

如果用齐次坐标来表示三维的点或向量,和二维的情况相似:

  • 3D point = (x,y,z,1)T
  • 3D vector = (x,y,z,0)T

则一个齐次坐标 (x,y,z,w)T (w0) 表示的点为 (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α00100sinα0cosα00001)

💡思考: 上式的变换矩阵,与x、z不同,是 Rθ 而不是 Rθ,这是为什么呢?

因为绕y旋转,如果使用 Rθ,那么可以认为在计算过程中x和z坐标在变化,有 (XZ)=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+(1cos(α))nnT+sin(α)(0nznynz0nxnynx0)N

公式推导:(暂无)

为解决旋转插值问题,参考四元数link


本文出自CaterpillarStudyGroup,转载请注明出处。
https://caterpillarstudygroup.github.io/GAMES101_mdbook/