如何使用THREE.InstancedBufferGeometry动态添加和删除对象?

时间:2015-09-18 07:43:44

标签: three.js

我试图了解新的THREE.InstancedBufferGeometry功能如何工作,以便我可以根据我的用例对其进行评估。具体来说,我需要一种方法,我可以在将来的某个时刻添加对象的新实例,并通过它们的属性更新它们,但是我不知道在初始设置期间需要添加多少。理想情况下,我希望在设置期间和属性更新期间执行少量调用GPU,这就是THREE.InstancedBufferGeometry看起来很吸引人的原因。

我理解如何一次性添加对象并根据这些演示动态更新其属性:

我不清楚的是,是否可以在创建初始批处理之后动态添加和删除对象,如果它实际上更像是在Three.js中合并几何图形的方式,那么它实际上不可能轻易地删除合并后的特定单个对象。

为了保持这种关注,如何使用THREE.InstancedBufferGeometry动态添加和删除对象?

1 个答案:

答案 0 :(得分:3)

您可以绘制少于实例的数量,然后增加或减少计数;所以,如果您在实例缓冲区中分配过来,那就开始了。

例如,您可以使用InstancedBufferAttribute表示2000个对象,然后在InstancedBufferGeometry上设置.maxInstancedCount = 1以仅绘制其中一个。

如果您想要添加其他项目,请更新InstancedBufferAttribute并设置.maxInstancedCount = 2等,并以同样的方式减少;你可能需要做一些重新排列作为一个连续的范围。

如果您只想更新新添加的实例的缓冲区,还可以使用updateRange.needsUpdate(true)来更新部分缓冲区而不是整个缓冲区。