2014-02-11 64 views
1

我在玩遊戲引擎中的對象時遇到了與計時器相關的問題。幼體幾乎是正確的,並且當我將幼體應用於移動或旋轉的物體時,除了每隔幾秒之外,它看起來就好像物體快速閃爍到之前的位置,然後繼續平穩移動。計時器的延遲問題

在窗口模式下運行引擎會給我1500〜fps,但是如果我以全屏模式運行vsync鉗位至60fps,毛刺會更頻繁地發生。

我一直在試圖找到一個很好的資源或lerping的解釋,以及如何我可以改善我有什麼。

爲制定蜱差距我用:

float World::GetTickGap() 
{ 
float gap = (float) (TimeMs() - m_lastTick)/m_tickDelay; 
return gap > 1.f ? 1.f : gap; 
} 

我的更新功能:

m_currentTick = TimeMs(); 
if(m_currentTick > m_lastTick+m_tickDelay) 
{ 
    m_lastTick = m_currentTick; 

      //Update actors 

    } 

呈現每個演員我給剔差距爲他們自己的立場之間的線性插值然後當。

我lerping功能:

float math::Lerp(float a, float b, float t) 
{ 
return a + t*(b-a); 
} 

而且lerping函數的例子被稱爲:

renderPosition.x = (math::Lerp(m_LastPosition.x, m_Position.x, tickDelay)); 

我不確定在哪裏在試圖解決這一問題入手。據我所知,這是功能的時間問題。儘管其他任何事情都會以不變的速度引起性能的小幅下降?

任何有關這個問題的幫助將不勝感激。 :)

+0

1500或150?我不知道許多顯示器的刷新率足夠高,足以正確顯示1500 fps,更不用說人眼可以察覺的這樣的速率。 – JAB

+0

最後一行中的「tickDelay」與第一行中的「TickGap」相同? – AShelly

+0

顯示器本身只有60的能力,但引擎告訴我什麼時候不在vsync下能夠在一秒鐘內繪製世界1500次。當我開始渲染多個對象時,我確實希望這個數字下降。 – Crabbo

回答

0

我真的不能夠從你貼什麼

重建你的代碼,但我記得打電話給你的時間比功能每幀一次更是糟糕的想法一般。 你似乎這樣做。試着考慮一下有什麼影響。

E.g.這可能意味着「更新Actors」循環與「tickGap」間隔不同步,演員第二次更新0間隔。