实时切换网格的几何形状three.js

时间:2013-06-19 22:35:51

标签: 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 );

在我的动画循环中的任何一点,我希望能够将球体换成圆环。这可能吗?如何将一个几何图形换成另一个几何图形?

4 个答案:

答案 0 :(得分:11)

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

替换几何图形的方法是从场景中删除网格,然后使用新几何图形和旧材质创建一个新网格,并将其添加回场景。这肯定会起作用:)

答案 1 :(得分:5)

切换几何形状可能成本很高。我只想根据你的情况将两者都添加到场景中并隐藏/显示。

答案 2 :(得分:0)

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

用法:

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

https://github.com/mrdoob/three.js/blob/dev/editor/js/commands/SetGeometryCommand.js

答案 3 :(得分:-2)

试着看一下:http://threejs.org/docs/58/#Reference/Objects/Mesh

特别是这种方法:

mesh.setGeometry(geometry)

以下是如何在渲染循环中执行此操作(无论何时要将球体交换为圆环,都要设置标记)

var flag;  
...
function render () {
    if (flag) {
        mesh.setGeometry(torusGeometry);
        flag = false;
    }
}
render();

如果你想来回翻转(在渲染循环内):

if (conditions) { 
    mesh.setGeometry(sphereGeometry);
}

if (condition) {
    mesh.setGeometry(torusGeometry);
}