【问题标题】:Set model to be directed and positioned exactly like the camera position XNA将模型设置为与相机位置 XNA 完全相同的方向和定位
【发布时间】:2012-12-31 17:32:08
【问题描述】:

我想做一个fps游戏。例如,我需要武器模型距离相机 15 个Z 单位,并且指向与相机指向的方向相同的方向。我几乎什么都试过了,但我没能做到。 我尝试将相同的旋转矩阵与相机和模型矩阵相乘,并且还尝试了这个:

Matrix view = Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 200), Vector3.Up);
Gun = Matrix.CreateWorld(gunPos, Vector3.Forward, Vector3.Up);'
gunPos = cameraPos + view.Forward * 15;

我怎样才能使它正常工作?

【问题讨论】:

    标签: c# matrix xna camera


    【解决方案1】:
    Gun = Matrix.Invert(view);
    Gun.Translation += (Gun.Forward * 15); // + (Gun.Down * 4) + (gun.Right * 2);
    

    【讨论】:

    • 你能解释一下你做了什么吗?为什么要加到Gun.Translation 不应该是乘法?
    • 第 1 行为枪创建了一个世界矩阵,该矩阵与相机的位置和旋转完全相同。第 2 行采用该位置(与 cameraPos 相同,由于第 1 行,它已经在 Gun.Translation 中)并将其向前移动(沿相机(和枪)指向的方向)15 个单位。该向前移动被添加(而不是相乘)到当前相机位置。
    • Gun.Translation=... 等同于:Gun = Matrix.Identity * Matrix.CreateTranslation(...) ?
    • 有点...对于翻译部分来说没问题,但Gun包含翻译信息和旋转(方向)信息。从Identity 开始,您将旋转部分“归零”,并为自己做更多的工作来恢复它。当您反转 View 并将其命名为 Gun 时,Gun 现在会保存相机的平移和相机在世界空间中的旋转。从该平移(相机的世界空间位置)开始,您沿着相机指向的方向移动 15 个单位,如下所示:Matrix.Invert(View).Forward - 或者简单地说 - Gun.Forward
    • 这有帮助吗?有时很难传达概念,除非两个人都以相似的方式可视化概念。如果您想打开聊天以消除任何困惑,我很乐意这样做。我确实认为大多数混淆是由于对关键 3d 概念(如向量和矩阵)的不完整可视化造成的。
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多