Grüße alle,OpenGL, World to Object Koordinatenmapping? (Inverse Matrix)
Wie im Bild zu sehen,
Ich habe ein Objekt mit dem Namen O (Satz von linestripes) .Seine Objekt-Koordinatensystem (x‘, y ', z'). I, drehen Sie dieses Objekt in meine OpenGL-Szene mit folgenden Code-Schnipsel übersetzen:
glPushMatrix();
glTranslatef(Oz, Oy,Oz);
glRotatef(rotationX , 1.0, 0.0, 0.0);
glRotatef(rotationY, 0.0, 1.0, 0.0);
glRotatef(rotationZ, 0.0, 0.0, 1.0);
contour->render();
glPopMatrix()
;
Ich habe einen Punkt genannt H, die (hx, hy, hz) Weltkoordinaten mit übersetzt
glPushMatrix();
glTranslatef(hx,hy,hz);
glPopMatrix();
Wenn ich richtig, (Oz, Oy, Oz) und (hx, hy, hz) sind Weltkoordinaten.
Nun, was ich will Todo ist die Position von H (hx, hy, hz) relativ zu O-Objekt-Koordinatensystem zu berechnen. (X ', y', z '); Wie ich verstanden habe, kann ich dies tun, indem Sie inverse Transformationen von Objekt O berechnen und sie auf Punkt H anwenden.
Irgendwelche Tipps zu diesem Thema? Gibt OpenGL irgendwelche Funktionen für die Inverse-Matrix-Berechnung? Wenn ich irgendwie umgekehrte Matrizen gefunden habe, wie ist die Reihenfolge ihrer Multiplikation?
Hinweis: Ich möchte "hammer" wie Werkzeug implementieren, wo ich an Punkt H eine Kugel mit Radius R zeichne. Benutzer kann diese Kugel verwenden, um das Objekt O wie ein Hammer zu zerhacken. Ich habe dies in 2D implementiert Ich kann den gleichen Algorithmus verwenden, wenn ich die Hammerposition relativ zu (x ', y', z ') berechnen kann
Vielen Dank im Voraus.
Wenn ich Ihre Frage verstehe, wäre es nicht einfach "{Ox - hx, Oy - hy, Oz - hz}" (dh 'glTranslatef (Ox - hx, Oy - hy, Oz - hz);') Wenn Sie bereits Ihre globalen Vektoren 'O' und' h' haben, ist es eine einfache Sache der Vektorsubtraktion, die Matrixmanipulation vollständig aus der Gleichung herauszulassen. Ihre ursprüngliche Lösung klingt übrigens korrekt. – MrGomez
hi, ich muss die ursprünglichen Objektkoordinaten des Objekts O ändern. Das heißt, ich muss Objektkoordinaten vergleichen, nicht Weltkoordinaten. –
Keine Sorge. Ein kurzer Refresher erinnerte mich daran, dass OpenGL keine universelle Matrixbibliothek zur Verfügung stellt. Sie müssen hierfür eine separate Bibliothek verwenden oder die Berechnung selbst durchführen (http://mathworld.wolfram.com/MatrixInverse.html). – MrGomez