2015-12-14 91 views
0

我正在开发一个THREE.JS WebGL应用程序,我需要使用相同的几何体呈现多个对象,并且我偶然发现了一个瓶颈。似乎我的对象实例有一些问题,我不能真正理解/意识到,也许有人可以帮助我。对于上下文,我有一个带法线的PointCloud,它给了我有关在哪里定位实例化对象的信息,以及通过正常四元数定位对象的方向。然后,我遍历这个数组,并相应地放置每个实例化对象。在查看关于实例化,合并等各种帖子后,我无法弄清楚我做错了什么。实例化多个对象降低WEBGL应用程序的帧率

我附上了该方法的代码片段中的问题:

bitbucket.org/snippets/electricganesha/Mdddz

审查它多次后,我真的不知道这里有什么问题,为什么这个特定的方法是否会将我的应用程序从60fps放慢到20fps?

+0

多少分/对象实例化你? – pailhead

+0

约300个物体,每个物体具有以下几何:1254点,4884个顶点,1232个基元 –

+0

只是为了阐明,通过“实例化”,你的意思是? https://www.khronos.org/registry/webgl/extensions/ANGLE_instanced_arrays/ – Winchestro

回答

1

您可能会过度补偿优化。

在你的循环,你合并所有这些几何形状尝试添加这样的事情

var maxVerts = 1 << 16; 

//if merging a new object causes the vert number to go over 2^16 push the merged geometry somewhere, and make a new one for the next batch 
if(singleGeometry.vertices.length + newObject.geometry.vertices.length > maxVerts){ 
    scene.add(singleGeometry); 
    singleGeometry = new Geometry(); 
} 

singleGeometry.merge(newObject.geometry, newObject.matrix); 
+0

我会尝试这种方法,但是即使没有合并几何体,300个对象的渲染应该如此沉重? –

+0

300它应该,3000甚至应该罚款取决于究竟发生了什么,但从我看到你没有这样做,你坚持一切到一个网格和three.js似乎并不喜欢,在最少直到最近才做到 – pailhead

+0

好,所以我尝试了你的方法,它没有改进,和以前一样。我也尝试不合并几何图形,并且不加合并地按对象添加对象,这使我的性能在5fps下变差。 我完全被这个困惑了。 –