Projizieren von dreidimensionalen Objekten auf eine Fläche

Flash Player 10 und höher, Adobe AIR 1.5 und höher

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:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375