OpenGL垂直同步使渲染速度更快

时间:2011-12-17 20:45:48

标签: c++ opengl

我注意到,当我渲染一个简单的图元时,就像旋转的立方体一样,每次通过传统的while(!done)循环时,我将角度增加0.1,这是我在垂直同步开启时获得的结果。 off(在我的nVidia控制面板中已更改)在速度方面有很大差异。

例如,我使用以下代码:

while (!done)
{
    PeekMessage(&msg, hWnd, NULL, NULL, PM_REMOVE);

    if (msg.message == WM_QUIT)
    {
        done = true;
    }
    else
    {
        angle += 0.1;

        if (angle >= 360.0)
        {
            angle = 0.0;
        }

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();         

        glTranslatef(0.0f, 0.0f, -5.0f);

        glPushMatrix();
            glRotatef(angle, 1.0f, 0.0f, 0.0f);
            glRotatef(angle, 0.0f, 1.0f, 0.0f);
            glColor3f(1.0f, 0.0f, 0.0f);
            glutSolidCube(2.0f);
        glPopMatrix();

        glFlush();
        SwapBuffers(hDC);

        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

当强制关闭垂直同步时,此立方体的旋转速度比强制垂直同步时快得多。现在,在游戏中,当启用垂直同步时,FPS锁定为60 fps,并且当禁用时,可以自由跳转到显示器允许的最高值。这可能与它有关。

我可以通过每次传递增加或减少我的角度来轻松解决这个问题,有没有办法让我的立方体以相同的方式旋转,尽管vsync开启或关闭?

1 个答案:

答案 0 :(得分:5)

是的,使用时间增量。而不是每帧旋转0.1,你想要每20毫秒或其他东西旋转0.1。这样,无论fps如何,它都将以相同的速度旋转。

angle += 0.1 * time_elapsed_since_last_tick * some_factor;