2014-09-10 121 views
1

我有下一個問題。我正試圖在同一時間圍繞所有3軸旋轉3D模型。意思是我想圍繞X軸旋轉模型,然後是Y軸,然後再按X鍵,然後按鍵盤上的按鈕。問題是,當我使用XMMatrixRotationX,XMMatrixRotationY或XMMatrixRotationZ這樣的:在DirectX 11.2中的所有3(X,Y,Z)軸上旋轉模型C++

void Rotate(float radians_x, float radians_y, float radians_z) 
    { 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationZ(radians_z))); 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationY(radians_y))); 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationX(radians_x))); 
    } 

只有最後一個旋轉得到執行。我希望能夠按照特定角度(實際上是弧度)圍繞每個軸旋轉對象,如代碼中所示。我發現XMMatrixRotationAxis方法是這樣做的,但它只需要一個角度參數,並且我想爲每個軸使用一個不同的角度參數。任何人都可以幫助我解決這個問題嗎?

此外,我不知道要發送什麼作爲XMMatrixRotationAxis的第一個參數,它只是說一個軸的矢量。我不明白我如何訪問這些,我在發佈的代碼中使用的方法不需要發送任何軸。我不明白爲什麼這是必要的,或者如何去做,以防萬一這是正確的解決方案。

任何幫助將不勝感激。

回答

2

我已經找到了答案在這裏:

http://books.google.hr/books?id=7ZkLAAAAQBAJ&pg=PA251&lpg=PA251&dq=XMMatrixRotationQuaternion&source=bl&ots=xveQhsj-x_&sig=Ny6IdK1JNFBF99LyC_HY8b-y4tI&hl=hr&sa=X&ei=dtkQVOmmA8aXatfugZgL&ved=0CHEQ6AEwCA#v=onepage&q=XMMatrixRotationQuaternion&f=false

我必須使用XMMatrixRotationRollPitchYaw。現在,該代碼如下:

void Rotate(float radians_x, float radians_y, float radians_z) 
    { 
     DirectX::XMStoreFloat4x4(&_transfer.world, DirectX::XMMatrixTranspose(DirectX::XMMatrixRotationRollPitchYaw(radians_x, radians_y, radians_z))); 
    } 

就像一個魅力:)