如何围绕物体旋转相机?

时间:2020-02-17 13:30:13

标签: java opengl matrix lwjgl matrix-multiplication

我一直在尝试从头开始学习OpenGL,LWJGL。 目前,我正在运行一个演示相机,演示着一个由草制成的世界,在它的中心位置,我将纹理更改为鹅卵石,以使其脱颖而出。 我正在尝试在相机类中实现一个函数,该函数将允许我只是通过一个角度并使它围绕一个点旋转。

我的渲染器有3个矩阵变换,一个是在世界空间中平移对象,另一个是透视变换,最后是我的视图变换,即摄影机。

我将摄像机的位置设置为x:3,y:3,z:3,俯仰角:45deg,偏航角:45deg,以获取世界的等轴测视图。

但是无论我如何尝试,我似乎都无法弄清楚如何围绕世界空间中的某个位置旋转相机?

相机课

import org.joml.Vector3f;

public class Camera {
    private Vector3f position;
    private float pitch;
    private float yaw;
    private float roll;

    public Camera(Vector3f position, float pitch, float yaw, float roll) {
        this.position = position;
        this.pitch = pitch;
        this.yaw = yaw;
        this.roll = roll;
    }


    public Vector3f getPosition() {
        return position;
    }

    public float getPitch() {
        return pitch;
    }

    public float getYaw() {
        return yaw;
    }

    public float getRoll() {
        return roll;
    }
}

我用来创建视图矩阵的函数

public static Matrix4f createViewMatrix(Camera camera){
        Matrix4f viewMatrix = new Matrix4f();
        viewMatrix.rotate((float) Math.toRadians(camera.getPitch()), new Vector3f(1,0,0));
        viewMatrix.rotate((float) Math.toRadians(camera.getYaw()), new Vector3f(0,1,0));
        Vector3f cameraPos = camera.getPosition();
        Vector3f negativeCameraPos = new Vector3f(-cameraPos.x, -cameraPos.y, -cameraPos.z);
        viewMatrix.translate(negativeCameraPos);
        return viewMatrix;
}

顶点着色器代码

#version 400 core

in vec3 position;
in vec2 textureCoords;

out vec2 pass_textureCoords;

uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

void main(void){
    gl_Position = projectionMatrix * viewMatrix * transformationMatrix * vec4(position, 1.0);
    pass_textureCoords = textureCoords;
}

这是我的相机的构造方式

camera = new Camera(new Vector3f(-3, 3, 3), 45, 45, 0);

这是当前呈现时的样子:

img

0 个答案:

没有答案