J'essaye de comprendre comment convertir les quaternions de Collada (de Assimp) pour la rotation d'animation, de nouveau dans les rotations d'Euler pour FBX. Je suis sûr que c'est un algorithme simple, je ne peux pas trouver le bon ... tous ceux que j'essaie sont faux, qui sont habituellement appelés ToEulerXYZ. Peut-être parce que ces rotations sont X, puis Y, puis Z, au lieu de simultanées? Quelqu'un dans le savoir peut probablement aider facilement.Convertir le quaternion en Euler
Voici mes échantillons d'essai - J'introduis les angles d'euler, puis j'exporte la collada et obtiens le quaternion équivalent. Je voudrais faire le contraire (et de quaternion, euler euler). Notez, que je suis conscient n'aura pas toujours la même valeur, mais juste besoin de valeurs qui donnent la même rotation.
valeurs de l'échantillon: Euler X, Y, Z quaternion X, Y, Z, W
0,0,0-> 0,0,0,1
0.000000,0.000000, 45.000000-> 0,0,0.38268346,0.92387956
45,0,45-> 0,35355338, 0,14644660, 0.35355338,0.85355341
45,45,0 0,35355338, 0.35355338, -0.14644660,0.85355341
45,45,45-> 0.19134171,0.46193978,0.19134171,0.84462321
30,45,60-> 0.022260016,0.43967974,0.36042345,0.82236314
Si cette aide, Assimp génère quaternion cette façon (sous licence Assimp):
angle = 60 * float(AI_MATH_PI)/180.0f;
axis = aiVector3D(0.0f, 0.0f, 1.0f);
aiMatrix4x4::Rotation(angle, axis, rot);
res *= rot;
angle = 45 * float(AI_MATH_PI)/180.0f;
axis = aiVector3D(0.0f, 1.0f, 0.0f);
aiMatrix4x4::Rotation(angle, axis, rot);
res *= rot;
angle = 30 * float(AI_MATH_PI)/180.0f;
axis = aiVector3D(1.0f, 0.0f, 0.0f);
aiMatrix4x4::Rotation(angle, axis, rot);
res *= rot;
aiVector3D scale;
aiQuaternion rotation;
aiVector3D translation;
res.Decompose(scale, rotation, translation);
Vous avez compris un moyen - je me demande toujours si cela a à voir avec la légèreté ou quoi, serait bon de savoir pour le compte rendu. – antont