http://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations
Rx(θ) = 1 0 0
0 cos θ -sin θ
0 sin θ cos θ
Ry(θ) = cos θ 0 sin θ
0 1 0
-sin θ 0 cos θ
Rz(θ) = cos θ -sin θ 0
sin θ cos θ 0
0 0 1
但是,我发现Direct3D使用这些旋转矩阵的转置。
在我的应用程序中,我有一个通用矩阵类,它使用标准的数学旋转表示。用一个简单的旋转大约1个轴,它很容易转换成Direct3D矩阵,因为你可以只做换位。然而,如果你旋转x,y,然后z,你不能简单地得到转置矩阵。
下面是一个例子:
矩阵矩阵;
基质旋转体(1.0f);
RotateZ矩阵(1.0f);
m_0.29192656浮子
m_12-0.45464867浮子
m_13 0.84147096浮子
m U 21 0.83722234浮子
m_22-0.30389664浮子
m_23-0.45464867浮子
m_31 0.46242565浮子
m U 32 0.83722234浮子
m_33 0.29192656浮子
m_41 0.00000000浮动
m_42 0.00000000浮动
m_43 0.00000000浮动
Direct3D矩阵=
_11 0.29192656浮子
_13-0.84147096浮子
_14 0.00000000浮动
_21-0.07207509浮子
_22 0.88774973浮子
_23 0.45464867浮子
_24 0.00000000浮动
_32-0.07207509浮子
_34 0.00000000浮动
_42 0.00000000浮动
_43 0.00000000浮动
编辑
:下面是一些单独旋转的示例。
我的矩阵类:
1.0000000 0.00000000 0.00000000 0.00000000
0.00000000 0.54030228 -0.84147096 0.00000000
0.00000000 0.84147096 0.54030228 0.00000000
0.00000000 0.00000000 0.00000000 1.0000000
1.0000000 0.00000000 0.00000000 0.00000000
0.00000000 0.54030228 0.84147096 0.00000000
0.00000000 -0.84147096 0.54030228 0.00000000
0.00000000 0.00000000 0.00000000 1.0000000
如您所见,Direct3D矩阵正是matrix类的转置(我的类给出的结果与Wikipedia在本问题顶部给出的示例相同)。