Как загрузить и управлять многими объектами threejs?

В настоящее время у меня проблема с присвоением имени объекту сетки перед его загрузкой. У меня есть код, как показано ниже, и имя объекта (а также позиция) всегда принимают значение последней модели в массиве.

У вас есть идеи, как это решить? Спасибо :)

for (var model in scenario_models)
{
    var id = model.id;
    var loader = new THREE.OBJMTLLoader();
    loader.load('/static/models/building_models/ZehYO2qAzU7wm6HfCeIVJC62EQQqW0wv8h4pa0TzhAtSm9qoL6/male02.obj',
        '/static/models/building_models/ZehYO2qAzU7wm6HfCeIVJC62EQQqW0wv8h4pa0TzhAtSm9qoL6/male02.mtl',
        function ( object )
    {
        object.name = model.id;
        object.position.x = model.x;
        object.position.y = model.y;
        object.position.z = model.z;
        scene.add( object );
    });
}

three.js loader
person DreamingFighter    schedule 03.02.2016    source источник


Ответы (1)


arrow_upward
0
arrow_downward

Простое для понимания решение, используйте промежуточную функцию:

for ( var model in scenario_models ) {

    var obj = 'obj/male02/male02.obj',
    mtl = 'obj/male02/male02_dds.mtl';

    load( obj, mtl, model );

}

function load( url, mtl, model ) {

    var loader = new THREE.OBJMTLLoader();

    loader.load( url, mtl, function ( object ) {
        object.name = model.id;
        object.position.x = model.x;
        object.position.y = model.y;
        object.position.z = model.z;
        scene.add( object );
     });
}

Или альтернативное решение с использованием закрытия:

for (var model in  scenario_models) {
    (function(x) {
      if (scenario_models.hasOwnProperty(x)) {
        var loader = new THREE.OBJMTLLoader();
        var obj = 'obj/male02/male02.obj',
        mtl = 'obj/male02/male02_dds.mtl';

        var model = scenario_models[x];

        loader.load( obj, mtl, function ( object ) {
            object.name = model.id;
            object.position.x = model.x;
            object.position.y = model.y;
            object.position.z = model.z;
            scene.add( object );
        });
      }
    })(model);
}

Протестировал оба с Threejs r73.

person Falk Thiele    schedule 03.02.2016