Dossier de conception



 

Les problèmes à résoudre
 
Le principal problème qui sera à résoudre reste la vitesse de rendu. En effet, ce type de moteur de représentation de paysage doit permettre une navigation en temps réel (application au jeu vidéo, au déplacement sur une carte géographique en temps réel). Nous auront ensuite à trouver des méthodes pour représenter les divers éléments et effets physiques (effets de lentille, eau, ciel, brouillard) de manière relativement réaliste. Enfin, il faudra effectuer des essais sur des méthodes d'optimisation et parvenir à une conclusion quand à leur utilité.
--------------------------------- Retour au sommaire de cette page ---------------------------------

 

Son architecture

 
Le problème donné va exiger de pouvoir lire des pixels précis dans une image ainsi que d'en écrire. Nous implémenterons donc une classe permettant ceci aisément étant donné que l'API java ne le permet pas proprement et directement. Il y aura aussi une classe Voxel héritant de la classe java.applet.Applet et qui sera chargée de dessiner le paysage. Enfin, nous implémenterons une classe Camera qui représentera la caméra et gérera les mouvements de celle-ci.


--------------------------------- Retour au sommaire de cette page ---------------------------------

Ses structures de données

Tout d'abord, comme citée précédemment, la classe ReadableImage permettra l'accès en lecture aux images, par l'intermédiaire d'un tableau d'entiers. La structure des informations de pixels retournée par les objets de type PixelGrabber est la suivante : un pixel est représenté par un entier 32 bits (un int en java) organisé comme suit : en partant des bits de poids faible jusqu'aux bits de poids fort : 8 bits pour le bleu, 8 bits pour le vert, 8 bits pour le rouge et 8 bits pour la composante alpha (utilisée pour la transparence notamment). Nous aurons donc une fonction int[] getBuffer() qui permettra la lecture des informations de l'image moyennant le calcul de l'adresse du pixel dans ce tableau par la formule :

Y*Largeur de l'image + X.

Ensuite, la classe Camera va nous permettre de stocker les informations nécessaires à la représentation de cet objet (distances limites de vision, position et vitesse, angle de vue). Une fonction void update() permettra de modifier la position de la caméra en fonction de sa vitesse.

Enfin, le coeur du programme, la classe Voxel héritera de la classe Applet et implémentera l'interface Runnable. Nous stockerons ici toutes les informations nécessaires au calcul du paysage (options de rendu, textures, ...). La méthode void calulerImage() se chargera de lancer un rayon dans chaque colonne de pixels ainsi que de superposer les éventuels effets supplémentaires tel que l'effet de lentille. Nous aurons aussi une fonction void lancerRayon(...) qui se chargera de lancer le rayon le long d'une colonne de pixels et de remplir celle-ci avec les informations correspondantes. Et finalement une fonction void lancerReflet(...) qui sera appelée par lancerRayon(...) afin de remplir le pixel avec la couleur correspondant à celle du reflet dans l'eau.


 
--------------------------------- Retour au sommaire de cette page ---------------------------------

 



Auteurs : Benjamin POCHAT et Vincent PRAT(site personnel)