处理越来越多对象的最佳方法

时间:2014-10-12 08:17:18

标签: three.js

我最近开始尝试使用webgl。

我已经看过很多演示,可以创建成千上万的对象,并且它们可以流畅地工作(60fps)。

我需要创建一个没有任何对象的场景,随着时间的推移,这个数字会上升到几千个对象。如何处理这样的情况?

我想过在开始时将对象创建为一个巨大的物体,并且只需要修改它们的顶点,以便在它们需要出生时将它们定位到相机的视野中。"但这种解决方法似乎要做太多工作。

这是一个例子: http://codepen.io/anon/pen/fmsqB?editors=001

试图让代码尽可能清晰,但请查看此部分

function populate(){
  if (count < maxcount){
    sph = sphere.clone();
    scene.add(sph);
    sphere.position.x = Rand(-10,10);
    sphere.position.y = Rand(-10,10);
    sphere.position.z = Rand(-10,10);
    count +=1;
    console.log(count);
  };
};

你可以看到,即使有几千个最低细分球体,FPS也会很快下降(对于我现在使用的机器,它用5-6k球体下降到20 fps左右)

接受建议。

1 个答案:

答案 0 :(得分:0)

好吧,你正在创建单个Three.Meshes。 您正在寻找的是一种恢复绘制调用和/或使用更好的内部结构的方法,即Buffergeometry。请参阅Three.js附带的示例

您也可以在创建球体后尝试合并球体。见这里

http://learningthreejs.com/blog/2011/10/05/performance-merging-geometry/