我是新來的圖形,所以我不知道人們通常如何控制渲染事物的幀速率。 我的意思是,你如何設置你的應用程序渲染,例如30fps? 可能有很多API提供這樣的事情,但我需要從頭開始對其進行編碼。控制幀率的常用方法是什麼?
回答
「控制」幀速率有兩種「常用」方法,但都不那麼簡單。
這兩者中的第一個和更多控制,以及通常是可選的東西是VSync。這會強制顯卡在顯示器完成刷新時只推出一個新幀。許多顯示器在60赫茲時刷新,因此您傾向於獲得60 FPS。
這很適合第幀率來監視刷新率,但是當幀率低於刷新時,它會被強制下一個倍數。因此,隨着幀速率開始下降一點,您會失去相當多的潛在渲染時間,因爲它會被強制爲60,然後是30,然後是20等。
(有關vsync的信息,請參閱DirectX和OpenGL )
常用的第二種方法(使用vsync可選地添加)不是限制幀速率。相反,請調整您的代碼以處理差異。從長遠來看,這是更加靈活的,通常更好的編碼,海事組織,並且比試圖強制特定的FPS計數要簡單得多。
假設你有一個簡單的循環渲染,它開始了尋找類似:
while (gameloop)
{
float framedelta = (timeNow - timeLast)
timeLast = timeNow;
for each (GameObject object in World)
{
object->Animate(framedelta);
object->Move(speed * framedelta)
}
render();
}
你想看看差/時間的流逝/三角洲和工作在那裏的時間。允許幀率根據硬件和設置進行縮放(預測或處理一半的幀數有太多變化),並使您的遊戲能夠與其進行協作而不是控制它。在你的實踐中更容易,更靈活和穩定。
30後來到20;) – fredoverflow 2011-04-01 09:26:37
產生可預測的典型方法(如果不是恆定的)幀速率(帶有視頻或3D圖形)在下面的僞代碼中描述。
算法
- 準備下一幀(渲染背緩衝液中);
- 睡眠時間片的其餘部分;
- 詢問要顯示的幀(交換正面和背面緩衝區)。
請注意睡眠操作的位置。它夾在同一幀的準備和顯示之間。這是恆定幀率的主要關鍵!您希望準備框架以計算總時間片以顯示幀。
關於如何實現每個步驟(基於分辨率,可靠性等選擇睡眠操作),有多種變體,但核心就在那裏。
提示更高的可靠性
- 不要爲整個區間調用你的睡眠功能一次。根據您準備接受的最大錯誤定義一些常數,並在此間隔期間重複睡眠,直到剩餘時間小於或等於此量。
- 當您知道您無法及時準備下一幀時,不要害怕偶爾丟下一幀。它在視覺上比跳過一幀更吸引人,而不是產生可變幀頻。
- 如果您可以避免單處理器系統上的後臺線程,請避開它們。使用工作線程確實會混淆睡眠功能的可靠性。最好的方法是將你的後臺工作分成小塊,並且執行這項工作而不是睡覺。
1st很容易實現,可以隱藏在輔助函數中。第二個更加棘手,因爲它需要你保持平均渲染速度的統計數據等等。第三個難以實現,因爲通常很難預測不同的任務需要多少時間。它通常僅在具有嚴格約束的實時系統中實施。
- 1. 什麼是實現Web API請求限制/速率限制的常用方式?
- 2. 常用的GIS方法是什麼?
- 3. 什麼是默認幀速率cocos2dx
- 4. 用於FPGA邏輯GUI控制的實用方法是什麼?
- 5. 控制幀速率或限制AVCaptureVideoPreviewLayer
- 6. 什麼是「異常控制」循環?
- 7. 從Tiles調用控制器的更好方法是什麼?
- 8. 用Apache控制緩存的正確方法是什麼?
- 9. 複製版本控制庫的最佳方法是什麼?
- 10. 控制着色器的幀率
- 11. 控制ASCII動畫的幀速率
- 12. 在Rails 4控制器中調用方法的正確方法是什麼?
- 13. 處理可選方法參數的常用方法是什麼?
- 14. 什麼是最有效的製造方式和賠率制度?
- 15. 用矢量乘數據幀的正確方法是什麼?
- 16. HTML5:有什麼辦法可以控制硬件的幀緩衝?
- 17. 速率限制REST API用戶的最佳做法是什麼?
- 18. 由setText方法引起的幀率非常低?
- 19. 在AngularJS中定義控制器的正確方法是什麼?
- 20. 實例化控制器與IoC的正確方法是什麼
- 21. 在MIDI音序器中控制音量的方法是什麼?
- 22. 現代D的首選控制檯輸出方法是什麼?
- 23. 控制循環速度的最佳方法是什麼?
- 24. 在Corona SDK中控制Z-depth的正確方法是什麼?
- 25. 什麼是從控制器獲取模型類的Rails方法?
- 26. 測試此控制器的正確方法是什麼?
- 27. 是否有可能控制iOS上的幀速率
- 28. GoodData:API的速率限制是什麼?
- 29. 什麼是定製Sylius的好方法?
- 30. 什麼是處理非常高分辨率圖像的最佳方法?
可能的重複:http://stackoverflow.com/questions/2940054/how-to-determine-the-best-framerate-setinterval-delay-to-use-in-a-javascript – INS 2011-04-01 07:00:08