我在屏幕上画了一个立方体,我想旋转和平移场景:
// 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,发现有一个 matrixtransaltion 函数
- 我将我的定位添加到这个矩阵中,并将旋转也连接到一些自定义变量
- 立方体将移动(平移),但我猜我需要以某种方式保存此移动,然后进行旋转。
我可以添加什么来帮助解决问题?
最佳答案
您每次都在覆盖 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) );
关于c++ - 不能同时旋转和平移我的场景 - direct3d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111709/