Alexander Hein
Alexander Hein

Reputation: 990

Three.js - call JSON model multiple times

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

Answers (1)

hugohil
hugohil

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

Related Questions