2017-10-06 7 views
0

저는 LWJGL에서 3D 게임을하고 있는데 마우스 지원 기능이있는 1 인칭 스타일의 카메라를 추가하고 싶습니다. 나는 현재 하나 있지만, 그것은 부드럽고 전혀 전혀 작동하지 않습니다. 나는 창을 집중시키는 것을 정말로 원한다. 그래서 마우스는 약혼하고 창문 위로 움직이지 않는다. 어떻게 구현할 수 있습니까? 요와 피치를 계산할 때 당신은 정수 나눗셈을하고LWJGL (마우스 지원)을위한 1 인칭 스타일 카메라

public class Camera { 

private Vector3f position = new Vector3f(0,5,0); 
private float pitch = 10; 
private float yaw; 
private float roll; 

private float speed = 0.2f; 

public Camera() { 

} 

public void move() { 

    yaw = - (Display.getWidth() - Mouse.getX()/4); 
    pitch = (Display.getHeight()/1000) - Mouse.getY(); 

    if (pitch >= 90) { 
     pitch = 90; 
    } 
    else if (pitch <= -90) { 
     pitch = -90; 
    } 

    if (Keyboard.isKeyDown(Keyboard.KEY_W)) { 

     position.z += -(float)Math.cos(Math.toRadians(yaw)) * speed; 
     position.x += (float)Math.sin(Math.toRadians(yaw)) * speed; 

    } 
    else if (Keyboard.isKeyDown(Keyboard.KEY_S)) { 

     position.z -= -(float)Math.cos(Math.toRadians(yaw)) * speed; 
     position.x -= (float)Math.sin(Math.toRadians(yaw)) * speed; 

    } 

    if (Keyboard.isKeyDown(Keyboard.KEY_D)) { 

     position.z += (float)Math.sin(Math.toRadians(yaw)) * speed; 
     position.x += (float)Math.cos(Math.toRadians(yaw)) * speed; 

    } 
    else if (Keyboard.isKeyDown(Keyboard.KEY_A)) { 

     position.z -= (float)Math.sin(Math.toRadians(yaw)) * speed; 
     position.x -= (float)Math.cos(Math.toRadians(yaw)) * speed; 

    } 

    if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { 

     position.y -= speed; 

    } 

    if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) { 

     position.y += speed; 

    } 

    if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) { 
     System.exit(0); 
    } 

} 

public Vector3f getPosition() { 
    return position; 
} 

public float getPitch() { 
    return pitch; 
} 

public float getYaw() { 
    return yaw; 
} 

public float getRoll() { 
    return roll; 
} 

} 

답변

0

결과는 정수되기 때문에,이 나쁜 :

여기에 내 현재 카메라의 구현입니다.

yaw = - (Display.getWidth() - Mouse.getX()/4f); 
pitch = (Display.getHeight()/1000f) - Mouse.getY(); 

이제 결과가 훨씬 더 정확합니다이를 변경하려면 당신은 단지 하나 개의 값이 같은 float를해야한다. 나는 당신의 피치와 요 계산이 코드를 사용하도록 권하고 있지만

은 :

float rotationSpeed = 1.0; //You probably need to change this factor 
yaw -= Mouse.getDX()/rotationSpeed; 
pitch += Mouse.getDY()/rotationSpeed; 

getDX/Y()을 마지막으로 getDX/Y 이후 X/Y 축 이동을 반환()가 호출되었다.

창에 집중하려면 Mouse.setGrabbed (true)를 호출하면됩니다.