如何克隆Three.js中的object3d?

时间:2012-08-12 04:18:18

标签: webgl three.js

我想克隆一个用loader加载的模型,我在github上找到this issue,但解决方案不起作用。似乎Object3D发生了结构性变化。

如何在当前稳定版本的Three.js中克隆Object3D?

3 个答案:

答案 0 :(得分:25)

在这个新版本的three.js中,你有一个方法clone

例如,我使用国际象棋中的女王,我不得不重复多次:

// queen is a mesh
var newQueen = queen.clone();

// make sure to re position to be able to see the new queen!
newQueen.position.set(100,100,100); // or any other coordinates

它适用于任何网格。

我使用了three.js r61。

答案 1 :(得分:6)

实际上mrdoob的回答是你的答案......

加载程序输出用于创建网格的几何体。 您需要使用加载器创建的网格的几何和材质创建新网格。

for ( var i = 0; i < 10; i ++ ) {
    var mesh = new THREE.Mesh( loadedMesh.geometry, loadedMesh.material );
    mesh.position.set( i * 100, 0, 0 );
    scene.add( mesh );
}

你想克隆一个Mesh而不是一个Object3D,因为加载器的输出是一个Mesh。

答案 2 :(得分:1)

我找到了一个快速的解决方案(不是最有效的)

GLTFLoader在内部使用THREE.FileLoader()方法,该方法使您可以缓存文件。
为此,您需要在创建GLTFLoader

的实例之前添加此行
THREE.Cache.enabled = true;

然后,您可以多次加载相同的模型,但是只有第一次会花费更长的时间,例如:

THREE.Cache.enabled = true;

var loader = new GLTFLoader();

var deeplyClonedModels = [];

for( var i = 0; i < 10; i++ ){

   loader.load('foo.gltf', function ( gltf ) {

     deeplyClonedModels.push(gltf.scene);

  });

}