Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更换管缓冲几何体';使用新的TubeBuffer几何体替换内容,不进行分配_Javascript_Three.js - Fatal编程技术网

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上完成。谢谢,这是有意义的。不幸的是,我认为我不能使用变形目标,因为在运行时指定的潜在路径太多,无法提前列出