2014-01-26 290 views
0

我想用D3DXVec3TransformCoordArray和一個世界矩陣來定位和旋轉三角形,但是當我繪製轉換的三角形時,它們會變得非常可怕。我究竟做錯了什麼? (順便說一句,我必須這樣做的CPU,它不適合繪圖的目的...)DirectX矩陣轉換

 D3DXVECTOR3 tri[3]; 
     tri[0] = mbuffer.vertices[mbuffer.indices[x]].position; 
     tri[1] = mbuffer.vertices[mbuffer.indices[x + 1]].position; 
     tri[2] = mbuffer.vertices[mbuffer.indices[x + 2]].position; 
     D3DXMatrixRotationQuaternion(&rotM, &obj->getRotation()); 
     D3DXMatrixTranslation(&posM, obj->getPosition().x, obj->getPosition().y, obj->getPosition().z); 
     transM = rotM * posM; 
     D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3); 

當我註釋掉最後一行D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3);那麼物體呈現精細,但是,當然,不改變...

編輯: 另外,obj->getPosition()obj->getRotation()返回正確的值。

EDIT2: 還好吧,好像

D3DXVec3TransformCoord(&tri[0], &tri[0], &transM); 
D3DXVec3TransformCoord(&tri[1], &tri[1], &transM); 
D3DXVec3TransformCoord(&tri[2], &tri[2], &transM); 

,而不是

D3DXVec3TransformCoordArray(tri, 1, tri, 1, &transM, 3); 

解決了這個問題。

誰能告訴我如何正確使用D3DXVec3TransformCoordArray? (MSDN不是很有幫助)

回答

0

編輯: D3DXVec3TransformCoordArray在這種情況下,步長參數應該是D3DXVECTOR3的大小。 嘗試傳遞D3DXVec3TransformCoordArray transM矩陣,而不是posM,如果要旋轉和平移。

+0

哦,是的,它應該是transM而不是posM,但我想知道它是否至少與位置一起工作,並忘記將其改回。我會編輯它。確定參數2和4? MSDN說不同。我嘗試將它們更改爲3,但沒有幫助。看起來更糟糕^^ – theCNG27