#matrix #lwjgl #transformation #joml
#матрица #lwjgl #преобразование #joml
Вопрос:
Я пытаюсь создать 3D-движок, используя LWJGL3, и я продолжаю сталкиваться с этой проблемой:
При вращении объекта он делает это:
Квадрат ДОЛЖЕН быть посередине, так как я не менял координату x, но это не так. На самом деле я пытался переделать матрицу преобразования, используя старую утилиту jar из LWJGL2, и квадратик вращался вокруг своей оси, а не по какой-то орбите вокруг середины.(кстати, я использую последнюю версию JOML)
Когда я искал в Google информацию о проблеме, я:
- Ничего не мог понять.
- То, что я понял, не сработает (например, обновление JOML)
Вот код, который генерирует матрицу преобразования:
public static Matrix4f createTransformationMatrix(Entity entity) {
Matrix4f matrix = new Matrix4f()
.identity()
.translate(new Vector3f(entity.getX(), entity.getY(), entity.getZ()))
.rotateX((float)Math.toRadians(entity.getRotationX()))
.rotateY((float)Math.toRadians(entity.getRotationY()))
.rotateZ((float)Math.toRadians(entity.getRotationZ()))
.scale(entity.getScale());
return matrix;
}
Вот код из вершинного шейдера:
#version 450
in vec3 position;
out vec4 out_color;
uniform mat4 projection;
uniform mat4 transformation;
void main()
{
gl_Position = projection * transformation * vec4(position, 1.0);
out_color = vec4(position.y, position.x, -position.x, 0);
}
Заранее спасибо!
Ответ №1:
Я только что узнал, в чем проблема.
Это где мои квадратичные координаты:
float[] vertices = {
-0.5f, 0.5f, -1f,
-0.5f, -0.5f, -1f,
0.5f, -0.5f, -1f,
0.5f, 0.5f, -1f
};
Поэтому я изменил их на:
float[] vertices = {
-0.5f, 0.5f, 0f,
-0.5f, -0.5f, 0f,
0.5f, -0.5f, 0f,
0.5f, 0.5f, 0f
};
И это, НАКОНЕЦ, сработало, но понятия не имею, почему.