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

我附上有问题的方法的代码片段:

bitbucket.org/snippets/electricganesha/Mdddz

经过多次审查之后,我真的很想知道这里出了什么问题,为什么这种特殊方法会使我的应用程序从60fps减慢到20fps。

最佳答案

您可能会对优化过度补偿。

在您合并所有这些几何的循环中,尝试添加如下内容

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);

08-06 03:22