C# 将模型设置为与摄影机位置XNA完全相同的方向和位置

C# 将模型设置为与摄影机位置XNA完全相同的方向和位置,c#,matrix,xna,camera,C#,Matrix,Xna,Camera,我想做一个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

我想做一个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;

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

你能解释一下你做了什么吗?为什么要添加到枪上。平移不应该是乘法吗?第1行为枪创建了一个世界矩阵,精确位置和旋转方向与相机相同。第2行的位置与已经在枪中的cameraPos相同。根据第1行的平移,将其向前移动到相机和枪指向15个单位的方向。向前移动不会被添加到当前相机位置。Gun.Translation=。。。与:Gun=Matrix.Identity*Matrix.CreateTranslation?有点对于平移部分,这是可以的,但是包含平移信息和旋转方向信息。通过从“标识”开始,您可以将旋转部分归零,并为自己做更多的工作,将其取回。当您反转视图并将其称为Gun时,Gun现在将保持摄影机在世界空间中的平移和旋转。从摄像机的世界空间位置的平移中,你可以沿着摄像机指向的方向移动15个单位,像这样:Matrix.InvertView.Forward,或者干脆说-Gun.Forward,这有帮助吗?有时很难传达概念,除非两个人都将概念形象化。如果你想通过聊天来澄清任何困惑,我很乐意这样做。我确实认为,大多数混淆是由于关键3d概念(如向量和矩阵)的不完整可视化造成的。
Gun = Matrix.Invert(view);
Gun.Translation += (Gun.Forward * 15); // + (Gun.Down * 4) + (gun.Right * 2);