C ++ / openGL: Ein QUAD mit Quaternionen zu einem Punkt rotieren

9

Wenn ich ein QUAD an einer bestimmten Position habe, wie kann ich es so drehen, dass es normal auf einen bestimmten Punkt zeigt? Stellen Sie sich vor, die farbigen Blöcke sind nur rechteckige Quads, dann zeigt dieses Bild ein bisschen was ich meine. Die Quads sind alle so ausgerichtet, dass sie auf das Zentrum der Kugel zeigen.

alt text http://emrahgunduz.com/wp-content/uploads/2009 /01/material_id_gui-600x364.jpg

Vielleicht zeigt dieses zweite Bild ein bisschen mehr, was ich versuche zu tun: alt text http://img689.imageshack.us/img689/3130/screenshot20100708at555.png

Ich benutze openGL / C ++ (und die Eigen-lib). Und ich habe diesen Code, um ein einfaches Quad zu zeichnen:

%Vor%

Update 17-07 Lieber Leser,

Nur ein bisschen weiter mit dem Drehen der Quads. Ich positioniere ein paar Quads nach dem Zufallsprinzip und dann rotiere ich sie zu einem look_at vector3f mit diesem Code anhand der Beschreibungen aus den Antworten:

%Vor%

Das Ergebnis sieht folgendermaßen aus: alt text http://img688.imageshack.us/img688/711/3drotatedquads.png

Wie Sie sehen können, bin ich fast da, obwohl die Rotation der Quads noch ein bisschen "seltsam" ist. Ich sehe das Bild unten mit den farbigen Quads, Sie sehen deutlich den Unterschied in der Rotation. Wie kann ich das Quad so drehen, dass ich das gleiche Ergebnis wie die darunter liegende farbige Kugel bekomme?

    
pollux 08.07.2010, 13:21
quelle

3 Antworten

1

Rotationsachse = normalisieren (Kreuzprodukt (aktuellNormal, gewünschtNormal))

Rotationswinkel = acos (dotproduct (normalize (currentNormal), normalize (sinedNormal)).

Sie können entweder Rotationsmatrix oder Quaternion aus Achse und Winkel erstellen. Exakte Formel kann in jeder Ressource über Quaternionen gefunden werden.

Möglicherweise müssen Sie den Winkel oder die Achse spiegeln, je nachdem, ob Sie sich normal um die Basis oder um die Spitze herum drehen.

Auch DIESE Ressource scheint im Allgemeinen genug Informationen über Quaternionen, Rotationen und 3D-Raum zu haben.

    
SigTerm 08.07.2010, 16:06
quelle
2

Sie haben das vielleicht bereits gefunden - Ссылка - aber ich fand es nützlich, als ich das letzte Mal nachgesehen habe dieses Thema.

    
Michael Repucci 08.07.2010 13:54
quelle
0

Wenn "an einer bestimmten Position" bedeutet, dass Sie Ihre aktuelle Norm kennen, dann ist hier die Sache:

  1. Dot Produkt einer alten und neuen Normalen ist ein Kosinus eines Winkels zwischen ihnen.
  2. Ihr Kreuzprodukt ist eine Achse, um die Sie die gewünschte Rotation durchführen sollten
  3. Die Konstruktion der Rotationsquaternion von gegebener Achse und Winkel ist gut dokumentiert und grundlegende Eigenschaft.
  4. Das Drehen des Quads selbst ist schwierig und hängt davon ab, wie genau es gedreht werden soll.
Dark 08.07.2010 16:11
quelle