Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 面向方向向量的旋转矩阵_C#_Matrix_Xna - Fatal编程技术网

C# 面向方向向量的旋转矩阵

C# 面向方向向量的旋转矩阵,c#,matrix,xna,C#,Matrix,Xna,我有一个字符的位置,例如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 我不太了解图形以及这些数据如何与角色的朝向相关。我想找到一个向量,这样我就可以用这个向量来瞄准角色所面对的方向。我该怎么做?角色面对的方向是旋转矩阵的第三行。这就是: Vector3 facingDirection = new

我有一个字符的位置,例如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

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

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

Vector3 facingDirection = new Vector3(0.99f, 0f, 0.14f);//(m31,m32,m33)
此向量似乎已规范化,但如果未规范化,则应执行以下操作:

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

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

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

Vector3 facingDirection = new Vector3(0.99f, 0f, 0.14f);//(m31,m32,m33)
此向量似乎已规范化,但如果未规范化,则应执行以下操作:

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

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

我终于能够解析它了。实际上这是非常简单的向量数学。旋转矩阵已经给了我上面Steve建议的方向向量,但我必须沿着这条线发射到某个特定点,以使我的动画工作…所以我实际上需要沿着方向向量表示的线的一个点。所以,我只是计算了一个点,沿着方向向量,距离角色的当前位置大约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);

我终于能够解决它了。实际上这是非常简单的向量数学。旋转矩阵已经给了我上面Steve建议的方向向量,但我必须沿着这条线发射到某个特定点,以使我的动画工作…所以我实际上需要沿着方向向量表示的线的一个点。所以,我只是计算了一个点,沿着方向向量,距离角色的当前位置大约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);

这些矩阵是从哪里来的?是关于,还是一般的?因为至少XNA提供了一个简单的属性来获取朝向。我使用的是XNA。矩阵值和位置来自游戏记忆。位置准确且经过测试。虽然我不确定矩阵值……我用上面的9个值构造了一个矩阵,然后用matrix.forward方法得到一个向量。但是它没有给我正确的面对方向,因为如果我朝这个方向拍摄东西(发射动画),那就不是角色面对的方向。注意。如果使用的是Unity3D,则使用“LookAt”命令。一个游戏引擎的全部,全部,重点是你从来没有使用过矩阵。你从哪里得到这些矩阵?这是关于,还是一般的?因为至少XNA提供了一个简单的属性来获取朝向。我使用的是XNA。矩阵值和位置来自游戏记忆。位置准确且经过测试。虽然我不确定矩阵值……我用上面的9个值构造了一个矩阵,然后用matrix.forward方法得到一个向量。但是它没有给我正确的面对方向,因为如果我朝这个方向拍摄东西(发射动画),那就不是角色面对的方向。注意。如果使用的是Unity3D,则使用“LookAt”命令。游戏引擎的全部,全部,重点是你永远不会使用矩阵。嗨,史蒂夫,我已经按照你的建议做了,但问题是我想从角色的位置朝这个方向开火。假设我有一个命令fire x=1,y=2,z=3在角色当前位置的位置(1,2,3)处开火。现在,如果我在这个命令中使用方向向量的x,y,z,它会从角色的当前位置平行于面对方向发射吗?或者我需要做额外的计算吗?嗨,史蒂夫,我已经按照你的建议做了,但问题是我想从角色的位置朝这个方向开火。假设我有一个命令fire x=1,y=2,z=3在角色当前位置的位置(1,2,3)处开火。现在,如果我在这个命令中使用方向向量的x,y,z,它会从角色的当前位置平行于面对方向发射吗?或者我需要做额外的计算吗?