Я прочитал пример загрузчика 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 );
}