/ Combinar animações em vez de mesclar? - three.js, gltf

Combine animações em vez de mesclar? - three.js, gltf

Eu estou importando animações em uma malha de umaglTF criado no Blender para THREE.js Eu tenho duas animações simultâneas que afetam a tradução de um osso. No Blender, essas traduções são somadas, mas em THREE.js elas são calculadas em média por peso.

Por exemplo, as animações são translate (2, 0, 0) e translate (4, 0, 0) Como faço para que o AnimationMixer resulte em (6, 0, 0) em vez de (3, 0, 0)?

Respostas:

0 para resposta № 1

Para minhas necessidades específicas, eu realmente só precisava dovalores do primeiro e último quadros (eles são todos os 3 animações de quadros com o segundo sendo valores padrão). Então eu puxo os valores das trilhas do quadro-chave e não uso o sistema de animação. // converte animações em valores conversão fuctionAnim (clips) {

    var anims = [];

for ( i = 0; i < clips.length; i ++ ){

anims[i] = {name: "name", bone: []};
anims[i].name = clips[i].name;

for ( j = 0; j < clips[i].tracks.length; j++ ){

var val = clips[i].tracks[j].values

if ( clips[i].tracks[j].name.indexOf( "position" ) > -1 ) {
anims[i].bone[j] = { name: "name", minTranslate: "min", maxTranslate: "max"};
anims[i].bone[j].name = clips[i].tracks[j].name;

anims[i].bone[j].minTranslate = new THREE.Vector3( val[0], val[1], val[3] );
anims[i].bone[j].maxTranslate = new THREE.Vector3( val[val.length - 3], val[val.length - 2], val[val.length - 1] );
}

else if ( clips[i].tracks[j].name.indexOf( "scale" ) > -1 ) {
anims[i].bone[j] = { name: "name", minSize: "min", maxSize: "max"};
anims[i].bone[j].name = clips[i].tracks[j].name;

anims[i].bone[j].minSize = new THREE.Vector3( val[0], val[1], val[2] );
anims[i].bone[j].maxSize = new THREE.Vector3( val[val.length - 3], val[val.length - 2], val[val.length - 1] );
}

else if ( clips[i].tracks[j].name.indexOf( "scale" ) > -1 ) {
anims[i].bone[j] = { name: "name", minRotation: "min", maxRotation: "max"};
anims[i].bone[j].name = clips[i].tracks[j].name;

anims[i].bone[j].minRotation = new THREE.Quaternion( val[0], val[1], val[2], val[3] );
anims[i].bone[j].maxRotation = new THREE.Quaternion( val[val.length -4], val[val.length - 3], val[val.length - 2], val[val.length - 1] );
}
}
}

return anims;

}