Анимация Threejs FBX не будет работать после изменения материала объекта - PullRequest
0 голосов
/ 02 марта 2019

Я прочитал пример загрузчика FBX и получил анимацию для работы.Но модель FBX по умолчанию импортирует модель с PhongMaterials.Проблема в том, что мне нужно, чтобы это был BasicMaterial (такой же, как «неосвещенный» в единстве).Когда я пытаюсь создать новый THREE.MeshBasicMaterial и использовать функцию copy () для передачи данных из материала Phong в нужный файл, я получаю несколько ошибок, подобных этому снимку экрана.

https://imgur.com/a/H5mp1Sh

Если я просто создам новый MeshBasicMaterial, установите его цвет таким же, как у материала Phong, я не получу никаких ошибок, но анимация больше не будет воспроизводиться.

Вот мойкод:

function load_init( object ) {
    mixer = new THREE.AnimationMixer( object );

    object.traverse( function ( child ) {
        if ( child.isMesh ) {

            const oldMat = child.material;
            var newMat = new THREE.MeshBasicMaterial();

            if(oldMat.length == undefined)//only one material in the mesh
            {
                console.log(newMat.copy(oldMat));//it copies succesfuly

                //child.material = newMat; // gives errors

                child.material = new THREE.MeshBasicMaterial( {  
                color: oldMat.color,
                } );//materials are changed, but the animation wont play
                    //anymore
            }
            else//multiple materials
            {
                for(var i = 0; i < oldMat.length; i++)
                {
                    console.log(newMat.copy(oldMat[i]));//it copies succesfuly

                    //child.material[i] = newMat; // gives errors

                    child.material[i] = new THREE.MeshBasicMaterial( {  
                    color: oldMat[i].color,
                    } );//materials are changed, but the animation wont play
                        //anymore
                }
            }
        }
    } );

    var action = mixer.clipAction( object.animations[ 0 ] );
    action.play();
    scene.add( object );
} 
...