drawcalls如何在three.js中工作?

时间:2015-10-03 11:03:25

标签: javascript three.js

我有很多可能很长的多段线(或短,顶点计数很不稳定)要显示,所以我考虑将它们打包成一堆固定大小(让我们说10000个顶点)位置{{1}每个折线发送一个BufferAttribute。如果折线越过10000限制边界,我可以将其拆分,重复上一个缓冲区中的最后一个顶点作为新缓冲区的第一个顶点,并继续使用多个drawcall个对象。

我的理解是THREE.Line在最近的三个.js中由drawcall定义,但我很难理解与addGroup()的链接。

我在此示例中将setDrawRange()替换为setDrawRange()http://jsfiddle.net/1v00pxx5/并且它不再具有动画效果(Drawing a line with three.js dynamically)。

我换了:

addGroup()

通过

line.geometry.setDrawRange( 0, drawCount );

看起来我误解了一些东西,因为它渲染了所有内容,而不仅仅是我定义的单个组。

这是我的疯狂上下文:我正在构建一个访问USB的chrome打包应用程序,webgl和USB都必须在主JS线程上,但有时在将几何上传到webgl时,它会使USB匮乏,我无法使用更大的USB缓冲区,因为USB电缆另一侧的设备没有足够的内存。

1 个答案:

答案 0 :(得分:7)

BufferGeometry.groups现在用于支持多种素材(以前为MultiMaterialMeshFaceMaterial)。例如,

geometry.clearGroups();
geometry.addGroup( start1, count1, 0 ); // materialIndex 0
geometry.addGroup( start2, count2, 1 ); // materialIndex 1

var mesh = new THREE.Mesh( geometry, materialsArray );

设置geometry.drawRange将呈现几何体的子范围。

geometry.setDrawRange( start, count );

var material = new THREE.LineBasicMaterial( { color: 0xff0000 } );
var line = new THREE.Line( geometry, material );

小提琴:http://jsfiddle.net/w67tzfhx/

three.js r.91