Projicera 3D-objekt i en 2D-vy

Flash Player 10 och senare, Adobe AIR 1.5 och senare

Med klassen PerspectiveProjection i flash.geom-paketet kan du på ett enkelt sätt få ett elementärt perspektiv för att flytta visningsobjekt i 3D-rymden.

Om du inte uttryckligen skapar en perspektivprojektion för 3D-rymden, använder 3D-motorn standard-PerspectiveProjection-objektet som finns i roten och det sprids till alla underordnade.

Följande tre egenskaper definierar hur ett PerspectiveProjection-objekt visas i 3D-rymden:

  • fieldOfView

  • projectionCenter

  • focalLength

Om du ändrar värdet på fieldOfView ändras värdet på focalLength automatiskt, och vice-versa, eftersom de är beroende av varandra.

Formeln som används för att beräkna focalLength med givet fieldOfView-värde är:

focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)

Vanligtvis ändrar du fieldOfView-egenskapen uttryckligen.

Synfält

Genom att manipulera egenskapen fieldOfView för klassen PerspectiveProjection kan du göra så att ett 3D-visningsobjekt som närmar sig betraktaren verkar vara större, och ett objekt som viker av från betraktaren verkar vara mindre.

Egenskapen fieldOfView anger en vinkel mellan 0 och 180 grader som bestämmer styrkan i perspektivprojektionen. Ju större värde, desto större förvrängning tillämpas på ett visningsobjekt som flyttas utmed z-axeln. Ett lågt fieldOfView-värde leder till en väldigt liten skalning och får det att verka som om objektet flyttar bara något bakåt i rymden. Ett högt fieldOfView-värde leder till större förvrängning och rörelsen verkar vara större. Det maximala värdet 179,9999... grader skapar en effekt av en extrem fisheye-lins. Det högsta värdet för fieldOfView är 179,9999... och det minsta värdet är 0,00001... 0 och 180 är otillåtna värden.

Projektionscentrum

Egenskapen projectionCenter representerar flyktpunkten i perspektivprojektionen. Den används som en förskjutning från standardregistreringspunkten (0,0) i scenens övre vänstra hörn.

När ett objekt verkar flyttas längre bort från vypunkten, skevas det mot flyktpunkten för att slutligen försvinna. Föreställ dig en oändligt lång sal. När du tittar nedåt salen, sammanstrålar väggarna till en slutpunkt längst ned i salen.

Om slutpunkten finns i mitten av scenen, försvinner salen mot en punkt i mitten. Standardvärdet för egenskapen projectionCenter är scenens mitt. Om du till exempel vill att elementen ska visas till vänster på scenen och en 3D-yta ska visas till höger, ställer du in projectionCenter på en punkt som pekar till höger på scenen så att den blir flyktpunkten i 3D-visningsområdet.

Brännvidd

Egenskapen focalLength representerar avståndet mellan vypunktens origo (0,0,0) och placeringen av visningsobjektet på z-axeln.

En lång brännvidd kan liknas vid ett teleobjektiv med en smal vy och komprimerade avstånd mellan objekten. En kort brännvidd kan liknas vid ett vidvinkelobjektiv, där du får en bred vy med stor förvrängning. En medellång brännvidd ger ungefär det som ses med det mänskliga ögat.

Egenskapen focalLength beräknas vanligtvis om dynamiskt under perspektivomformningen allt eftersom visningsobjektet flyttas, men du kan ställa in det uttryckligen.

Standardvärden för perspektivprojektion

Standardobjektet för PerspectiveProjection som skapas vid roten har följande värden:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

  • focalLength: stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )

Dessa värden används om du inte skapar ett eget PerspectiveProjection-objekt.

Du kan instansiera ett eget PerspectiveProjection-objekt om du tänker ändra projectionCenter och fieldOfView själv. I så fall är standardvärdena för det nya objektet följande, baserat på standardstorleken 500 x 500 för en scen:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375