有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java第一人称摄影机卷

我正在使用LWJGL和OpenGL3.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;
}

共 (1) 个答案

  1. # 1 楼答案

    我不需要起床

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