如何旋转四边形

How to Rotate a Quad

我正在尝试使四边形绕其中心旋转。我正在使用 glm::rotate() 并将四边形设置为在 z 轴上旋转。但是,当我这样做时,它会产生这种奇怪的效果。四边形拉伸和变形。它看起来几乎是 3d,但因为我绕着 z 轴旋转它,所以不应该发生,对吗?

这里是上下文的相关代码:

    float rotation = 0.0f;
    double prevTime = glfwGetTime();

    while (!glfwWindowShouldClose(window)) 
    {
        GLCall(glClearColor(0.0f, 0.0f, 0.0f, 1.0f));

        GLCall(glClear(GL_COLOR_BUFFER_BIT));

        updateInput(window);

        shader.Use();
        glUniform1f(xMov, x);
        glUniform1f(yMov, y);
        test.Bind();

        double crntTime = glfwGetTime();
        if (crntTime - prevTime >= 1 / 60) 
        {
            rotation += 0.5f;
            prevTime = crntTime;
        }

        glm::mat4 model = glm::mat4(1.0f);

        model = glm::rotate(model, glm::radians(rotation), glm::vec3(0.0f, 0.0f, 1.0f));

        int modelLoc = glGetUniformLocation(shader.id, "model");
        glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));

        vao.Bind();
        vBuffer1.Bind();
        iBuffer1.Bind();

        GLCall(glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0));

        glfwSwapBuffers(window);

        glfwPollEvents();
    }

着色器:

#version 440 core

layout(location = 0) in vec3 aPos;
layout(location = 1) in vec3 aColor;
layout(location = 2) in vec2 aTex;

out vec3 color;
out vec2 texCoord;

uniform float xMove;
uniform float yMove;
uniform mat4 model;

void main()
{
    gl_Position = model * vec4(aPos.x + xMove, aPos.y + yMove, aPos.z, 1.0);
    color = aColor;
    texCoord = aTex;
}

如果没有你显示图形输出,很难说。

您的第一个问题是,您没有绕中心旋转,要按中心旋转,您必须偏移四边形,使其中心位于 0,0。然后旋转,然后偏移回到原来的位置,但是你有这条线:

gl_Position = model * vec4(aPos.x + xMove, aPos.y + yMove, aPos.z, 1.0);

假设四边形作为原点开始围绕点 (-xMove, -yMove) 旋转。