Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox
EN CHANTIER
Cette page n'est pas terminée et est en cours d'écriture. Merci de votre patience.

Menu général

Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par Monsieur Spi, le 24 septembre 2010

Mode7 : Concept

Ce que nous essayons de faire c’est une application projective.

Nous avons d’un côté un monde virtuellement en trois dimensions dans lequel on balade une caméra.
Et de l’autre un écran de projection qui va afficher, ligne après ligne, le résultat de la projection.

C’est à dire le résultat des calculs de transformations appliqués au plan en deux dimensions pour qu’il s’affiche selon les paramètres de la caméra (position, hauteur, inclinaison, rotation, profondeur, etc...).
L’idée générale c’est de partir d’une image en deux dimensions, le plan, de lui appliquer des transformations et d’afficher le résultat pour chaque ligne représentant l’écran de projection.

Nous allons essayer de détailler quelques opérations possibles.

Déformations du plan

Ici chaque ligne du circuit de gauche correspond à une ligne du circuit de droite dont l’échelle à été modifiée pour donner l’impression de profondeur.

Ci-dessus le point rouge représente la caméra dans le plan.
La zone conique représente le champ de vision de la caméra.
Les flèches indiquent la déformation appliquée au plan.
La vue de droite est le résultat de la projection.

Pour passer de la vue de gauche à la vue de droite il faut passer par différentes transformations géométriques. Pour chaque ligne de l’écran à afficher dans la vue de droite on va calculer sa taille, sa position, et ce qu'elle est sensée représenter une fois prises en compte les diverses transformations appliquées au plan.

Rendons les choses encore plus claires.
Pour chaque ligne que nous voulons tracer à l'écran nous avons un calcul à effectuer.
Ce calcul correspond aux différentes transformations que nous souhaitons appliquer à partir de l'image de base (le plan).

Et ce qui va nous permettre d'effectuer ces calculs est le seul objet autre que le plan que nous connaissions, c'est la caméra.

Position de la caméra

La caméra est LE point de repère sur lequel repose tout votre édifice.
Rappelez-vous que l'on travaille exclusivement en deux dimensions.
Ce n'est pas la caméra qui bouge dans le décor, c'est le décor qui bouge autour de la caméra.

Il faut donc déterminer où se trouve supposément la caméra par rapport au plan si nous voulons savoir comment ce dernier doit se positionner. Pour cela on se sert des ses coordonnées (x1, y1, z1), ce point deviendra notre nouveau système de coordonnées pour effectuer les opérations suivantes.

Nous pouvons à présent positionner le plan dans notre nouveau système de coordonnées.

Orientation du plan

Nous avons placé le plan en fonction de la position supposée de notre caméra.
Maintenant il nous faut savoir dans quelle direction la caméra regarde.
Mais rappelez-vous que ce n'est pas la caméra qui bouge.
C'est donc le plan qui va subir une rotation en fonction de l'orientation de la caméra.

Mise à l'échelle

Le plan est positionné et orienté correctement, attaquons la perspective.
Nous effectuons ce même cycle d'opérations pour chaque ligne de l'image à tracer.
Si nous souhaitons un effet de perspective chaque ligne aura une échelle différente.
(Plus un objet est loin plus il semble petit.)
Nous reviendrons plus en détail sur cette opération dans la suite de ce dossier.

Tracer l'image

Nous avons tous les paramètres nécessaires pour tracer chaque ligne de l'écran.
Mais ce n'est pas encore suffisant pour obtenir une projection à peut près correcte.
Il manque encore une notion importante, le champs de visuel (Field Of View ou FOV).

Field Of View

Il reste donc un facteur important qui doit entrer en jeu à ce stade, le champs visuel. C’est lui qui détermine l’angle à laquelle une image est captée par un dispositif optique. Les humains ont par défaut un champ de vision de 90° à l’horizontale, dans les jeux vidéo on préfère utiliser un angle plus faible de 60° environ pour un meilleur résultat.

Il représente ce qui est visible en fonction de la distance.
Tout ce qui se trouve en dehors du champ visuel n'est pas visible.

Deux notions importantes lorsque vous allez commencer votre programme.

A retenir

La caméra ne bouge pas c'est le plan qui se modifie.
Chaque ligne de l'écran est le résultat de transformations appliquées au plan.

En Actionscript comme dans d’autres langages on utilise des matrices de transformation pour effectuer des opérations géométriques sur un bitmap.

Je vous recommande l'excellent tutorial de Lilive sur le sujet : http://ressources.mediabox.fr/tutoriaux/flashplatform/math_physique/matrix

Cette solution simplifie grandement les choses car la matrice applique le résultat des calculs pour vous. Vous trouverez cependant au bas de cette page les formules à connaître si jamais vous souhaitez appliquer ces transformations vous même.

A lire