2017-10-06 5 views
0

私はLWJGLで3Dゲームに取り組んでいます。マウスサポート付きのファーストパーソンスタイルのカメラを追加したいと思います。私は現在1つ持っているが、それは滑らかではなく、全くうまくいっていない。私は本当にウインドウにも焦点を当てたいので、マウスは関与していて、ウインドウ上にホバリングしません。これをどのように実装できますか?ヨーとピッチを計算するときには、整数の除算を行っているLWJGL(マウスサポート)用のファーストパーソンスタイルカメラ

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(); 

を今すぐ結果がはるかに正確になります。

私はあなたのピッチとヨーを計算するために、このコードを使用するreccomendが:

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)を呼び出します。