【发布时间】:2014-04-18 23:48:27
【问题描述】:
我画了一个三角形,我想在 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 ();
}
如果我将上面的代码更改如下,输出只是忙于执行而不显示任何内容。
//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 ();
}
还有其他更好的方式来实现连续旋转吗?
【问题讨论】:
-
它没有显示任何内容,因为您在任何时候都没有刷新命令队列。这些天你真的不应该使用单缓冲渲染,它通常不适用于大多数使用合成窗口管理器或混合集成/离散 GPU 切换的系统。