2013-12-17 174 views
1

我正在创建一个3D场景,并且我刚插入一个立方体对象。它在起源处呈现良好,但是当我尝试旋转它并翻译它时,我得到一个巨大的变形立方体。这是问题所在区域在我的代码:DirectX11 - 矩阵转换

D3DXMATRIX cubeROT, cubeMOVE; 

D3DXMatrixRotationY(&cubeROT, D3DXToRadian(45.0f)); 
D3DXMatrixTranslation(&cubeMOVE, 10.0f, 2.0f, 1.0f); 

D3DXMatrixTranspose(&worldMatrix, &(cubeROT * cubeMOVE)); 

// Put the model vertex and index buffers on the graphics pipeline to prepare them for drawing. 
m_Model->Render(m_Direct3D->GetDeviceContext()); 

// Render the model using the light shader. 
result = m_LightShader->Render(m_Direct3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix, viewMatrix, projectionMatrix, 
        m_Model->GetTexture(), m_Light->GetDirection(), m_Light->GetDiffuseColor()); 


// Reset the world matrix. 
m_Direct3D->GetWorldMatrix(worldMatrix); 

我发现它是是给我的问题转的cubeMOVE一部分,但我不知道为什么。

这正常旋转立方体:

D3DXMatrixTranspose(&worldMatrix, &cubeROT); 

这意味着正确的立方体:

D3DXMatrixTranslation(&worldMatrix, 10.0f, 2.0f, 1.0f); 

但这创建变形网格:

D3DXMatrixTranspose(&worldMatrix, &cubeMOVE); 

我是很新的DirectX所以任何帮助将非常感激。

回答

0

我不认为transpose做你认为它的作用。要组合变换矩阵,只需将它们相乘 - 无需转置。我想这应该是简单的:

​​

编辑

原因“转”似乎涉及的旋转而不是翻译工作,是转翻转矩阵的非对角部分。但是对于axis-rotation matrix,这会使矩阵几乎不变。 (它确实会改变几个符号,但这只会影响旋转的方向。)对于平移矩阵,应用一个转置会使它完全变形 - 因此您会看到结果。

+1

完全正确。我使用的是D3DXMatrixTranspose而不是D3DXMatrixMultiply,谢谢! –