Vous pouvez multiplier deux quaternions ensemble pour produire un troisième quaternion résultant des deux rotations. Notez que la multiplication du quaternion n'est pas commutative, ce qui signifie que l'ordre est important (si vous le faites plusieurs fois dans votre tête, vous pouvez voir pourquoi).
Vous pouvez produire un quaternion qui représente une rotation d'un angle donné autour d'un axe particulier avec quelque chose comme ceci (excusez le fait qu'il est C++, pas java):
Quaternion Quaternion::create_from_axis_angle(const double &xx, const double &yy, const double &zz, const double &a)
{
// Here we calculate the sin(theta/2) once for optimization
double factor = sin(a/2.0);
// Calculate the x, y and z of the quaternion
double x = xx * factor;
double y = yy * factor;
double z = zz * factor;
// Calcualte the w value by cos(theta/2)
double w = cos(a/2.0);
return Quaternion(x, y, z, w).normalize();
}
Donc, pour tourner autour de la Axe x par exemple, vous pouvez créer un quaternion avec createFromAxisAngle(1, 0, 0, M_PI/2)
et le multiplier par le quaternion de rotation actuel de votre modèle.
Je pense que vous avez besoin de clarifier un peu plus loin. Vous dites que vous ne pouvez définir que la rotation ... Un quaternion sert le même but qu'une matrice de rotation. La différence étant que le quaternion est numériquement stable, ils sont plus chers à appliquer à la géométrie 3D mais sont moins coûteux pour la concaténation ... Ils sont donc typiquement utilisés quand de longues séries de rotations doivent être appliquées et ensuite ils sont transformés en rotation matrices avant l'application. S'il vous plaît clarifier ce que vous entendez par réponse sur chaque axe, peut-être vous voulez quaternion -> trois matrice de rotation où chacun est d'environ un axe? – Quaternion