Javascript 实时切换网格的几何体three.js

Javascript 实时切换网格的几何体three.js,javascript,geometry,three.js,webgl,Javascript,Geometry,Three.js,Webgl,我目前正在three.js中使用以下方法创建网格: sphereGeometry = new THREE.SphereGeometry( 1, 16,16 ); mesh = new THREE.Mesh( sphereGeometry, material ); 我还创建了一个圆环: torusGeometry = new THREE.TorusGeometry( 1, 0.42 ); 在动画循环中的任何一点,我都希望能够将球体换成圆环体。这可能吗?如何将一个几何体替换为另一个几何体?

我目前正在three.js中使用以下方法创建网格:

sphereGeometry  = new THREE.SphereGeometry( 1, 16,16 );
mesh = new THREE.Mesh( sphereGeometry, material );
我还创建了一个圆环:

torusGeometry   = new THREE.TorusGeometry( 1, 0.42 );
在动画循环中的任何一点,我都希望能够将球体换成圆环体。这可能吗?如何将一个几何体替换为另一个几何体?

请尝试查看以下内容:

尤其是这种方法:

mesh.setGeometry(geometry)
以下是如何在渲染循环中执行此操作(每当要将球体交换为圆环体时,都会设置标志)

如果要前后翻转(在渲染循环内):


切换几何图形可能代价高昂。我只需根据您的情况将它们添加到场景和隐藏/显示中。

在Three.js R59中,setGeometry和setMaterial再次从Three.Mesh中删除


要替换几何体,可以从场景中删除网格,并使用新几何体和旧材质创建新网格,然后将其添加回场景。这肯定会起作用:)

您可以使用
SetGeometryCommand
实时更改网格的几何图形

用法:

  editor.execute( new SetGeometryCommand( object, new THREE[ geometry.type ](
        radiusTop,
        radiusBottom,
        height,
        radialSegments,
        heightSegments,
        openEnded
    ) ) );

几何体切换成功了吗?这已经不起作用了。。。请参见下面的答案并接受+upvote如何有效地从场景中移除对象?Object3D.remove()对子数组进行线性扫描:如何隐藏几何体?@BartekKosa each有一个
.visible
属性。您可以实时将其设置为
false
true
if (conditions) { 
    mesh.setGeometry(sphereGeometry);
}

if (condition) {
    mesh.setGeometry(torusGeometry);
}
  editor.execute( new SetGeometryCommand( object, new THREE[ geometry.type ](
        radiusTop,
        radiusBottom,
        height,
        radialSegments,
        heightSegments,
        openEnded
    ) ) );