我有很多可能很长的多段线(或短,顶点计数很不稳定)要显示,所以我考虑将它们打包成一堆固定大小(让我们说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电缆另一侧的设备没有足够的内存。
答案 0 :(得分:7)
BufferGeometry.groups
现在用于支持多种素材(以前为MultiMaterial
或MeshFaceMaterial
)。例如,
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