Javascript drawcalls在three.js中如何工作?

Javascript drawcalls在three.js中如何工作?,javascript,three.js,Javascript,Three.js,我有许多潜在的长多段线(或短多段线,顶点数非常不稳定)要显示,所以我考虑将它们打包成一组固定大小(比如10000个顶点)位置BufferAttribute,并为每条多段线发送一个drawcall。如果一条多段线跨越10000个限制边界,我可以将其拆分,重复上一个缓冲区的最后一个顶点,作为新缓冲区的第一个顶点,并继续处理多个三个.Line对象 我的理解是,drawcall是由最近三个.js中的addGroup()定义的,但是我很难理解setDrawRange()的链接 在本例中,我将setDraw

我有许多潜在的长多段线(或短多段线,顶点数非常不稳定)要显示,所以我考虑将它们打包成一组固定大小(比如10000个顶点)位置
BufferAttribute
,并为每条多段线发送一个
drawcall
。如果一条多段线跨越10000个限制边界,我可以将其拆分,重复上一个缓冲区的最后一个顶点,作为新缓冲区的第一个顶点,并继续处理多个
三个.Line
对象

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

在本例中,我将
setDrawRange()
替换为
addGroup()
:并且不再设置动画()

我替换了:

line.geometry.setDrawRange( 0, drawCount );

看起来我误解了什么,因为它呈现了一切,而不仅仅是我定义的单个组


这是我疯狂的背景:我正在构建一个chrome打包的应用程序,可以访问USB,webgl和USB都必须在主JS线程上,但有时当将几何图形上传到webgl时,它会耗尽USB,我不能使用更大的USB缓冲区,因为USB电缆另一侧的设备没有足够的内存。

BufferGeometry.groups
现在用于支持多种材质(以前是
MultiMaterial
meshfacemarterial
)。比如说,

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

var mesh = new THREE.Mesh( geometry, materialsArray );
设置
几何体。drawRange
将渲染几何体的子范围

geometry.setDrawRange( start, count );

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


three.js r.91

见。这回答了你的问题吗?对不起,我第一次把我的JSFIDLE链接搞砸了。我正在研究物质方面的东西,谢谢。是的,很好,这就是缺乏多物质方面的东西(奇怪的是,这个答案没有出现在我的谷歌搜索中),我可以建议你规范界面吗?您可以让setDrawRange()创建一个组,并支持非多材质作为所有组的“同一材质”。然后,群体也成为自然的方式切割一条直线或一个三角形扇子。如果你想知道布朗尼点(这里是你评论中正确的链接),你可以把它作为一个答案来报告。你愿意提交一个three.js增强请求,建议你的简化接口方案吗,和
count2
参见此处?对于有相同问题的其他人,请参见:
geometry.setDrawRange( start, count );

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