不能同时旋​​转和翻译我的场景 - direct3d

时间:2013-11-21 03:10:46

标签: c++ windows-phone-8 direct3d c++-cx

我在屏幕上绘制了一个立方体,我想要旋转并翻译场景:

// Translation
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose( XMMatrixTranslation( placement->GetPosX(), placement->GetPosY(), placement->GetPosZ() ) ) );

// Rotation
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationX( placement->GetRotX() ) ) );
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY( placement->GetRotY() ) ) );
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationZ( placement->GetRotZ() ) ) );

问题是,只有翻译工作......在进行轮换之前,我是否必须以某种方式设置某些内容。

  • 我在Visual Studio 2012 Windows Phone中使用了默认的Windows 8 Phone Direct3D C ++项目。
  • 我已经传递了一些变量,并且由于intellisense,发现有一个矩阵转换函数
  • 我将我的定位添加到此矩阵中,并且还将旋转连接到一些自定义变量
  • 立方体会移动(翻译),但我猜我需要以某种方式保存这个动作然后进行旋转。

我可以添加任何内容来帮助解决问题吗?

1 个答案:

答案 0 :(得分:1)

您每次都会覆盖m_constantBufferData.model的内容。您需要在四个矩阵上调用XMMatrixMultiply以将转换组合成单个矩阵,然后存储最终结果。例如:

// Rotation
XMMATRIX m = XMMatrixRotationX( placement->GetRotX() );
m = XMMatrixMultiply(m, XMMatrixRotationY( placement->GetRotY() );
m = XMMatrixMultiply(m, XMMatrixRotationZ( placement->GetRotZ() );

// Translation
m = XMMatrixMultiply(m, XMMatrixTranslation( placement->GetPosX(), placement->GetPosY(), placement->GetPosZ() ) );

XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(m) );