2016-04-02 37 views
1

LWJGL ve OpenGL 3.2'yi kullanarak OpenGL için bir java Game Engine yazılımı yazıyorum. Fare, kamerayı döndürmek için hareket ettirildiğinde, perdeyi ve zifti de ekleyebilir.İlk Şahıs Fotoğraf Makinesi Rulosu

Kamera kodu

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; 
} 

Kuaterniyon kodu

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; 
} 

cevap

0

Ben kalkmaya gerek yoktur.

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; 
}