我最近开始尝试使用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左右)
接受建议。
答案 0 :(得分:0)
好吧,你正在创建单个Three.Meshes。 您正在寻找的是一种恢复绘制调用和/或使用更好的内部结构的方法,即Buffergeometry。请参阅Three.js附带的示例
您也可以在创建球体后尝试合并球体。见这里
http://learningthreejs.com/blog/2011/10/05/performance-merging-geometry/