Коллада никогда не определяется в живой () - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь загрузить модель коллады с помощью функции createObject и переместить мою колладу, изменив ее положение в функции animate ().

Я пытался объявить var mario, а затем вызвать init (); и оживить () ;. В init (); Я вызываю функцию createObject и в animate изменяю ее положение, но объект никогда не определяется, поскольку в моем if ничего не происходит (mario! == undefined).

var mario;
init();
animate();

В init ():

createObject(mario,"dae/mario.dae",50,50,50,0,-28,0,0,0);

В анимации ():

requestAnimationFrame( animate );
if ( mario !== undefined ) {
    console.log("working!");
mario.position.z += 1;
}
render();
stats.update();

Моя функция createObject ():

function createObject(object,src,size1, size2, size3, posX,posY, posZ, rotation,audio){         
            // loading manager
            var loadingManager = new THREE.LoadingManager(function(){
                scene.add( object );
            });
            // collada
            var loader = new THREE.ColladaLoader( loadingManager );
            loader.load( src, function ( collada ) {
                object = collada.scene;
                object.scale.set(size1,size2,size3); 
                object.position.x = posX;
                object.position.y = posY;
                object.position.z = posZ;
                object.rotation.z = rotation;
                object.traverse(function (child) {

                    if (child instanceof THREE.Mesh) {
                        child.castShadow = true;
                        child.receiveShadow = true;
                    }
                });
                if(audio)
                       object.add(audio);                  
            });                             
        }

Таким образом, объект загружен, но он не перемещается и console.log ничего не печатает. Может кто-то помочь мне, пожалуйста ?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Это работает, выполняя это в init ():

loader.load('dae/mario.dae', function ( collada ) {
                mario = collada.scene;
                setObject(mario,50,50,50,0,-28,0,0,0);
                scene.add( mario );
            } );

В моей функции setObject я просто устанавливаю размер, положение и т. Д.

Это то, что вы имеете в виду, используя одинаковый обратный вызов onLoad () для всех ваших файлов?

0 голосов
/ 05 января 2019

При назначении вашей модели параметру функции object не будет присвоено значение mario. Я предлагаю вам удалить первый аргумент вашей функции createObject() и присвоить collada.scene непосредственно глобальной переменной mario. Это тот же подход, что и в этом примере:

https://threejs.org/examples/webgl_loader_collada.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...