c++ - 不能同时旋​​转和平移我的场景 - direct3d

标签 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,发现有一个 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/

相关文章:

c++ - 关闭 session 后 Tensorflow C++ 不释放 GPU 资源

c# - Windows Phone 8 中的 HttpUtility.ParseQueryString 和 NameValueCollection

directx - D3D9 应用程序无法使用/英特尔高清显卡

c++ - 函数声明末尾的 "const"是什么意思?

c++ - 当在创建子项后设置父项时,子项对事件是透明的

c++ - 尝试将文本文件加载到链表时出现多个转换错误

c# - 使用来自另一个合并词典的合并词典中定义的样式

c# - 启动 Storyboard时未设置目标错误

cuda - Tesla k20m 与 Direct3D 11 的互操作性

c++ - 从 D3DX 转换过来,找不到 D3DCompile