2016-04-02 24 views
1

我正在为使用LWJGL和OpenGL 3.2的OpenGL编写Java游戏引擎。 无论何时移动鼠标以旋转相机,它都会增加滚动以及俯仰和偏航。第一人称相机卷

相机代码

public Matrix4f getViewMatrix() { 
    getParent().getTransform().getWorldRot().mul(rotation, (Quaternion) null).toRotationMatrix(viewMatrix); 
    viewMatrix.mul(Matrix4f.setTranslation(getParent().getTransform().getWorldPos(), null)); 
    return viewMatrix; 
} 


public boolean mouseMoved(MouseEvent event) { 
    Quaternion.mul(rotation, new Quaternion((float) Math.toRadians(event.x/1f), rotation.getUp(null)), rotation); 
    Quaternion.mul(rotation, new Quaternion((float) Math.toRadians(event.y/1f), rotation.getRight(null)), rotation); 
    return true; 
} 

四元数代码

public Vector4f getRight(Vector4f dest) { 
    if (dest == null) 
     dest = new Vector4f(); 

    dest.x = 1.0f - 2.0f * (y * y + z * z); 
    dest.y = 2.0f * (x * y - w * z); 
    dest.z = 2.0f * (x * z + w * y); 

    return dest; 
} 

public Vector4f getUp(Vector4f dest) { 
    if (dest == null) 
     dest = new Vector4f(); 

    dest.x = 2.0f * (x * y + w * z); 
    dest.y = 1.0f - 2.0f * (x * x + z * z); 
    dest.z = 2.0f * (y * z - w * x); 

    return dest; 
} 

public Vector4f getForward(Vector4f dest) { 
    if (dest == null) 
     dest = new Vector4f(); 

    dest.x = 2.0f * (x * z - w * y); 
    dest.y = 2.0f * (y * z + w * x); 
    dest.z = 1.0f - 2.0f * (x * x + y * y); 

    return dest; 
} 

回答

0

我并不需要得到的。

public boolean mouseMoved(MouseEvent event) { 
    Quaternion.mul(rotation, new Quaternion((float) Math.toRadians(event.x/1f), Vector4f.UP), rotation); 
    Quaternion.mul(rotation, new Quaternion((float) Math.toRadians(event.y/1f), rotation.getRight(null)), rotation); 
    return true; 
}