在Three.js中,是否可以替换BufferGeometry';是否在不创建新几何体的情况下创建属性数组?

在Three.js中,是否可以替换BufferGeometry';是否在不创建新几何体的情况下创建属性数组?,three.js,webgl,Three.js,Webgl,创建并渲染至少一次缓冲几何体后,我需要增加几何体的大小。由于无法增加属性数组的大小,我可以用新的、更大的数组替换这些数组吗 类似于myGeometry.attributes.position.array=newPositionArray myGeometry.attributes.position.array = newPositionArray; 我已经尝试过了,并在几何体上设置了所有的.*NeedsUpdate字段,但是我得到了一长串WebGL错误。THREE.js中是否存在阻止我以这种方式

创建并渲染至少一次缓冲几何体后,我需要增加几何体的大小。由于无法增加属性数组的大小,我可以用新的、更大的数组替换这些数组吗

类似于myGeometry.attributes.position.array=newPositionArray

myGeometry.attributes.position.array = newPositionArray;
我已经尝试过了,并在几何体上设置了所有的.*NeedsUpdate字段,但是我得到了一长串WebGL错误。THREE.js中是否存在阻止我以这种方式操作的内部问题?

来自文档

“您可以通过预先分配更大的缓冲区,然后保持不需要的顶点折叠/隐藏来模拟调整大小。”

没有。但是你可以(在一定程度上)伪造它

来自(我的):

关于更新缓冲区几何体,需要了解的最重要的一点是,不能调整缓冲区的大小(这非常昂贵,基本上相当于创建新的几何体)但是,您可以更新缓冲区的内容。这意味着,如果您知道缓冲区几何体的属性将增长,…则必须预先分配足够大的缓冲区,以容纳可能创建的任何新顶点。当然,这也意味着您的BufferGeometry将有一个最大大小-无法创建可以有效地无限扩展的BufferGeometry

因此,通过预先分配超出您需要的数量,然后仅绘制当前填充的零件(以保持性能),您可以实现所需的结果

代码示例(来自同一文档):

然后在添加新点信息后进行更新:

line.geometry.setDrawRange( 0, newValue );
line.geometry.setDrawRange( 0, newValue );