Я пытался изучить OpenGL, LWJGL с нуля. В настоящее время у меня есть демонстрационная версия камеры, смотрящей на мир, сделанный из травы, в центре которого я изменил текстуру на булыжник, чтобы она выделялась. Я пытаюсь реализовать функцию в своем классе камеры, которая позволит мне просто пропустить угол и повернуть его вокруг точки.
У моего рендерера есть 3 матричных преобразования, одно для перевода объекта в мир. пробел, другое - это трансформация перспективы, и последнее - это трансформация моего вида, которая представляет собой камеру.
Я установил камеру на x: 3, y: 3, z: 3, шаг: 45deg, yaw : 45 градусов, чтобы получить изометрию c взгляда на мир.
Но что бы я ни пытался, я не могу понять, как повернуть камеру вокруг положения в мировом пространстве?
Класс камеры
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);
Вот как это выглядит в данный момент при визуализации: