У меня проблема с перемещением моих сущностей в контексте OpenGL:
когда я пытаюсь разместить объект, позиция кажется правильной, но когда объект начинает двигаться, все идет не так, и столкновения не работают. Я новичок в OpenGL и подозреваю, что моя мировая матрица или матрица моделей неверны.
Вот код вершинного шейдера:
#version 330 core
layout (location=0) in vec3 position;
out vec3 extColor;
uniform mat4 projectionMatrix;
uniform mat4 modelMatrix;
uniform vec3 inColor;
void main()
{
gl_Position = projectionMatrix * modelMatrix * vec4(position, 1.0);
extColor = inColor;
}
Вот класс, который вычисляет большую часть матрицы:
public class Transformations {
private Matrix4f projectionMatrix;
private Matrix4f modelMatrix;
public Transformations() {
projectionMatrix = new Matrix4f();
modelMatrix = new Matrix4f();
}
public final Matrix4f getOrthoMatrix(float width, float height, float zNear, float zFar) {
projectionMatrix.identity();
projectionMatrix.ortho(0.0f, width, 0.0f, height, zNear, zFar);
return projectionMatrix;
}
public Matrix4f getModelMatrix(Vector3f offset, float angleZ, float scale) {
modelMatrix.identity().translation(offset).rotate(angleZ, 0, 0, 0).scale(scale);
return modelMatrix;
}
}
Вот тест на столкновения:
public boolean isIn(Pos p) {
return (p.getX() >= this.pos.getX() &&
p.getX() <= this.pos.getX() + DIMENSION)
&& (p.getY() >= this.pos.getY() &&
p.getY() <= this.pos.getY() + DIMENSION);
}
Также есть ссылка на проект github: https://github.com/ShiroUsagi-san/opengl-engine.
Я действительно новичок в OpenGL 3, поэтому я мог сделать несколько действительно больших ошибок.
Я также использую i3 как WM, я не знаю, может ли это привести к такого рода проблемам.