2011-12-17 95 views
0

我注意到,当我使一个简单的原始的,就像一个旋转的立方体,和我增加0.1角每次通过传统的同时(!做)循环,结果我得到当垂直同步开启时与开启时相比(在我的nVidia控制面板中更改)在速度方面有很大不同。的OpenGL垂直同步是渲染速度更快

例如,我使用以下代码:

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是打开或关闭?

回答

5

是的,使用时间增量。而不是每帧旋转0.1,你会想要每20毫秒旋转0.1或什么。这样它将以相同的速度旋转,而不管fps如何。

angle += 0.1 * time_elapsed_since_last_tick * some_factor;