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

标签 three.js

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

我了解如何根据这些演示一次添加所有对象并动态更新它们的属性:

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

为了保持专注,我将如何使用 THREE.InstancedBufferGeometry 动态添加和删除对象?

最佳答案

您可以绘制少于实例数然后增加或减少计数;因此,如果您一开始就在实例缓冲区中过度分配。

例如,您可以有一个代表 2000 个对象的 InstancedBufferAttribute,然后在 InstancedBufferGeometry 上设置 .maxInstancedCount = 1只画其中一个。

当你想添加另一个项目时,更新InstancedBufferAttribute并设置.maxInstancedCount = 2等,并以同样的方式减少;你可能需要做一些重新排列,因为它是一个连续的范围。

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

关于three.js - 如何使用 THREE.InstancedBufferGeometry 动态添加和删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32646531/

相关文章:

javascript - 三.js |吐温链 : How to start multiple tween's simultaneous?

javascript - 检测声音以 THREE.PositionalAudio 结束?

javascript - 通过添加默认高度 javascript 创建 3D 对象

javascript - 如何使用 iTowns2 在浏览器中渲染点云数据

javascript - 更改背景颜色,在 Three.js 中添加点光源

shader - Three.js 中的自定义纹理着色器

javascript - "physi.js"导致错误 : "Script cannot be accessed from origin ' null '"

javascript - Three.js 项目崩溃移动

javascript - 将 .casa-model 转换为 .obj

3d - Three.js中ObjLoader和ObjLoader2的区别