2014-01-09 23 views
0

我正在查看three.js代碼,並注意它在繪圖時對所有對象進行了交互操作。然後這反過來更新每個對象的GL上下文。但是如果我有一堆對象共享一個資料,這是非常低效的,因爲它可能與其他對象交錯。如何排序/優化對象的列表以避免gl調用

如何將我的對象放在最小化gl調用的次序?我知道哪些對象共享屬性,我只是不知道如何告訴three.js這些信息。


更新:我修改了three.js代碼並計算更新。這是非常浪費的。給定一個具有兩種材質的邏輯對象,對於我添加到場景中的每一個都需要兩次交換程序。所以對於100個這樣的對象,它將交換200次,而不是所需的2次交換!

回答

0

什麼是「最佳」是針對特定情況的,所以您的問題太籠統而無法回答。國家的變化並不是唯一值得關注的問題。

three.js將不透明的物體從前到後排列,而透明的物體從後到前排列。它最後呈現透明對象。

如果設置

renderer.sortObjects = false; 

那麼對象將在它們被添加到場景中的順序渲染。既然你知道你的對象是什麼,這是你的解決方法。

您也可以合併您的幾何圖形,或使用BufferGeometry來減少繪製調用次數。

通過在控制檯中檢查renderer.info(或參見https://github.com/spite/rstats),可以獲取有關渲染器的信息。這樣,你不必破解源代碼。

three.js r.64

+0

問題是我該如何去分組對象?我很確定地知道類似材料的物體可以一起呈現。不幸的是,這些都不是靜態的,因此不能組合,並且必須位於不同的場景對象內(因爲它們有自己的變換)。 –

+0

這是一個常見問題。我盡我所能來幫助你,我可以回答你的three.js問題,但我不可能告訴你如何分組你的對象。 – WestLangley

+0

我知道我想如何組合他們,我只是不確定如何告訴three.js。也就是說,我看不到影響渲染器中對象順序的能力.__ webglObjects。我寫了一個自定義分類器,它做了正確的分組,但它顯然不是標準的。 –