C++ OpenGL三角旋转

C++ OpenGL三角旋转,c++,qt,opengl,C++,Qt,Opengl,我画了一个三角形,我想在X轴上连续旋转它。下面的代码将它旋转了几次 //Paints the GL scene void GLobj::paintGL(void) { static int angle; for (angle = 1; angle<=360; angle += 1) { glClear (GL_COLOR_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT); glRotatef(angle, 1, 0 , 0);

我画了一个三角形,我想在X轴上连续旋转它。下面的代码将它旋转了几次

//Paints the GL scene
void GLobj::paintGL(void)
{
   static int angle;
for (angle = 1; angle<=360; angle += 1)
{  
   glClear (GL_COLOR_BUFFER_BIT);
   glClear(GL_DEPTH_BUFFER_BIT);
   glRotatef(angle, 1, 0 , 0);
   glBegin(GL_TRIANGLES);
   glColor3f (1.0, 0.0,1.0);
   glVertex2f(-0.45,0.0);
   glVertex2f(-0.65,0.5);
   glVertex2f(-0.25,0.5);
   glEnd();
   usleep(1000);
glFlush ();

}
//绘制GL场景
void GLobj::paintGL(void)
{
静态内角;

对于(angle=1;angle大多数图形API,如OpenGL和DirectX,将所有更改写入称为back buffer的内容中:仅在渲染完整个场景后才会显示操作。如果每个旋转步骤或
glEnd()
立即渲染,您每次都会看到场景不断增强。结果会闪烁,这不太好看

绘制完场景后,您可以告诉OpenGL,以便可以立即显示所有内容。您可以使用
glFlush
执行此操作


在第二个示例中,您进行了一次旋转,又进行了一次旋转,最后显示了一次最终场景。三角形在旋转阶段的漂亮过渡没有被渲染。

它没有显示任何内容,因为您在任何时候都没有刷新命令队列。您确实不应该使用single缓冲渲染现在不管怎样,它通常不适用于大多数使用合成窗口管理器或混合集成/离散GPU切换的系统。
//Paints the GL scene
void GLobj::paintGL(void)
{
   static int angle;
for (angle = 1; angle<=360; angle += 1)
{
   glClear (GL_COLOR_BUFFER_BIT);
   glClear(GL_DEPTH_BUFFER_BIT);

   glRotatef(angle, 1, 0 , 0);

   glBegin(GL_TRIANGLES);
   glColor3f (1.0, 0.0,1.0);
   glVertex2f(-0.45,0.0);
   glVertex2f(-0.65,0.5);
   glVertex2f(-0.25,0.5);
   glEnd();
   usleep(1000);

if (angle == 360)
{angle = 1;}
}

glFlush ();

}