Объект сильно вращается при использовании JOML

#matrix #lwjgl #transformation #joml

#матрица #lwjgl #преобразование #joml

Вопрос:

Я пытаюсь создать 3D-движок, используя LWJGL3, и я продолжаю сталкиваться с этой проблемой:

При вращении объекта он делает это: Quad

Квадрат ДОЛЖЕН быть посередине, так как я не менял координату x, но это не так. На самом деле я пытался переделать матрицу преобразования, используя старую утилиту jar из LWJGL2, и квадратик вращался вокруг своей оси, а не по какой-то орбите вокруг середины.(кстати, я использую последнюю версию JOML)

Когда я искал в Google информацию о проблеме, я:

  1. Ничего не мог понять.
  2. То, что я понял, не сработает (например, обновление 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
};
  

И это, НАКОНЕЦ, сработало, но понятия не имею, почему.