Matrix 当使用JOML时,对象旋转异常

Matrix 当使用JOML时,对象旋转异常,matrix,lwjgl,transformation,Matrix,Lwjgl,Transformation,我正在尝试使用LWJGL3创建一个3D引擎,我一直遇到这个问题: 旋转对象时,会执行以下操作:

我正在尝试使用LWJGL3创建一个3D引擎,我一直遇到这个问题:

旋转对象时,会执行以下操作:

<四分之一应该在中间,因为我没有改变x坐标,但它不是。 实际上,我尝试使用LWJGL2中的旧实用程序jar和围绕其轴旋转的四边形(而不是围绕中间的某种轨道)来重做转换矩阵。(顺便说一句,我使用的是最新版本的JOML)

当我在谷歌上搜索这个问题时,我:

  • 我什么都不懂
  • 我所理解的事情是行不通的(比如更新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);
    }
    

    提前谢谢

    我刚刚发现了问题所在

    这是我的四边形坐标:

    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
    };
    

    它最终起作用了,但不知道为什么。

    它以前不起作用的原因是,您的四元组没有以本地原点为中心。它以
    (0,0,-1)
    为中心。所有线性变换(如旋转和缩放)都相对于原点应用。因此,您的四边形绕轨道旋转,因为其局部原点不是
    (0,0,0)
    ,而是
    (0,0,-1)