2011-12-17 96 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;