【问题标题】:rotation matrix to facing direction vector旋转矩阵到面向方向向量
【发布时间】:2016-06-25 03:41:17
【问题描述】:

我有一个字符的位置,例如 xyz 坐标 x= 102, y= 0.75, z= -105.7。我将字符的旋转矩阵设为

M11 = -0.14
M12 = 0
M13 = -0.99
M21 = 0
M22 = 1
M23 = 0
M31 = 0.99
M32 =0
M33 = 0.14

我不太了解图形以及这些数据如何与角色的朝向相关联。我想找到一个向量,以便我可以使用该向量来瞄准角色所面对的方向。我该怎么做?

【问题讨论】:

  • 你从哪里得到这些矩阵?
  • 这是关于unity3dxna 还是一般math?因为至少 XNA 提供了一个简单的属性来获取朝向。
  • 我正在使用 xna。矩阵值和位置来自游戏的记忆。位置准确且经过测试。虽然不确定矩阵值...我使用上面的 9 个值构造一个矩阵,然后从 matrix.forward 方法获取一个向量。但它不能正确地给我正面的方向,因为如果我朝这个方向射击(触发动画),它不是角色面对的方向。
  • 注意。 如果您使用 Unity3D,则使用“LookAt”命令。游戏引擎的全部意义在于您永远不会使用矩阵。

标签: c# matrix xna


【解决方案1】:

你的角色面对的方向是旋转矩阵的第三行。那就是:

Vector3 facingDirection = new Vector3(0.99f, 0f, 0.14f);//(m31,m32,m33)

这个向量似乎是标准化的,但如果不是,你会这样做:

Vector3 facingDirection = Vector3.Normalize(new Vector3(0.99f, 0f, 0.14f));

如果矩阵是 XNA 矩阵,那么您只需使用矩阵结构的Matrix.Forward 属性并获得相同的结果。

【讨论】:

  • 嗨史蒂夫,我已经按照你的建议做,但问题是我想从角色的位置朝这个方向开火。假设我有一个命令 fire x=1, y=2, z=3 从角色的当前位置向位置 (1,2,3) 开火。现在,如果我为此命令使用方向向量的 x,y,z,它会从角色当前位置平行于面向方向发射吗?还是我需要做任何额外的计算?
【解决方案2】:

我终于能够解决它。实际上它是非常简单的向量数学。正如史蒂夫上面建议的那样,旋转矩阵已经给了我方向向量,但我必须沿着那条线发射到某个特定点才能使我的动画工作......所以我实际上需要沿着由方向向量表示的线的一个点。所以,我只是沿着方向向量计算了一个距离角色当前位置大约 1000 单位的点,然后朝这条线开火,它奏效了!

 Vector3 facingDirection = new Vector3(RotMatrix[2, 0], RotMatrix[2, 1], RotMatrix[2, 2]); // direction vector
                    Vector3 currentPos = new Vector3(character.PosX, character.PosY, character.PosZ); // I also have position of the character
// Now calculate a point 10000 units away along the vector line 
                    var px = currentPos.X + facingDirection.X * 10000;
                    var py = currentPos.Y + facingDirection.Y * 10000;
                    var pz = currentPos.Z + facingDirection.Z * 10000;
                    return new Vector3(px, py, pz);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多