DirectX沿不同平面旋转

时间:2010-09-14 16:41:07

标签: directx

有没有办法沿不同的平面旋转物体?我正在制作一个太阳系的3D模型,我想让冥王星围绕太阳旋转在与其他行星不同的平面上。我目前在xz平面上围绕太阳旋转的前八个行星(围绕y轴旋转)。有没有一种简单的方法可以做到这一点而无需进入复杂的数学?这就是我实施其他星球的方式,

D3DXMATRIX marsMat;
D3DXMATRIX marsScale;
D3DXMATRIX marsTrans;
D3DXMATRIX marsAxisRot;
D3DXMATRIX marsRot;

D3DXMatrixScaling(&marsScale,0.45,0.45,0.45);
D3DXMatrixRotationY(&marsAxisRot,D3DXToRadian((GetTickCount()-start)*0.07));
D3DXMatrixTranslation(&marsTrans,-17,0,0);
D3DXMatrixRotationY(&marsRot,D3DXToRadian((GetTickCount()-start)*0.007));

marsMat = marsScale * marsAxisRot * marsTrans * marsRot;

matrixStack->Push();
{
   matrixStack->MultMatrixLocal(&marsMat);
   d3ddev->SetTransform(D3DTS_WORLD,matrixStack->GetTop());
   marsMesh->DrawSubset(0);
}
matrixStack->Pop();

1 个答案:

答案 0 :(得分:1)

D3DXMatrixRotationAxis就是你想要的。

记住一个平面实际上是一个垂直于它描述的平面的向量,D参数描述了距离原点的距离。因此,使用A,B和C参数创建矢量。将其标准化并将其用作旋转轴。然后你可以翻译它,使它的原点就是太阳的位置(无论如何它可能是旋转的原点)。