《OGL dev》Etay Meiri Tutorial 07 - Rotation Transformation 笔记

假设z轴向屏幕内,从a1a_1旋转到a2a_2,绕z轴的旋转矩阵推导(不考虑旋转正方向):

x1=cos(a1)y1=sin(a1)x2=cos(a1+a2)y2=sin(a1+a2)x_1 = cos(a_1) \\ y_1 = sin(a_1) \\ x_2 = cos(a_1 + a_2) \\ y_2 = sin(a_1 + a_2)

和角公式:

cos(α+β)=cos α⋅cos β−sin α⋅sin βsin(α+β)=sin α⋅cos β+cos α⋅sin βcos(α + β) = cos \ α \cdot cos \ β - sin \ α \cdot sin \ β \\ sin(α + β) = sin \ α \cdot cos \ β + cos \ α \cdot sin \ β

代入可得:

x2=cos(a1+a2)=cos a1⋅cos a2−sin a1⋅sin a2=x1⋅cos a2−y1⋅sin a2y2=sin(a1+a2)=sin a1⋅cos a2+cos a1⋅sin a2=y1⋅cos a2+x1⋅sin a2x_2 = cos(a_1 + a_2) = cos \ a_1 \cdot cos \ a_2 - sin \ a_1 \cdot sin \ a_2 = x_1 \cdot cos \ a_2 - y_1 \cdot sin \ a_2 \\ y_2 = sin(a_1 + a_2) = sin \ a_1 \cdot cos \ a_2 + cos \ a_1 \cdot sin \ a_2 = y_1 \cdot cos \ a_2 +x_1 \cdot sin \ a_2

逆推出z轴的旋转矩阵:

[cos a−sin a00sin acos a0000100001][xyz1]=[x⋅cos a−y⋅sin ax⋅sin a+y⋅cos az1]\begin{bmatrix} cos \ a & - sin \ a & 0 & 0 \\ sin \ a & cos \ a & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \cdot cos \ a - y \cdot sin \ a \\ x \cdot sin \ a + y \cdot cos \ a \\ z \\ 1 \end{bmatrix}

同理可推导绕y轴和x轴的旋转矩阵(不考虑旋转正方向):

[cos a0−sin a00100sin a0cos a00001][xyz1]=[x⋅cos a−z⋅sin ayx⋅sin a+z⋅cos a1]\begin{bmatrix} cos \ a & 0 & - sin \ a & 0 \\ 0 & 1 & 0 & 0 \\ sin \ a & 0 & cos \ a & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \cdot cos \ a - z \cdot sin \ a \\ y \\ x \cdot sin \ a + z \cdot cos \ a \\ 1 \end{bmatrix}

[10000cos a−sin a00sin acos a00001][xyz1]=[xy⋅cos a−z⋅sin ay⋅sin a+z⋅cos a1]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos \ a & - sin \ a & 0 \\ 0 & sin \ a & cos \ a & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} = \begin{bmatrix} x \\ y \cdot cos \ a - z \cdot sin \ a \\ y \cdot sin \ a + z \cdot cos \ a \\ 1 \end{bmatrix}