2010-09-14 41 views
2

有没有办法沿不同平面旋转对象?我正在制作一个太阳系的3D模型,我想让冥王星在与其他行星不同的平面上围绕太阳旋转。我目前拥有前8个绕xz平面围绕太阳旋转的行星(围绕y轴旋转)。有没有一种简单的方法来做到这一点,而不需要进入复杂的数学?这就是我实现了我的其他行星,DirectX沿不同平面旋转

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

D3DXMatrixRotationAxis是你想要的。

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

+0

干杯队友。奇迹般有效。 – lightnin2211 2010-09-16 17:39:32