2009-05-22 18 views
5

In meiner 3D-Anwendung speichere ich die Position eines Objekts in einem Vektor und es dreht sich um den Ursprung in einer Quaternion. Ich muss das Objekt um einen Vektor mit beliebigem Ursprung drehen. Ich habe versucht, die Position - vectorOrigin und die Rotation in eine Matrix zu konvertieren, die Matrix zu rotieren und dann Position und Rotation als Vektor und Quaternion aus der resultierenden Matrix zu extrahieren. Die Position ist in Ordnung, aber die Rotation bleibt konstant (das Objekt rotiert um den gegebenen Vektor, aber immer in die gleiche Richtung).Wie wird ein Objekt mit Quaternionen um einen Punkt gedreht?

Ist meine Methode falsch oder habe ich einen Fehler?

Antwort

7

Ich bin nicht sicher, warum Sie erwarten, dass sich die Rotation ändert. Sie haben programmatische "Kreaturen", die den Ursprungspunkt, den Zielpunkt und eine Drehung darstellen. Das Berechnen des Zielpunkts basierend auf den anderen zwei "Kreaturen" sollte sie nicht beeinflussen.

Was ist mit der üblichen Vorgehensweise? Wenn Sie die Position (x, y, z) um den Punkt (a, b, c) drehen müssen, verschieben Sie die Position zunächst so, dass die Drehung um den Ursprung verläuft: Verwenden Sie (xa, yb, zc) als Position , rotiere wie üblich um den Ursprung herum, um die neue übersetzte Position zu erhalten (x'-a, y'-b, z'-c) und translate zurück und erhalte deine neue Position (x ', y', z ').

+0

Das habe ich gemacht. Das Objekt bewegt sich um einen Vektor mit beliebigem Ursprung, der jedoch immer in die gleiche Richtung zeigt. Ich sollte dem Ursprung des Vektors gegenüberstehen. Ich habe die Frage bearbeitet, um meinen Algorithmus zu verdeutlichen. – user17544

+0

Wenn ich richtig verstanden habe, müssen Sie eine weitere Rotation um einen Vektor parallel zu dem, den Sie erwähnten, hinzufügen, der aber durch das * Zentrum * des Objekts verläuft. –

+0

Sie haben Recht. Ich löste es, indem ich das Objekt um seine Mitte rotierte und dann die Position des Objekts um den gegebenen Vektor rotierte. – user17544

1

Ich bin nicht vertraut mit Quaternionen, und vielleicht ist das völlig offtopic, aber Sie können ein 3D-Objekt nicht um einen Punkt drehen, die Drehachse muss eine Linie sein.

+0

Nicht ganz vom Thema und ein guter Punkt ... –

+0

Messepunkt. Ich meinte, um einen Vektor mit beliebigem Ursprung zu rotieren. Ich habe die Frage bearbeitet. – user17544

Verwandte Themen