我最近使用Javascript和3D库three.js
在WebGL中创建了一个项目然而,它的性能非常差,开始时很慢,最好接近可以。
我游戏的对象是:1辆车,6个橙子,161个cheerios,1个桌子,1个叉子,6个蜡烛。
我注意到在添加了这么多的cheerios后,性能急剧下降,所以问题可能源于每帧渲染的大量的cheerios。
由于它们都共享相同的模型(具有简单纹理的简单环面),是否有任何方法仅使用1个模型用于所有的cheerios(很像使用VS libs的openGL)?
如何改善其性能?
告诉我您是否需要有关此问题的更多具体信息。
答案 0 :(得分:0)
我猜它有些东西,你称之为昂贵的(在计算能力方面)three.js方法太多次了。我会首先描述你的游戏,以确定问题是在cpu绑定还是gpu绑定。
除了6个点光源外,还有环境光和1 定向灯,全部用three.js创建。
每个像素的照明计算单独是昂贵的,并且必须对每个像素进行照明计算。考虑减少光源。
每次爆炸都可能有几个粒子(至少100个),每个粒子都有 粒子是一个非常小的平面,具有类似广告牌的行为。
我希望这是通过广告牌粒子系统完成的,而不是单独的平面。否则三个js可能会为每个平面做一次绘制调用。
答案 1 :(得分:0)
创建几何体。然后创建cheerios网格。创建网格后,不要将其添加到场景中,而是使用
将其合并到几何体中var globalCheeriosGeometry = new THREE.Geometry();
// create 161 cherios meshes and add them to global geometry
globalCheeriosGeometry.mergeMesh( cheeriosMesh );
因此您将创建一个包含场景中所有cherios的几何体。然后使用此几何创建一个网格并将其添加到场景中。这将显着减少场景中的绘制调用次数。