Fourniture 2 : Documentation
sur l'implémentation
La
classe Voxel
C'est la grosse classe du projet.
Elle hérite de la classe Applet, elle est Runnable et
c'est elle qui contient toutes les méthodes de calcul et d'affichage.
La description qui suit est celle de la version de base de la classe Voxel
(Voxel.java). Les version optimisés (Voxel2.java et Voxel3.java)
ont une structure similaire, à certains effets additionnels près
(l'effet Lens Flare, le brouillard et les reflets de vagues). Si les algorithmes
de calcul diffèrent, le rôle de chaque classe est le même.
Ses variables de classes sont les suivantes
:
-
pour le double buffering :
-
MemoryImageSource backBuffer
: le buffer d'image associé au tableau backBufferData qui permet
l'affichage de l'image à l'écran
-
int backBufferData[] : le tableau
d'entiers où seront écrites et stockées les couleurs
de tous les pixels du buffer
- les images utilisées :
-
ReadableImage heightMap : notre carte des
altitudes (à partir d'une image en niveaux de gris
-
ReadableImage texture : la texture appliquéesur
notre paysage (à partir d'une image en couleur, elle "colle" parfaitement
à la heightmap)
-
ReadableImage ombresNuages : l'ombre
des nuages appliquée (à partir d'une image en niveau de gris)
-
private ReadableImage nuages : la texture
des nuages (à partir d'une image en couleur)
-
pour les nuages
-
int altitudeNuages
-
double zoomNuages : coefficient
de zoom appliqué opur l'affichage des nuages
-
-
pour la mer
-
int niveauMer;
-
double vaguesX[], vaguesZ[]
: deux tableaux de décimaux où seront calculés les
variation des vagues à partir de fonctions trigonométriques
-
double houle : coefficient
d'amplitude de variation pour les vagues
-
parametres du rayon (principalement
pour les test)
-
boolean ombreNuages : faut-il
afficher l'ombre des nuages ?
-
private boolean ciel :
faut-il afficher un ciel ?
-
private boolean fog : faut-il
calculer l'effet de brouillard ?
-
private boolean reflexionEau
: faut-il afficher l'eau ?
-
private boolean flares
: faut-il afficher les lens flare ?
-
pour le Lens Flare
-
ReadableImage shine1, flare1,
flare5 : la forme des halos à "décalquer" sur notre paysage
(à partir d'images en niveau de gris)
-
double soleilRy, soleilRxz
: décrit l'orentation du soleil
-
puis en vrac :
-
boolean readyToRun : l'applet
n'est pas "runnée" avant l'initialisation
-
int dimX, dimY : les dimension
de notre fenêtre en nombre de pixels (on l'initialisera à
(320,320))
-
Camera camera : notre objet
caméra
-
int temps : variable de
temps qu'on incrémentera à chaque rafraichissement pour faire
bouger les vagues et l'ombre des nuages
Puis on a les méthodes suivantes :
-
void init(int X, int Y)
: initialise toutes les variables de classes (les paramètres X et
Y sont les valeurs d'initialisation de dimX et dimY)
-
double hypot(double X,
double Y) et int modulo(int n, int m) : deux méthodes de calculs
mathématiques simples
-
boolean estDansLeChampDeVision
: retourne true si le soleil est dans le champ de vision de la caméra
(pour les lens flare)
-
void paint(graphics g)
: lance la méthode de calcul de l'image, puis affiche l'image (alors
dans le buffer) à l'écran. Pendant l'initialisation la méthode
affiche un message d'attente. Le paramètre g est destiné
à désigner le Graphics de notre applet (this.getGraphics()).
-
void paintFlare(int x,
int y, int seuil, int lum, double coefJaune, ReadableImage flare) : calcule
la couleur des pixels d'un halo lumineux de l'effet de lentille à
partir de la méthode de calque décrite dans le
dossier de réalisation. Les paramètre sont :
-
x et y les coordonnées du halo lumineux
-
le seuil de blancheur à partir duquel
on applique le calque (voir shéma)
-
lum, l'intensité lumineuse du halo
(coefficient de blanchissement)
-
coefJaune : un coefficient donnant une teinte
jaune au halo
-
flare : la calque à appliquer
---------------------------------
Retour
au sommaire de cette page ---------------------------------
La
classe Camera
Elle contient toute les informations
et les méthodes nécessaires à la gestion de la caméra.
Les "informations", ce sont les attributs regroupés en quatre groupe
:
---------------------------------
Retour
au sommaire de cette page ---------------------------------
La
classe ReadableImage
Elle hérite de la classe
ImageIcon.
On
y ajoute simplement un attribut : un tableau d'entiers nommé
buffer[].
Le but de cette classe est de pouvoir
copier, stocker et lire les d'un fichier image .jpg ou .gif.
Les deux seules méthodes implémentés
sont :
-
public ReadableImage(string fileName) : un
constructeur qui recopie les pixel d'un fichier nommé fileName dans
le tableau buffer[}.
-
public void getBuffer() : retourne le tableau
buffer[].
---------------------------------
Retour
au sommaire de cette page ---------------------------------
Auteurs : Benjamin
POCHAT et Vincent PRAT(site
personnel)