我有一个问题,我加载这样的模型:
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5); });
并像这样使用它:
function addMorphTree(geometry,material,scale){
mat=new THREE.MeshFaceMaterial( material );
mat.side=THREE.DoubleSide;
Tree = new THREE.Mesh( geometry,mat);
Tree.scale.set(scale,scale,scale);
//Tree.position.set(x,y,z);
Tree.rotation.x = Math.PI/2;
//scene.add( Tree );
return Tree;}
我的问题是如何使用此变量创建模型的副本而不是每次都加载它?当我尝试使用
时scene.add(Beech);
在装载机外部,模型没有显示出来。我已经看到了其他类似的问题,但所有答案都在装载机内部使用scene.add。
答案 0 :(得分:0)
目前我无法发表评论,但我花了半分钟时间才找到相关信息:
How to clone collada model in threejs?
https://github.com/mrdoob/three.js/issues/1363
我不想将这里的信息复制为其他人的努力,归功于他们......
原理相同
答案 1 :(得分:0)
我认为当你尝试将它添加到加载器之外时,模型没有出现在场景中的原因是因为加载是异步完成的。这意味着,在加载器加载时,其余代码将运行。因此,如果您尝试在加载功能之后直接将“Beech”添加到场景中,它将无法完成加载。
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5); });
scene.add(Beech); // <-- this will run before the function above is finished,
//thereby adding a undefined variable to the scene.
如果您想要多个变量实例,也许您可以尝试使用clone()函数。由于Beech是Mesh对象,Mesh继承自Object3D,因此它也可以使用Object3D成员函数。
var Beech;
var loader = new THREE.JSONLoader();
loader.load( "./models/trees/Beech/Beech.json", function( geometry, materials ) {
Beech = addMorphTree(geometry,materials,0.5);
for(var i=0;i<5;i++){
scene.add(Beech.clone()) //creates 5 trees
}
});