Javascript 更换管缓冲几何体';使用新的TubeBuffer几何体替换内容,不进行分配
我有一个网格,其几何体是Javascript 更换管缓冲几何体';使用新的TubeBuffer几何体替换内容,不进行分配,javascript,three.js,Javascript,Three.js,我有一个网格,其几何体是TubeBufferGeometry。动画循环的每一帧,TubeBufferGeometry的路径都会改变(路径将由运行时提供的值确定),因此我想用新的TubeBufferGeometry更新每一帧的几何体。当然,我可以像这样更新网格的几何体: mesh.geometry.dispose() mesh.geometry = new THREE.TubeBufferGeometry(newPath, params) 但这是浪费,因为它需要为每个帧分配一个全新的Buffer
TubeBufferGeometry
。动画循环的每一帧,TubeBufferGeometry
的路径都会改变(路径将由运行时提供的值确定),因此我想用新的TubeBufferGeometry
更新每一帧的几何体。当然,我可以像这样更新网格的几何体:
mesh.geometry.dispose()
mesh.geometry = new THREE.TubeBufferGeometry(newPath, params)
但这是浪费,因为它需要为每个帧分配一个全新的BufferGeometry
。理想情况下,我可以简单地给TubeBufferGeometry
构造函数一个要覆盖的现有几何体,而不是分配一个全新的几何体,它会将其内容写入该几何体的缓冲区。大概是这样的:
THREE.TubeBufferGeometry.overwrite(mesh.geometry, newPath, params)
(因为它们使用相同的参数
,所以旧几何体的缓冲区将足够大以存储新几何体。)
这样的事情可能吗?让
TubeBufferGeometry
为我计算顶点位置比手工计算要方便得多,但我只需要一种方法,让它在现有的缓冲区中计算顶点位置,而不是在每帧分配一个新的。三.js的几何体生成器用于一次性创建几何体。它们不打算在每帧中使用它们来设置网格结构的动画
这种方法通常是浪费的,即使没有分配新的缓冲区。你应该考虑将动画作为混合器中的变形目标动画。如果我只知道运行时的新路径,这种方法是如何浪费的?问题是应该避免CPU上每帧的任何顶点修改。这应该在顶点着色器中的GPU上完成(如变形目标动画)。我不知道变形目标对于您的用例是否足够灵活,但是您可以在CPU上修改每帧的值。实际的顶点位移仍然在GPU上完成。谢谢,这是有意义的。不幸的是,我认为我不能使用变形目标,因为在运行时指定的潜在路径太多,无法提前列出