2012-04-04 8 views
0

Ich habe ein Objekt, das entlang eines 3D-Vektors in Bezug auf X, Y, Z verfährt ... Ich muss das Objekt entsprechend jeder Achse drehen (x- Achse, Y-Achse und Z-Achse).OpenGL-Richtung eines Vektors in Grad (X, Y, Z)

Wie bekomme ich diese Messungen in Grad ausgedrückt?

(I OpenGL verwenden und nur weiß von glRotatef(...)) [glRotatef (...) Dokumentation here] Mit Blick auf this Frage, gibt die Antwort

viewvector = <x, y, z>

r = sqrt (x² + y² + z²)

phi = arctan2 (y, x)

theta = arccos (z/r)

aber von this wiki Seite Ich verstehe, dass:

[Bearbeiten von Ignacio Vazquez-Abrams]

phi => Winkel um die Z-Achse

theta => Winkel zwischen x/y plane

aber wie finde ich Y? oder muss ich?

Die eigentliche Frage ist, wie stelle ich dies in Bezug auf glRotatef(...)?

+0

Der dritte Winkel ist beliebig, da er die Fahrtrichtung nicht beeinflusst. Sie benötigen eine weitere Einschränkung, wenn Sie einen bestimmten Wert erzwingen möchten. –

+0

Also, wenn ich es richtig verstehen soll, 'glRotatef (Theta, 1.0, 1.0, 0.0)' und 'glRotatef (phi, 0.0, 0.0, 1.0)' funktioniert? – Wallter

+0

glRotatef (phi, 0,0,1); glRotatef (Theta, 1,0,0); –

Antwort

1

Theta ist der Winkel über der XY-Ebene. Phi ist der Winkel um die Z-Achse. Im Allgemeinen haben Polarkoordinaten in n Dimensionen n-1 Winkelkomponenten und 1 Radiuskomponente.

+0

danke für die Klärung - wie bekomme ich es nun mit glRotatef (...) zu drehen? – Wallter

+0

Zuerst können Sie aufhören, sich Gedanken über Theta und Phi zu machen, denn 'glRotate *()' nimmt den Vektor, nicht die Winkel. Wie für die Rolle, das müssen Sie selbst bestimmen. –