Java 使用LWJGL创建相机并需要停止旋转

Java 使用LWJGL创建相机并需要停止旋转,java,opengl,camera,Java,Opengl,Camera,我正在创建一个游戏,我希望给出尽可能少的代码,即使只是准备阶段 基本上,我已经创建了一个摄像头,并且它能够按照用户的意愿左右移动(当鼠标到达窗口边缘时,我会重置鼠标的x位置),但是我希望玩家只能沿着球场上下移动90度(x旋转) 以下是MouseControl.java文件中的一段代码,我认为它应该是其中的一部分: public static void mouseMove(Camera cam, int x, int y) { int originX = Display.getWidth(

我正在创建一个游戏,我希望给出尽可能少的代码,即使只是准备阶段

基本上,我已经创建了一个摄像头,并且它能够按照用户的意愿左右移动(当鼠标到达窗口边缘时,我会重置鼠标的x位置),但是我希望玩家只能沿着球场上下移动90度(x旋转)

以下是MouseControl.java文件中的一段代码,我认为它应该是其中的一部分:

public static void mouseMove(Camera cam, int x, int y)
{
    int originX = Display.getWidth() / 2;
    int originY = Display.getHeight() / 2;
    int curY = Mouse.getY();
    int curX = Mouse.getX();

    boolean canMoveDown = true;
    boolean canMoveUp = true;

    if (isMouseRight() || isMouseLeft())
    {
        Mouse.setCursorPosition(originX, curY);
        x = originX;
    }

    if (isMouseTop() || isMouseBottom())
    {
        Mouse.setCursorPosition(curX, originY);
        y = originY;
    }

    if (!isMouseStill(x, y))
    {
        // Mouse is to the left of the old position
        if (Mouse.getX() < x)
        {
            if (Mouse.getX() < (x - ((1 / 10) * Display.getWidth())))
            {
                cam.rotateY(-0.35f);
            }
            if (Mouse.getX() < (x - ((2 / 10) * Display.getWidth())))
            {
                cam.rotateY(-0.40f);
            }
            if (Mouse.getX() < (x - ((3 / 10) * Display.getWidth())))
            {
                cam.rotateY(-0.45f);
            }
            if (Mouse.getX() < (x - ((4 / 10) * Display.getWidth())))
            {
                cam.rotateY(-0.50f);
            }
            if (Mouse.getX() < (x - ((5 / 10) * Display.getWidth())))
            {
                cam.rotateY(-0.55f);
            }
        }

        // Mouse is to the right of the old position
        if (Mouse.getX() > x)
        {
            if (Mouse.getX() > (x + ((1 / 10) * Display.getWidth())))
            {
                cam.rotateY(0.35f);
            }
            if (Mouse.getX() > (x + ((2 / 10) * Display.getWidth())))
            {
                cam.rotateY(0.40f);
            }
            if (Mouse.getX() > (x + ((3 / 10) * Display.getWidth())))
            {
                cam.rotateY(0.45f);
            }
            if (Mouse.getX() > (x + ((4 / 10) * Display.getWidth())))
            {
                cam.rotateY(0.50f);
            }
            if (Mouse.getX() > (x + ((5 / 10) * Display.getWidth())))
            {
                cam.rotateY(0.55f);
            }
        }

        // Player pitch (X axis rotation) is between 90 and -90
        // If the player can move up and down (head angle)
        if (canMoveDown && canMoveUp)
        {
            if (y == 90)
            {
                canMoveUp = false;
            }
            else if (y == -90)
            {
                canMoveDown = false;
            }
            else
            {
                // Mouse is above the old position
                if (Mouse.getY() > y)
                {
                    if (Mouse.getY() > (y + ((1 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, -0.35f);
                    }
                    if (Mouse.getY() > (y + ((2 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, -0.40f);
                    }
                    if (Mouse.getY() > (y + ((3 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, -0.45f);
                    }
                    if (Mouse.getY() > (y + ((4 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, -0.50f);
                    }
                    if (Mouse.getY() > (y + ((5 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, -0.55f);
                    }
                }

                // Mouse is below the old position
                if (Mouse.getY() < y)
                {
                    if (Mouse.getY() < (y - ((1 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, 0.35f);
                    }
                    if (Mouse.getY() < (y - ((2 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, 0.40f);
                    }
                    if (Mouse.getY() < (y - ((3 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, 0.45f);
                    }
                    if (Mouse.getY() < (y - ((4 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, 0.50f);
                    }
                    if (Mouse.getY() < (y - ((5 / 10) * Display.getHeight())))
                    {
                        cam.rotateX(0, 0.55f);
                    }
                }
            }
        }
        else if (canMoveDown == true && canMoveUp == false)
        {
            // Mouse is below the old position
            if (Mouse.getY() < y)
            {
                if (Mouse.getY() < (y - ((1 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, 0.35f);
                    canMoveUp = true;
                }
                if (Mouse.getY() < (y - ((2 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, 0.40f);
                    canMoveUp = true;
                }
                if (Mouse.getY() < (y - ((3 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, 0.45f);
                    canMoveUp = true;
                }
                if (Mouse.getY() < (y - ((4 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, 0.50f);
                    canMoveUp = true;
                }
                if (Mouse.getY() < (y - ((5 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, 0.55f);
                    canMoveUp = true;
                }
            }
        }
        else if (canMoveUp == true && canMoveDown == false)
        {
            // Mouse is above the old position
            if (Mouse.getY() > y)
            {
                if (Mouse.getY() > (y + ((1 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, -0.35f);
                    canMoveDown = true;
                }
                if (Mouse.getY() > (y + ((2 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, -0.40f);
                    canMoveDown = true;
                }
                if (Mouse.getY() > (y + ((3 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, -0.45f);
                    canMoveDown = true;
                }
                if (Mouse.getY() > (y + ((4 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, -0.50f);
                    canMoveDown = true;
                }
                if (Mouse.getY() > (y + ((5 / 10) * Display.getHeight())))
                {
                    cam.rotateX(0, -0.55f);
                    canMoveDown = true;
                }
            }
        }
    }
}
public static void mouseMove(摄像头,int x,int y)
{
int originX=Display.getWidth()/2;
int originY=Display.getHeight()/2;
int curY=Mouse.getY();
int curX=Mouse.getX();
布尔值canMoveDown=true;
布尔值canMoveUp=true;
如果(isMouseRight()| | isMouseLeft())
{
小鼠坐骨位置(原始,curY);
x=原始值;
}
如果(isMouseTop()| | IsMouseBooth())
{
鼠标。设置光标位置(curX,originY);
y=原始;
}
如果(!isMouseStill(x,y))
{
//鼠标位于旧位置的左侧
if(Mouse.getX()x)
{
if(Mouse.getX()>(x+((1/10)*Display.getWidth()))
{
旋转凸轮(0.35f);
}
if(Mouse.getX()>(x+((2/10)*Display.getWidth()))
{
旋转凸轮(0.40f);
}
if(Mouse.getX()>(x+((3/10)*Display.getWidth()))
{
旋转凸轮(0.45f);
}
if(Mouse.getX()>(x+((4/10)*Display.getWidth()))
{
旋转凸轮(0.50f);
}
if(Mouse.getX()>(x+((5/10)*Display.getWidth()))
{
旋转凸轮(0.55f);
}
}
//球员俯仰(X轴旋转)介于90和-90之间
//如果玩家可以上下移动(头部角度)
如果(canMoveDown&&canMoveUp)
{
如果(y==90)
{
canMoveUp=false;
}
否则如果(y==-90)
{
canMoveDown=false;
}
其他的
{
//鼠标位于旧位置上方
if(Mouse.getY()>y)
{
if(Mouse.getY()>(y+((1/10)*Display.getHeight()))
{
旋转凸轮(0,-0.35f);
}
if(Mouse.getY()>(y+((2/10)*Display.getHeight()))
{
旋转凸轮(0,-0.40f);
}
if(Mouse.getY()>(y+((3/10)*Display.getHeight()))
{
旋转凸轮(0,-0.45f);
}
if(Mouse.getY()>(y+((4/10)*Display.getHeight()))
{
旋转凸轮(0,-0.50f);
}
if(Mouse.getY()>(y+((5/10)*Display.getHeight()))
{
旋转凸轮(0,-0.55f);
}
}
//鼠标位于旧位置下方
if(Mouse.getY()package com.RedJax.Game;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;

import org.lwjgl.input.Mouse;


public class Camera 
{
    // Position Variables
    private float x;
    private float y;
    private float z;

    // Rotation Variables
    private float pitch;//Rotation X
    private float yaw;//Rotation Y
    private float roll;//Rotation Z

    // Vision Variables
    private float fov;//Field of View
    private float aspect;//Aspect Ratio
    private float near;//Near Clip
    private float far;//Render Distance

    public Camera(float fieldOfView, float aspectRatio, float nearClip, float renderDist)
    {
        x = 0;
        y = 0;
        z = 0;

        pitch = 0;
        yaw = 0;
        roll = 0;

        fov = fieldOfView;
        aspect = aspectRatio;
        near = nearClip;
        far = renderDist;

        initProjection();
    }

    public void useView()
    {
        glRotatef(pitch, 1, 0, 0);
        glRotatef(yaw, 0, 1, 0);
        glRotatef(roll, 0, 0, 1);
        glTranslatef(x, y, z);
    }

    private void initProjection()
    {
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(fov, aspect, near, far);
        glMatrixMode(GL_MODELVIEW);

        glEnable(GL_DEPTH_TEST);
        glEnable(GL_TEXTURE_2D);
    }

    public float getX()
    {
        return x;
    }
    public float getY()
    {
        return y;
    }
    public float getZ()
    {
        return z;
    }
    public float getPitch()
    {
        return pitch;
    }
    public float getYaw()
    {
        return yaw;
    }
    public float getRoll()
    {
        return roll;
    }
    public void setX(float x)
    {
        this.x = x;
    }
    public void setY(float y)
    {
        this.y = y;
    }
    public void setZ(float z)
    {
        this.z = z;
    }
    public void setPitch(float x)
    {
        this.pitch = x;
    }
    public void setYaw(float y)
    {
        this.yaw = y;
    }
    public void setRoll(float z)
    {
        this.roll = z;
    }

    public void move(Direction dir, float amount)
    {
        int intDir = dir.getDirection();

        if (intDir != 0)
        {
            z += amount * Math.sin(Math.toRadians(yaw + 90 * intDir));
            x += amount * Math.cos(Math.toRadians(yaw + 90 * intDir));
        }
        else
        {
            z += Direction.getLeftRight(amount, dir) * Math.sin(Math.toRadians(yaw + 90 * intDir));
            x += Direction.getLeftRight(amount, dir) * Math.cos(Math.toRadians(yaw + 90 * intDir));
        }
    }

    public void vert(float amount)
    {
        y += amount; 
    }

    public void rotateY(float amount)
    {
        yaw += amount;

        if (yaw == 360)
        {
            yaw = 0;
        }

        if (yaw == -360)
        {
            yaw = 0;
        }
    }

    public void rotateX(float dir, float amount)
    {
        if ((pitch >= -90) && (pitch <= 90))
        {
            pitch += amount;
        }
        else
        {
            //System.out.println(Mouse.getY());
        }
    }
}