Sie können zwei Quaternionen miteinander multiplizieren, um eine dritte Quaternion zu erhalten, die das Ergebnis der zwei Rotationen ist. Beachten Sie, dass die Quaternion-Multiplikation nicht kommutativ ist, was bedeutet, dass die Reihenfolge wichtig ist (wenn Sie dies einige Male in Ihrem Kopf tun, können Sie sehen, warum).
Sie können eine quaternion erzeugen, die sich um eine bestimmte Achse mit so etwas wie dies (entschuldigen Sie die Tatsache, dass es C++, nicht Java), die eine Drehung um einen bestimmten Winkel darstellt:
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();
}
So um das zu drehen B. x-Achse, können Sie eine Quaternion mit createFromAxisAngle(1, 0, 0, M_PI/2)
erstellen und sie mit der aktuellen Rotationsquaternion Ihres Modells multiplizieren.
Ich glaube, Sie brauchen ein bisschen weiter zu klären. Sie sagen, Sie können nur die Rotation einstellen ... Eine Quaternion dient dem gleichen Zweck wie eine Rotationsmatrix. Der Unterschied liegt darin, dass die Quaternion numerisch stabil ist, aber für die 3D-Geometrie teurer ist, aber für die Verkettung weniger teuer ist ... Sie werden typischerweise verwendet, wenn lange Rotationsreihen angewendet werden müssen und dann wieder in Rotation umgewandelt werden Matrizen vor der Anwendung. Bitte klären Sie, was Sie meinen, Antwort auf jeder Achse, vielleicht wollen Sie Quaternion -> drei Rotations-Matrix, wo jeder über eine Achse ist? – Quaternion