3D-objecten projecteren op een 2D-weergave

Flash Player 10 of hoger, Adobe AIR 1.5 of hoger

De klasse PerspectiveProjection in het pakket flash.geom biedt een eenvoudige manier om rudimentair perspectief toe te passen bij het verplaatsen van weergaveobjecten in en 3D-ruimte.

Als u niet expliciet een perspectiefprojectie maakt voor de 3D-ruimte, gebruikt de 3D-engine een standaard PerspectiveProjection-object dat zich op het hoofdniveau bevindt en aan alle onderliggende items wordt doorgegeven.

De volgende drie eigenschappen leggen vast hoe een PerspectiveProjection-object de 3D-ruimte weergeeft:

  • fieldOfView

  • projectionCenter

  • focalLength

Als u de waarde van fieldOfView wijzigt, wordt automatisch de waarde van focalLength gewijzigd en andersom, omdat de eigenschappen onderling afhankelijk zijn.

De waarde van focalLength wordt bij een bepaalde waarde van fieldOfView berekend met de volgende formule:

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

Over het algemeen wordt de eigenschap fieldOfView alleen expliciet gewijzigd.

Gezichtsveld

Door de eigenschap fieldOfView van de klasse PerspectiveProjection te bewerken, kunt u een 3D-weergaveobject maken dat groter lijkt te worden als het dichterbij de kijker komt, en kleiner lijkt te worden als het verder weg van de kijker gaat.

Met de eigenschap fieldOfView legt u een hoek tussen 0 en 180 graden vast die de kracht van de perspectiefprojectie bepaalt. Hoe groter de waarde, des te sterker de vervorming die wordt toegepast op een weergaveobject dat wordt verplaatst langs de z-as. Een lage waarde van fieldOfView leidt tot zeer weinig schaling, waardoor objecten slechts een klein stukje terug lijken te bewegen in de ruimte. Een hoge waarde van fieldOfView leidt tot meer vervorming, waardoor de beweging groter lijkt. De maximumwaarde van 179,9999... graden resulteert in een extreem bolvormig lenseffect. De maximumwaarde van fieldOfView is 179,9999... en de minimumwaarde is 0,00001... Precies 0 en 180 zijn ongeldige waarden.

Projectiemiddelpunt

De eigenschap projectionCenter representeert het verdwijnpunt in de perspectiefprojectie. De eigenschap wordt toegepast als een verschuiving ten opzichte van het standaardregistratiepunt (0,0) in de linkerbovenhoek van het werkgebied.

Een object dat zich van de kijker af lijkt te verplaatsen, wordt scheefgetrokken in de richting van het verdwijnpunt en verdwijnt uiteindelijk. Stelt u zich een oneindig lange gang voor. Als u naar het einde van de gang kijkt, lijken de randen van de wanden samen te komen in een verdwijnpunt ver achter in de gang.

Als het verdwijnpunt zich in het middelpunt van het werkgebied bevindt, lijkt de gang te verdwijnen in een punt in het middelpunt. De standaardwaarde voor de eigenschap projectionCenter is het midden van het werkgebied. Als u bijvoorbeeld wilt dat elementen verschijnen aan de linkerzijde van het werkgebied en dat een 3D-gebied verschijnt aan de rechterzijde, stelt u projectionCenter in op een punt rechts van het werkgebied om dat punt het verdwijnpunt van het 3D-weergavegebied te maken.

Brandpuntsafstand

De eigenschap focalLength representeert de afstand tussen de oorsprong van het gezichtspunt (0,0,0) en de locatie van het weergaveobject op de z-as.

Een lange brandpuntsafstand is net als een telelens met een smalle weergave en gecomprimeerde afstanden tussen objecten. Een korte brandpuntsafstand is vergelijkbaar met een groothoeklens waarmee u een breed beeld en veel vervorming krijgt. Een gemiddelde brandpuntsafstand benadert wat het menselijk oog ziet.

De focalLength wordt meestal dynamisch opnieuw berekend tijdens perspectieftransformatie terwijl het weergaveobject beweegt, maar u kunt de brandpuntsafstand ook expliciet instellen.

Standaardwaarden voor perspectiefprojectie

Het standaard PerspectiveProjection-object op het hoofdniveau heeft de volgende waarden:

  • fieldOfView: 55

  • perspectiveCenter: stagewidth/2, stageHeight/2

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

Deze waarden wordt gebruikt als u niet een eigen PerspectiveProjection-object maakt.

U kunt een eigen PerspectiveProjection-object instantiëren om projectionCenter en fieldOfView zelf te wijzigen. In dit geval heeft het gemaakte nieuwe object de volgende standaardwaarden, gebaseerd op een werkgebied met een standaardgrootte van 500 x 500:

  • fieldOfView: 55

  • perspectiveCenter: 250,250

  • focalLength: 480.24554443359375