#animation #model #three.js #fbx
#Анимация #Модель #three.js #fbx
Вопрос:
Я прочитал пример загрузчика FBX и заставил анимацию работать. Но, по-видимому, модель FBX импортирует модель с помощью PhongMaterials по умолчанию. Проблема в том, что мне нужно, чтобы это был базовый материал (такой же, как «неосвещенный» в unity). Когда я пытаюсь создать новый материал THREE.MeshBasicMaterial и использую функцию copy () для передачи данных из исходного материала в нужный, я получаю несколько ошибок, подобных этому скриншоту.
Если я просто создам новый 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 );
}
Комментарии:
1. Попробуйте настроить
skinning: true
для новых материалов.2. Ага. Это было все. Но почему копирование не будет работать? Автоматическое сохранение таких вещей, как ID и name, было бы довольно удобно.
3. Какие ошибки приводит к использованию скопированного нового материала?
4. Это в ссылке imgur в исходном сообщении