0

假设我有 100 种不同的几何形状,我使用以下方法合并:

THREE.GeometryUtils.merge(geometry1, geometry2)

我是否仍然能够更新单个形状的几何形状,而不是全部?如果是这样,我该怎么做?

4

1 回答 1

1

您可以 a) 记下每个几何图形的顶点偏移量(即在合并最新几何图形之前已经有多少顶点在合并的几何图形中),然后使用它仅循环并修改某个几何图形,或者 b) 如果每个几何图形都有一种杰出的材质,您可以循环遍历所有面,并将您的修改限制在使用正确材质附加到面的那些顶点上。

但是,由于它仍然是一个大几何图形,因此无论您编辑多少,您都将把整个东西推到 GPU 上。如果您只是偶尔修改它,那可能无关紧要,但在这种情况下,您应该检查是否可以通过重新合并整个事物来获得足够的性能,而不是为任何更复杂的事物而烦恼。

如果你真的只需要将修改后的数据推送到 GPU,那么有一个void bufferSubData(GLenum target, GLintptr offset, ArrayBufferView data)函数可以做到这一点。但是,那是原始的 WebGL,您需要深入研究 three.js 的内部结构才能对其进行修补。

于 2013-05-29T06:12:40.780 回答