【问题标题】:Cannot both rotate and translate my scene - direct3d不能同时旋​​转和平移我的场景 - direct3d
【发布时间】:2013-12-05 09:02:04
【问题描述】:

我在屏幕上绘制了一个立方体,我想旋转和平移场景:

// 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++ 项目。
  • 我已经传入了更多变量,感谢智能感知,发现有一个矩阵转换函数
  • 我将我的定位添加到此矩阵中,并将旋转连接到一些自定义变量
  • 立方体会移动(平移),但我想我需要以某种方式保存这个移动,然后进行旋转。

我可以添加什么来帮助解决问题吗?

【问题讨论】:

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


    【解决方案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) );
    

    【讨论】:

    • 对此我非常感激。非常感谢。它运行良好。谢谢你,谢谢你,谢谢你。 P.S(你的头像是史诗)
    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    相关资源
    最近更新 更多