pan
tilt
roll
Die Euler-Winkel der Entity, die die
Drehung um die Z, Y und X Achsen
beschreiben (in Grad 0..360). Durch Verändern dieser Werte lässt sich
eine Entity drehen.
Wertebereich:
pan: 0 .. 360
tilt: -90 .. +90
roll: 0 .. 360
Typ:
var; entity.pan kann
auch als ANGLE*-Vektor
an Funktionen übergeben werden.
Bemerkungen:
- Winkel werden in Grad (0 to 360) angegeben und entgegen
dem Uhrzeigersinn gezählt. Für Rotationen in drei Dimensionen
werden die sogenannte Euler-Winkel benutzt: pan ist
der horizontale Winkel (0..360) um die aufrecht stehende Z-Achse, tilt der vertikale Winkel (-90..+90) um die gedrehte Y-Achse und roll der
Winkel (0..360) um die gedrehte und "getiltete" X-Achse. Bei einem pan-Winkel,
sind 0 Grad gleichbedeutend mit der positiven Richtung der X-Achsen-Koordinate,
die in der Map nach Osten zeigt. 90 Grad sind Norden, 180 Grad Westen
und 270 Grad stehen für den Süden.
- Durch Verändern eines dieser Werte rotiert die Entity relativ zum
Weltkoordinatensystem. Dies führt zu
anderen Rotationen als wenn die Entity um ihre eigene Achse gedreht würde,
welche durch eine vorhergehende
Rotationen bereits 'schief' ausgerichtet sein kann. Um eine Entity
um ihre eigenen Achsen zu drehen, was oft bei Flug- oder Raumschiffsimulatoren
erforderlich
ist, benutzen Sie die ang_add oder ang_rotate Funktionen.
- Um derEntity eine bestimmte Richtung zu geben oder sie in Richtung auf
einen bestimmten Punkt im All hin zu drehen, benutzen Sie die vec_to_angle Funktion.
- Für Sprites haben Winkel eine besondere Bedeutung. Sind alle Winkel
auf Null, wird der Sprite aufrecht stehen und sich horizontal der Kamera
zuwenden. Ist sein pan- oder tilt-Winkel
ungleich Null, richtet sich der Sprite seinen Winkeln gemäß räumlich aus.
Sind sowohl pan als auch tilt 0, roll
aber ungleich null, steht der Sprite immer im rechten Winkel zur Kamera.
Dies ist für kugelförmige Objekte wie Feuerbälle oder Explosionen nützlich.
Um einen Winkel auf ungleich Null zu setzen, genügt es, ihm einen kleinen
Wert wie etwa 0.01 zu geben.
- Ein Überschreiten der gegebenen Winkelbereiche ist möglich.
Achten Sie aber auf Mehrdeutigkeiten bei der Entity-Orientierung, und auf
'Gimbal
Lock'
-Probleme. Wenn Sie nicht wissen, was es mit Mehrdeutigkeiten und Gimbal
Lock auf sich hat, überschreiten Sie die Bereiche besser nicht.
- Ändern Sie Entity-Winkel nicht mehr als einmal pro Frame. Dies würde
zu Problemen mit Zwischenrotationen führen,
da Euler-Winkel intern in eine Rotationsmatrix bzw. ein Quaternion
umgerechnet
werden.
Beispiele:
action rotator()
{
while(1)
{
my.pan += time_step;
wait(1);
}
}
Siehe auch:
ang_add, vec_rotate, vec_to_angle
► Aktuelle Version Online