实例化多个对象降低了WEBGL应用程序的帧率

时间:2015-12-14 22:04:56

标签: javascript opengl-es 3d three.js webgl

我正在开发一个THREE.JS WebGL应用程序,我需要渲染具有相同几何形状的多个对象,并且我偶然发现了一个瓶颈。似乎我的物体实例存在一些问题,我无法理解/意识到,也许有人可以帮助我。对于上下文,我有一个带有法线的PointCloud,它为我提供了有关实例化对象的位置以及通过正常四元数的对象方向的信息。然后,我循环遍历此数组,并相应地放置每个实例化对象。在查看关于实例化,合并等的各种帖子后,我无法弄清楚我做错了什么。

我附上了相关方法的代码段:

bitbucket.org/snippets/electricganesha/Mdddz

经过多次审核后,我真的想知道这里有什么问题,为什么这个特殊方法会将我的应用程序从60fps减慢到20fps。

1 个答案:

答案 0 :(得分: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);