我试图了解新的THREE.InstancedBufferGeometry功能如何工作,以便我可以根据我的用例对其进行评估。具体来说,我需要一种方法,我可以在将来的某个时刻添加对象的新实例,并通过它们的属性更新它们,但是我不知道在初始设置期间需要添加多少。理想情况下,我希望在设置期间和属性更新期间执行少量调用GPU,这就是THREE.InstancedBufferGeometry看起来很吸引人的原因。
我理解如何一次性添加对象并根据这些演示动态更新其属性:
我不清楚的是,是否可以在创建初始批处理之后动态添加和删除对象,如果它实际上更像是在Three.js中合并几何图形的方式,那么它实际上不可能轻易地删除合并后的特定单个对象。
为了保持这种关注,如何使用THREE.InstancedBufferGeometry动态添加和删除对象?
答案 0 :(得分:3)
您可以绘制少于实例的数量,然后增加或减少计数;所以,如果您在实例缓冲区中分配过来,那就开始了。
例如,您可以使用InstancedBufferAttribute
表示2000个对象,然后在InstancedBufferGeometry
上设置.maxInstancedCount = 1
以仅绘制其中一个。
如果您想要添加其他项目,请更新InstancedBufferAttribute
并设置.maxInstancedCount = 2
等,并以同样的方式减少;你可能需要做一些重新排列作为一个连续的范围。
如果您只想更新新添加的实例的缓冲区,还可以使用updateRange
和.needsUpdate(true)
来更新部分缓冲区而不是整个缓冲区。