的數量有關的性能比較我最近在WebGL的一個項目,使用JavaScript和3D庫three.js所three.js所使用對象
但是它的性能比較很差,一開始慢,充其量獲得接近好的。
我的比賽對象是:1輛車,6個橙子,161個小甜餅,1個桌子,1把叉子,6支蠟燭。
- 您可以在賽車遊戲(WASD或方向鍵)中控制賽車,您可以通過賽車運動限制賽道駕駛賽車。該車由幾個three.js幾何形狀(箱,圓環,圓柱體,球體)組成。如果橙子與汽車碰撞,玩家會回到軌道的起點並失去1點生命。
- 所有的橘子均勻直線移動,如果碰撞,可以殺死汽車。橙色模型由three.js幾何球體和圓柱體組成。
- 該表格是以xyz座標縮放爲300x1x300的立方體。
- 每根蠟燭都是一個點光源,其亮度變化會產生閃爍的感覺。
- 除了6個點光源,還有環境光線和1個定向光源,全部由three.js創建。
- 作爲類似廣告牌行爲的叉子,旋轉爲始終指向當前活動相機,由飛機表示。
- 每當橙色達到其軌跡末端並暫時消失,或汽車完成一圈時,就會發生粒子爆炸。
- 每個爆炸可以有幾個粒子(至少100個),每個粒子是一個非常小的平面與廣告牌般的行爲。
- 創建爆炸後,其所有粒子將單獨創建並添加到場景中。
- 每次爆炸也有一段時間以毫秒爲單位生存,通常爲1000.當爆炸到期時,爆炸將從現場移除。
- 遊戲的所有對象都有自己的紋理,並不是所有的紋理都具有「好」的尺寸,即尺寸爲2的權力(32x32,256x256,1024x1024等)。每個紋理都加載了一個不推薦的方法THREE.ImageUtils.loadTexture(URL)。
- 一切都是用three.js構建的,從場景,照相機和燈光到網格,幾何形狀和材質。
我注意到,加入這麼多小遊戲後性能急劇下降,所以問題可能源於每幀大量的cheerios渲染。因爲他們都共享相同的模型(一個簡單的紋理簡單的環面),是否有任何方式只使用1個模型的所有cheerios(很像在OpenGL與VS庫)?
如何提高性能?
如果您需要關於此問題的更多具體信息,請告訴我。
將cheerios放在容器對象的內部?我不確定你正在使用的性能的確切問題,但也許你可以通過將它們作爲單個項目對其進行批處理來批量處理一些計算。 –
您是否在使用物理?你怎麼做碰撞。我猜這個問題不是three.js,它是你的碰撞和物理系統。關掉所有的碰撞,看看它是否運行得很快。之後檢查你的粒子系統。 – gman
@gman我目前正在使用蠻力衝突檢查(我們的老師要求某種類型的衝突檢測並提出了AABB算法)。因此,每次我更新遊戲時,我還要檢查所有可能的碰撞,這顯然沒有通過任何更高級的碰撞技術進行優化(遺憾的是,我們並沒有在我們的課程中處理這些事情)。 – Razraal