C++ OpenGL三角旋转
我画了一个三角形,我想在X轴上连续旋转它。下面的代码将它旋转了几次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);
//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 ();
}