2014-10-04 118 views
0

我想围绕全局y轴旋转对象(基本上围绕0,1,0偏转,不管当前方向是什么)。我会显示一张图片,但声望...我想围绕一个全局轴旋转偏航而不是该对象的本地轴。例如,如果我通过俯仰稍微倾斜一个盒子,然后尝试旋转偏航,它将以倾斜角度而不是直线旋转盒子,就好像盒子完全没有倾斜一样。使对象围绕全局坐标轴旋转Directx

每个对象存储在被更新的每一个更新呼叫的基质其位置和旋转。旋转代码如下所示:

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll); 
D3DXMatrixMultiply(&position, &rotation, &position); 

其中位置是每次更新都翻译和旋转的优秀矩阵。这是在本地旋转它,但我想通过全局轴旋转偏航。

我怎么能写这样使得偏航转动完成,犹如当地的向上矢量为(0,1,0),即使倾斜?

回答

0

在下面的代码有两个旋转矩阵A和B之一是围绕由worldYaw本地轴的旋转,而另一个是围绕由worldYaw全局轴的旋转。

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll); 
D3DXMatrixRotationYawPitchRoll(&worldRotation, worldYaw, 0, 0); 
D3DXMatrixMultiply(&A, &rotation, &worldRotation); 
D3DXMatrixMultiply(&B, &worldRotation, &rotation); 

我永远不能把它在我的头上,如果D3D使用的行或列向量,所以我不能说,如果A或B是你在找什么:)

+0

Direct3D在历史上使用左手行主矩阵。 XNA Game Studio和DirectX Tool Kit SimpleMath类使用左手行主矩阵。 [DirectXMath](http://blogs.msdn.com/b/chuckw/archive/2012/03/27/introducing-directxmath.aspx)可以支持左手或右手行主矩阵。不赞成使用的D3DX数学库使用左手,行主。 – 2014-10-05 05:58:33

+0

这是做同样的事情:/我不希望旋转发生在世界各地,好像立方体正在轨道上行星一样。基本上我想让它假装局部上轴总是(0,1,0),而不是在做一些俯仰之后倾斜。 – NeonWolfTrance 2014-10-05 14:25:20

0

固定的问题。决定存储前一帧的旧值以重建位置矩阵。

我现在建一个矩阵关闭当前帧的变化,完成平移和旋转,然后创建最终的矩阵前添加这些值到总价值。

工程就像一个魅力!