XNA 3D相机滚动
本文关键字:滚动 相机 3D XNA | 更新日期: 2023-09-27 18:00:05
我正在使用Seabase Alpha的XNA相机类,它工作得很好,我根本不需要修改它。但是,如果我同时水平偏离和偏航,它会改变我的滚转,我不知道如何"锁定"它,使它永远不会滚转。(类似于第一人称射击,它只能扫射、推进和调整俯仰和偏航。)
我调用该类的代码如下:
if (gamepadState.ThumbSticks.Right.X != 0)
{
// Look Around
camera.Yaw(-gamepadState.ThumbSticks.Right.X);
}
if (gamepadState.ThumbSticks.Right.Y != 0)
{
// Look Around
camera.Pitch(-gamepadState.ThumbSticks.Right.Y);
}
if (gamepadState.ThumbSticks.Left.X != 0)
{
// Move Around
camera.StrafeHorz(-gamepadState.ThumbSticks.Left.X);
}
if (gamepadState.ThumbSticks.Left.Y != 0)
{
// Move Around
camera.Thrust(gamepadState.ThumbSticks.Left.Y);
}
if (gamepadState.Buttons.LeftShoulder == ButtonState.Pressed)
{
camera.StrafeVert(0.2f);
}
if (gamepadState.Buttons.RightShoulder == ButtonState.Pressed)
{
camera.StrafeVert(-0.2f);
}
我已经尝试将相机类中的上方向向量强制为Vector(0, 0, 1)
和Vector(0, 1, 0)
。将Z设置为1有点帮助,但它仍然可以滚动。
如果您不打算在相机中实现滚转,最好修改seabase代码,如下所示:
public Matrix ViewMatrix
{
get
{
return Matrix.CreateLookAt(Position, Forward+Position, Vector3.Up);//changed the 3rd param from Up toVector3.Up
}
}
这将抑制您正在经历的任意滚动。但也会阻止你实施roll。