Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在openGL中旋转图像? 我在C++ OpenGL中有一个代码。它有六个三角形,形成六边形。 但是,我需要能够垂直旋转它。 有人能帮忙吗?TNX_C++_Opengl_Graphics - Fatal编程技术网

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

如何在openGL中旋转图像? 我在C++ OpenGL中有一个代码。它有六个三角形,形成六边形。 但是,我需要能够垂直旋转它。 有人能帮忙吗?TNX,c++,opengl,graphics,C++,Opengl,Graphics,详细信息:我有六个带顶点的独立三角形。此外,还有用于颜色的二维数组。 有一个循环从第[here]行开始,保持windows渲染直到退出。第[2]行的另一行用于显示所有三角形及其颜色 //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

详细信息:我有六个带顶点的独立三角形。此外,还有用于颜色的二维数组。 有一个循环从第[here]行开始,保持windows渲染直到退出。第[2]行的另一行用于显示所有三角形及其颜色

    //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();
    }
//三角形的坐标
浮动三角形[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
}
};
浮动颜色[][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
}
};
整数计数=0;
/*循环,直到用户在(!GLFWWindowsShouldClose(window))时关闭窗口*/[here]
{
glClear(GLU颜色缓冲位);
(int i=0;i<6;i++)的[这里有两个]
{
//在此处渲染OpenGL
glEnableClientState(GL_顶点_数组);
glEnableClientState(GL_颜色_阵列);
glVertexPointer(3,GL_浮点,0,三角形[i]);
glColorPointer(3,GL_浮点,0,颜色[计数]);
gldrawArray(GL_三角形,0,3);
glDisableClientState(GL_颜色_数组);
glDisableClientState(GL_顶点_数组);
计数++;
如果(计数>2)计数=0;
}
//交换前后缓冲区
glfwSwapBuffers(窗口);
//轮询并处理事件
glfwPollEvents();
//轮询并处理事件
glfwPollEvents();
}

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

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

  • -创建统一的 着色器中的变量并更新它们

  • -
    创建将旋转顶点的矩阵


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

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

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

  • -创建统一的 着色器中的变量并更新它们

  • -
    创建将旋转顶点的矩阵

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

请参见此问题的答案:请参见此问题的答案: