Reputation: 990
How do I load a JSON model once and add it to the scene multiple times?
Currently, I call the model twice. Maybe someone could give me a working example of what I'm trying to accomplish.
var loader = new THREE.JSONLoader();
loader.load( "models/model1.js", meshloader1("models/model1.js"));
loader.load( "models/model1.js", meshloader2("models/model1.js"));
function meshloader1(fileName){
return function(geometry){
mesh1 = new THREE.Mesh(geometry, material);
mesh1 .position.set( 0, 0, 0 );
mesh1 .scale.set( 1, 1, 1 );
scene.add(mesh1 );
}
}
function meshloader2(fileName){
return function(geometry){
mesh2 = new THREE.Mesh(geometry, material);
mesh2 .position.set( 0, 0, 0 );
mesh2 .scale.set( 1, 1, 1 );
scene.add(mesh2 );
}
}
Upvotes: 0
Views: 88
Reputation: 43
You could define a geometry
object outside your loader like this:
var loader = new THREE.JSONLoader();
var genericGeometry;
loader.load( "models/model1.js", meshloader("models/model1.js"));
function meshloader(fileName){
return function(geometry){
genericGeometry = geometry;
createMeshs();
}
}
// Since `loader.load()` method is async,
// you need to wrap this inside a function and call it when the geometry is actually loaded
function createMeshs(){
var mesh1 = new THREE.Mesh(genericGeometry, material);
mesh1.position.set( 0, 0, 0 );
mesh1.scale.set( 1, 1, 1 );
scene.add(mesh1);
var mesh2 = new THREE.Mesh(genericGeometry, material);
mesh2.position.set( 1, 1, 0 );
mesh2.scale.set( 1, 1, 1 );
scene.add(mesh2);
}
Upvotes: 1