/ / Kombinácia animácií namiesto zmesi? - three.js, gltf

Skombinujte animácie namiesto zmesi? - three.js, gltf

Importujem animácie na okách z kožeglTF vytvorený v Blender na THREE.js Mám dve simultánne animácie, ktoré ovplyvňujú preklad kosti. V prekladateľstve Blender sa tieto preklady spočítavajú, ale v TREJ.js sa priemerujú podľa hmotnosti.

Animácie sa napríklad prekladajú (2, 0, 0) a prekladajú (4, 0, 0) Ako môžem dostať AnimationMixer do výsledku (6, 0, 0) namiesto (3, 0, 0)?

odpovede:

0 pre odpoveď č. 1

Pre moje špecifické potreby som naozaj potrebovala len tohodnoty z prvého a posledného rámca (sú to všetky animácie s 3 rámcami, pričom druhá je predvolená hodnota), takže vytiahnu hodnoty z kľúčových snímok a vôbec nepoužijem animačný systém. // konvertuje animácie na hodnoty fuction convertAnim (klipy) {

    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;

}