旋转矩阵到面向方向向量
本文关键字:方向向量 旋转 | 更新日期: 2023-09-27 17:49:22
我有一个字符的位置为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矩阵,那么您只需使用矩阵结构的Matrix.Forward
属性就可以得到相同的结果。
我终于能够解决它了。实际上这是很简单的向量数学。旋转矩阵已经为我提供了方向矢量,但我必须沿着这条线发射到某个特定的点才能使我的动画工作……所以我需要在直线上找一个点用方向向量表示。所以,我只是沿着方向矢量计算了一个距离角色当前位置约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);