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:
|
|
|