Puede multiplicar dos cuaterniones para producir un tercer cuaternión que es el resultado de las dos rotaciones. Tenga en cuenta que la multiplicación del cuaternión no es conmutativa, lo que significa que el orden importa (si hace esto en su cabeza varias veces, puede ver por qué).
Puede producir un cuaternión que representa una rotación en un ángulo dado en torno a un eje determinado con algo como esto (excusa el hecho de que es C++, no 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();
}
Así que para girar alrededor del eje x, por ejemplo, puede crear un cuaternión con createFromAxisAngle(1, 0, 0, M_PI/2)
y multiplicarlo por el cuaternión de rotación actual de su modelo.
creo que es necesario aclarar un poco más lejos. Usted dice que solo puede establecer la rotación ... Un cuaternión tiene el mismo propósito que una matriz de rotación. La diferencia es que el cuaternión es numéricamente estable, son más caros de aplicar a la geometría 3D pero son menos costosos para la concatenación ... Por lo tanto, se usan normalmente cuando se deben aplicar series largas de rotaciones y luego se vuelven a transformar en rotación matrices antes de la aplicación. Por favor, aclare lo que quiere decir con respuesta en cada eje, tal vez desee cuaternión -> tres matriz de rotación donde cada uno tiene más o menos un eje. – Quaternion