Directx11围绕世界中心旋转?

时间:2014-03-29 08:28:44

标签: c++ directx-11

我现在用directx玩了一段时间,并且无法弄清楚如何旋转它而不会一直旋转它(0,0,0)。我离世界中心越远,旋转时就会产生更大的圆圈。

2 个答案:

答案 0 :(得分:0)

如果你需要一个旋转α,围绕位于(x 0,y 0,z 0)的点p,你创建矩阵:

T(-x₀,-y₀,-z₀) * R(α) * T(x₀,y₀,z₀)

T表示翻译,R表示旋转。此外,根据您的约定,例如行或列矩阵,您可能必须恢复操作顺序。

答案 1 :(得分:0)

不要忘记矩阵变换适用于坐标系。假设您希望将对象在xy平面上向上移动20个单位,并将其旋转90度。如果先旋转90度,则将整个平面旋转90度。这意味着当您向上平移y轴时,90度是新的“向上”。

所以,我们首先翻译,以便我们的对象的中心是0,0。现在当我们旋转时,我们应该围绕物体的中心旋转。当然,不要忘记翻译,或以某种方式清除矩阵。

顺序在进行矩阵变换时很重要,我相信你知道。通常,您应该翻译,缩放,然后旋转。