C# 确定Matrix.CreateLookAt中的上方向向量和变换向量

C# 确定Matrix.CreateLookAt中的上方向向量和变换向量,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我有 不知何故,我总是达到某个阈值,这样屏幕就会滚动而不是旋转 例如,我给-180°到+180°作为偏航。这导致一个转弯,但不是在一条直线上。正如我所说,它移动,然后屏幕滚动,它再次移动 如何确定?1到?6ef.View=Matrix.CreateLookAt(PlayerPosition,PlayerPosition+JetzMatrix.Forward,Vector3.Up) Vector3.Up将阻止相机滚动。根据你的问题,很难准确地理解你到底想要得到什么。如果这不能解决您的问题或产生其他

我有

不知何故,我总是达到某个阈值,这样屏幕就会滚动而不是旋转

例如,我给-180°到+180°作为偏航。这导致一个转弯,但不是在一条直线上。正如我所说,它移动,然后屏幕滚动,它再次移动


如何确定?1到?6

ef.View=Matrix.CreateLookAt(PlayerPosition,PlayerPosition+JetzMatrix.Forward,Vector3.Up)


Vector3.Up
将阻止相机滚动。根据你的问题,很难准确地理解你到底想要得到什么。如果这不能解决您的问题或产生其他一些不需要的运动,请更详细地描述您所需的功能。

“很难理解”不,很容易理解,前提是您曾经为?1到?6输入任意值并旋转相机。最后,你只是想让相机的方向和jetzMatrix一样,它没有滚动?如果是这样,那么你的问题可能是:“为什么我的相机基于JetzMatrix,它没有任何滚动,我的相机有滚动?”?答案将是放入CreateLookAt()的第三个参数。它应该是向量3.Up,而不是你想通过变换4,5,6得到的任何东西。那么你的相机就不会像打哈欠一样滚动了。但是,如果您不想让相机的方向与JetzMatrix相同,请澄清您的问题。
Vector3 PlayerPosition = new Vector3(0,0,0);
Matrix JetztMatrix = Matrix.CreateRotationX(pitch) * Matrix.CreateRotationY(yaw);
ef.View = Matrix.CreateLookAt(PlayerPosition, Vector3.Transform(new Vector3(?1,?2,?3), JetztMatrix) + PlayerPosition, new Vector3(?4,?5,?6));