如何在openGL中旋转图像?

时间:2016-03-09 04:01:02

标签: c++ opengl graphics

我在C ++ OpenGL中有一个代码。它有六个三角形,形成六边形。 但是,我需要能够垂直旋转它。 有人可以帮忙吗? TNX

细节:我有六个带顶点的独立三角形。此外,还有用于颜色的二维数组。 在[这里]行开始有一个循环,两个保持窗口渲染,直到退出。第[here-two]行的另一行用于显示所有三角形的颜色。

    //coordinates of triangle
    float triangle[6][9] = {
        {
            0.0, 0.0, 0.0,
            -0.5, 0.87, 0.0,
            0.5, 0.87, 0.0
        },
        {
            0.0, 0.0, 0.0,
            -0.5, -0.87, 0.0,
            0.5, -0.87, 0.0
        },
        {
            0.0, 0.0, 0.0,
            0.5, 0.87, 0.0,
            1.0, 0.0, 0.0
        },
        {
            0.0, 0.0, 0.0,
            0.5, -0.87, 0.0,
            1.0, 0.0, 0.0
        },
        {
            0.0, 0.0, 0.0,
            -0.5, 0.87, 0.0,
            -1.0, 0.0, 0.0
        },
        {
            0.0, 0.0, 0.0,
            -0.5, -0.87, 0.0,
            -1.0, 0.0, 0.0
        }

    };

    float color[][9]{
        {
            255, 0, 0,
            255, 0, 0,
            255, 0, 0
        },
        {
            0, 255, 0,
            0, 255, 0,
            0, 255, 0
        },
        {
            0, 0, 255,
            0, 0, 255,
            0, 0, 255
        }
    };
    int count = 0;

    /* Loop until the user closes the window */ [here]      while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);
 [here-two]             for (int i = 0; i < 6; i++)
        {
            //Render OpenGL here
            glEnableClientState(GL_VERTEX_ARRAY);
            glEnableClientState(GL_COLOR_ARRAY);
            glVertexPointer(3, GL_FLOAT, 0, triangle[i]);
            glColorPointer(3, GL_FLOAT, 0, color[count]);
            glDrawArrays(GL_TRIANGLES, 0, 3);
            glDisableClientState(GL_COLOR_ARRAY);
            glDisableClientState(GL_VERTEX_ARRAY);
            count++;
            if (count > 2) count = 0;
        }
        //Swap front and back buffers
        glfwSwapBuffers(window);

        //Poll for and process events
        glfwPollEvents();

        // Poll for and process events
        glfwPollEvents();
    }

1 个答案:

答案 0 :(得分:2)

阅读矩阵的使用。大多数游戏在这种情况下做的是它们在着色器中应用矩阵(作为一个统一变量)来旋转对象。在这种情况下,您将创建角度x的旋转矩阵,将其传递给着色器,然后每个新帧增量x并再次将其传递给着色器。

有关实施细节的更多信息,请阅读以下内容:

带有矩阵运算的提示:记得按正确的顺序应用它们。如果要让对象绕其中心旋转,请确保首先应用旋转矩阵,并确保网格的原点位于其中心。