如何在openGL中旋转图像? 我在C++ OpenGL中有一个代码。它有六个三角形,形成六边形。 但是,我需要能够垂直旋转它。 有人能帮忙吗?TNX
详细信息:我有六个带顶点的独立三角形。此外,还有用于颜色的二维数组。 有一个循环从第[here]行开始,保持windows渲染直到退出。第[2]行的另一行用于显示所有三角形及其颜色如何在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
//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,并再次传递给着色器 有关实施细节的更多信息,请阅读以下内容:
- -创建统一的 着色器中的变量并更新它们
- -
创建将旋转顶点的矩阵