繁体   English   中英

XNA 3D相机滚动

[英]XNA 3D Camera rolling

我正在使用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);
        }

我尝试将相机类中的Up矢量强制设置为Vector(0, 0, 1)Vector(0, 1, 0) 将Z设置为1有所帮助,但仍然可以滚动。

如果您无意在相机中进行滚动,则最好像下面这样修改海底代码:

public Matrix ViewMatrix
{
    get
    {
        return Matrix.CreateLookAt(Position, Forward+Position, Vector3.Up);//changed the 3rd param from Up toVector3.Up
    }
}

这将阻止您遇到任意滚动。 但是也会也妨碍您实施滚动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM