Die
PerspectiveProjection
-Klasse im
flash.geom
-Paket bietet eine einfache Möglichkeit, beim Bewegen von Anzeigeobjekten durch den dreidimensionalen Raum eine rudimentäre Perspektive zu implementieren.
Wenn Sie für Ihren dreidimensionalen Raum nicht ausdrücklich eine perspektivische Projektion erstellen, verwendet die 3D-Engine ein Standard-PerspectiveProjection-Objekt, das im Stammelement angelegt wird und seine Eigenschaften an alle untergeordneten Elemente weitergibt.
Folgende drei Eigenschaften definieren, wie ein PerspectiveProjection-Objekt den dreidimensionalen Raum darstellt:
-
fieldOfView
-
projectionCenter
-
focalLength
Durch eine Änderung des
fieldOfView
-Wertes wird automatisch auch der Wert von
focalLength
geändert und umgekehrt, da die beiden Werte voneinander abhängig sind.
Die Formel zur Berechnung des
focalLength
-Wertes bei gegebenem
fieldOfView
-Wert lautet wie folgt:
focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)
Typischerweise würden Sie die
fieldOfView
-Eigenschaft explizit ändern.
Sichtfeld
Mit der
fieldOfView
-Eigenschaft der PerspectiveProjection-Klasse stellen Sie das Sichtfeld ein. Dadurch können Sie erreichen, dass ein dreidimensionales Anzeigeobjekt, das sich dem Betrachter nähert, größer erscheint und ein Objekt, das sich entfernt, kleiner.
In der
fieldOfView
-Eigenschaft können Sie einen Winkel
zwischen
0 und 180 Grad einstellen, der die Stärke der perspektivischen Projektion bestimmt. Je höher dieser Wert, desto stärker die Verzerrung eines entlang der z-Achse verschobenen Anzeigeobjekts. Bei einem niedrigen
fieldOfView
-Wert werden die Objekte nur wenig verkleinert und scheinen sich nur leicht in den Hintergrund zu bewegen. Bei einem hohen
fieldOfView
-Wert werden die Objekte stärker verzerrt und auch der Eindruck von Bewegung ist stärker. Bei einem Höchstwert von 179,9999... Grad ist das Ergebnis ein extremer Fischaugeneffekt. Der Höchstwert von
fieldOfView
beträgt 179,9999... , der Mindestwert 0,00001... Die Werte 0 und 180 sind unzulässig.
Projektionszentrum
Die
projectionCenter
-Eigenschaft repräsentiert das Projektionszentrum, d. h. den Fluchtpunkt in der perspektivischen Projektion. Der Fluchtpunkt wird als Abstand vom Standardregistrierungspunkt (0,0) definiert, der sich links oben auf der Bühne befindet.
Während sich ein Objekt weiter vom Betrachter wegzubewegen scheint, neigt es sich zum Fluchtpunkt hin und verschwindet schließlich. Stellen Sie sich eine unendlich lange Halle vor. Wenn Sie die Halle hinunterschauen, laufen die Kanten der Wände weit hinten in der Halle in einem Fluchtpunkt zusammen.
Befindet sich der Fluchtpunkt im Zentrum der Bühne, so verschwindet die Halle in einem Punkt in der Mitte. Der Standardwert für die
projectionCenter
-Eigenschaft ist die Bühnenmitte. Wenn Sie nun erreichen möchten, dass Elemente links in der Bühne erscheinen und ein dreidimensionaler Bereich rechts davon, setzen Sie
projectionCenter
auf einen Punkt rechts von der Bühne, um diesen zum Fluchtpunkt des 3D-Sichtbereichs zu machen.
Brennweite
Die
focalLength
-Eigenschaft repräsentiert die Brennweite, also den Abstand zwischen dem Standort des Betrachters (0,0,0) und der Position des Anzeigeobjekts auf seiner z-Achse.
Eine lange Brennweite ist wie ein Teleobjektiv mit Nahsicht und verkürzten Entfernungen zwischen den Objekten. Eine kurze Brennweite ist wie ein Weitwinkelobjektiv, mit dem Sie einen sehr breiten Sichtbereich bei starker Objektverzerrung erhalten. Eine mittlere Brennweite entspricht in etwa dem, was das menschliche Auge sehen kann.
Typischerweise wird die
focalLength
-Eigenschaft während der perspektivischen Transformation dynamisch neu berechnet, während sich das Anzeigeobjekt bewegt. Sie können den Wert aber auch explizit festlegen.
Standardwerte für die perspektivische Projektion
Das im Stammelement angelegte PerspectiveProjection-Standardobjekt besitzt die folgenden Werte:
-
fieldOfView: 55
-
perspectiveCenter: stagewidth/2, stageHeight/2
-
focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )
Diese Werte werden verwendet, wenn Sie nicht Ihr eigenes PerspectiveProjection-Objekt erstellen.
Sie können aber auch Ihr eigenes PerspectiveProjection-Objekt instanziieren und die Eigenschaften
projectionCenter
und
fieldOfView
selbst festlegen. In diesem Fall sind die Standardwerte des neu erstellten Objekts wie folgt, basierend auf einer Standardbühnengröße von 500 auf 500:
|
|
|