c++ - 如何在 openGL 中旋转图像?

标签 c++ opengl graphics

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

详细信息:我有六个带顶点的独立三角形。此外,还有用于颜色的二维数组。 有一个循环从第 [here] 行开始,保持窗口呈现直到退出。 [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();
    }

最佳答案

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

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

还有一个关于矩阵运算的提示:记住以正确的顺序应用它们。如果您想让对象围绕它的中心旋转,请确保首先应用旋转矩阵并且网格的原点是它的中心。

关于c++ - 如何在 openGL 中旋转图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35882633/

相关文章:

opengl - 使用 Assimp.Net 和 OpenTK 进行换肤

flash - 如何以编程方式绘制可缩放、美观、弯曲的漫画书气球尾部?

c++ - c++ vector 构造函数的奇怪行为

c++ - macdeployqt 不复制插件

c++ - 模板类错误 "Expected initializer before ' <' token"

graphics - SDL FPS 输入延迟

c# - 我可以在窗体上绘制所有控件吗?

c++ - 输出打印地址而不是 3D 数组指针中的值

c++ - OpenGL 在 3D 空间中渲染 2D

c++ - 显示场景图的 GUI