Кажется, я не могу клонировать модель FBX (FBX, загруженную с Mixamo ), сохраняя ключевые кадры анимации.
Попытка использовать несколько подходов, включая использование cloneFbx gist (включен в приведенный ниже пример);все безрезультатно.Даже размещение всей функции FBXLoader () внутри цикла не работает должным образом, поскольку анимация может выполняться только одной из моделей за один раз.
Эта проблема была частично решена здесь , но яне может «скопировать» последовательность анимации, как подсказывает ответ.
Кто-нибудь может указать, где я ошибаюсь?
Вот грубый пример одного из моих тестов:
Загрузка модели FXB и сохранение анимации:
var loader = new THREE.FBXLoader();
loader.load( 'models/Walking.fbx', function ( fbx ) {
clip = fbx.animations[ 0 ];
// createVehicle(fbx); // Works! Creates one animated model via FBX
// cloneFbx via: https://gist.github.com/kevincharm/bf12a2c673b43a3988f0f171a05794c1
for (var i = 0; i < 2; i++) {
const model = cloneFbx(fbx);
createVehicle(model);
}
});
Добавление микшеров и действий на основе сохраненного клипа, добавление модели в сцену:
function createVehicle(model){
model.mixer = new THREE.AnimationMixer( model );
mixers.push( model.mixer );
var action = model.mixer.clipAction( clip );
action.play();
model.traverse( function ( child ) {
if ( child.isMesh ) {
child.castShadow = true;
child.receiveShadow = true;
}
});
const x = Math.random() * groundSize - groundSize/2;
const z = Math.random() * groundSize - groundSize/2;
model.position.set(x, 0, z);
const vehicle = new Vehicle(model, x, z);
vehicles.push(vehicle);
scene.add( model );
}
Цикл анимации:
if ( mixers.length > 0 ) {
for ( var i = 0; i < mixers.length; i ++ ) {
mixers[ 0 ].update( clock.getDelta() );
}
}