我一直在尝试从头开始学习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);
这是当前呈现时的样子: