【问题标题】:Rotating and translating camera in 3D space在 3D 空间中旋转和平移相机
【发布时间】:2011-06-05 09:13:08
【问题描述】:

我在 3D 空间中平移和旋转相机时遇到了一点问题。在 Direct3D9 中,相机被定义为位置、观察和上轴(作为 3d 向量)。所以我存储了相机的旋转和位置,并且在为新帧定义相机时,我通过旋转旋转了观察矢量和上轴并设置了位置。平移相机时,我进行平移,通过旋转将其旋转,然后平移相机的位置和观察向量。但是一段时间后,观察向量和新平移不对齐 - 也就是说,当平移向量是定义向前的原始观察向量的直线倍数时,相机不再向前移动。我不明白为什么会发生这种情况 - 有什么建议吗?

【问题讨论】:

    标签: 3d c++11


    【解决方案1】:

    您可以体验Gimbal Lock 吗?我以前也遇到过这种情况,所以我转储了向量并移至Quaternions

    【讨论】:

    • 我不这么认为。创建视图矩阵的 D3DX 函数只需要 D3DXVECTOR3s。我不能使用四元数。
    • @DeadMG,您可以将 D3DXVECTOR3 乘以 D3DXQUATERNION,如果这问题的话。听起来肯定很相似。
    • @Moo-Juice:那为什么 LookAt 向量没有和平移向量一样的万向节锁呢?我也没有找到任何函数将 D3DXVECTOR3 乘以 D3DXQUATERNION- 并且也检查了运算符重载。
    • 我通过每次计算一个新的 LookAt 向量来解决这个问题,而不是缓存它并尝试用正确的翻译更新它。这绝对解决了手头的问题。
    • @DeadMG,很高兴解决了它。该函数实际上不在 DirectX SDK (AFAIK) 中。如果您想要它以供将来参考,我可以编辑我的答案以显示它?
    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多