Projection d’objets 3D sur un affichage 2D

Flash Player 10 et les versions ultérieures, Adobe AIR 1.5 et les versions ultérieures

La classe PerspectiveProjection du package flash.geom facilite l’application d’une perspective rudimentaire lors du déplacement d’objets d’affichage dans l’espace 3D.

Si vous ne créez pas explicitement une projection de perspective pour votre espace 3D, le moteur 3D utilise un objet PerspectiveProjection par défaut, qui existe sur la racine et est propagé à tous ses enfants.

Les trois propriétés qui définissent le mode d’affichage de l’espace 3D par un objet PerspectiveProjection sont les suivantes :

  • fieldOfView

  • projectionCenter

  • focalLength

La modification de la valeur de fieldOfView entraîne automatiquement la modification de la valeur de focalLength , et inversement, car ces propriétés sont interdépendantes.

La formule permettant de calculer focalLength en fonction de la valeur de fieldOfView est la suivante :

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

En règle générale, vous modifiez explicitement la propriété fieldOfView .

Champ de vision

En manipulant la propriété fieldOfView de la classe PerspectiveProjection, vous pouvez faire en sorte qu’un objet d’affichage 3D semble s’agrandir ou diminuer selon qu’il se rapproche ou s’éloigne de l’observateur, respectivement.

La propriété fieldOfView définit un angle compris entre 0 et 180 degrés qui détermine la puissance de la projection de perspective. Plus la valeur est élevée, plus forte est la distorsion appliquée à un objet d’affichage qui se déplace sur son axe z. Une valeur fieldOfView basse entraîne une mise à l’échelle minimale et les objets ne semblent reculer que très légèrement. Une valeur élevéeentraîne une plus grande distorsion et une impression plus prononcée de mouvement. La valeur maximale, 179,9999... degrés, produit un effet d’objectif œil-de-poisson extrême. La valeur maximale de fieldOfView est 179,9999..., tandis que 0,00001... est sa valeur minimale. Les valeurs exactes de 0 et 180 sont illégales.

Centre de la projection

La propriété projectionCenter représente le point de fuite de la projection de perspective. Elle est appliquée comme décalage du point d’alignement par défaut (0,0) dans l’angle supérieur gauche de la scène.

A mesure qu’il semble s’éloigner de l’observateur, un objet s’incline vers le point de fuite et finit par disparaître. Imaginez un couloir extrêmement long. Lorsque vous regardez dans le couloir, les bords des murs convergent vers un point de fuite tout au fond.

Si le point de fuite se trouve au centre de la scène, le couloir disparaît vers un point central. La valeur par défaut de la propriété projectionCenter correspond au centre de la scène. Si, par exemple, vous souhaitez que des éléments apparaissent sur la gauche de la scène et une zone 3D sur la droite de la scène, définissez la propriété projectionCenter sur un point situé dans la partie droite de la scène pour en faire le point de fuite de votre zone d’affichage 3D.

Distance focale

La propriété focalLength représente la distance séparant l’origine du point de vue (0,0,0) de l’emplacement de l’objet d’affichage sur son axe z.

Une distance focale élevée est similaire à un téléobjectif : le champ de vision est étroit et les distances entre les objets compressées. Une distance focale courte s’assimile à un objectif à grand angle et se caractérise par un champ de vision large et une distorsion prononcée. Une distance focale moyenne correspond approximativement à ce que voit l’œil humain.

En règle générale, la propriété focalLength est recalculée dynamiquement pendant la transformation de perspective au fur et à mesure du déplacement de l’objet d’affichage, mais il est possible de la définir explicitement.

Valeurs par défaut de la projection de perspective

L’objet PerspectiveProjection par défaut créé sur la racine possède les valeurs suivantes :

  • fieldOfView : 55

  • perspectiveCenter : stagewidth/2, stageHeight/2

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

Ces valeurs sont appliquées si vous ne créez pas votre propre objet PerspectiveProjection.

Vous pouvez instancier votre propre objet PerspectiveProjection dans l’intention de modifier vous-même les propriétés projectionCenter et fieldOfView . Dans ce cas, les valeurs par défaut du nouvel objet sont les suivantes, en supposant que la scène mesure 500 sur 500 par défaut :

  • fieldOfView : 55

  • perspectiveCenter : 250,250

  • focalLength : 480.24554443359375