Texture 2D en PGC++
Loi_de_probabilite enum Choix_d_une_loi_de_probabilite {Uniforme, Exponentielle, Normale, Weibull, Discrete}; class Loi_de_probabilite { /* Spécification fonctionnelle de la classe "Loi_de_probabilite" */ private: enum Choix_d_une_loi_de_probabilite Loi; float Premier_parametre, Deuxieme_parametre; float * Tableau_de_la_loi_normale; struct Loi_discrete int Nb_de_valeurs; float * valeurs; float * probabilites; } Parametres_de_la_loi_discrete;
Loi_de_probabilite public: Loi_de_probabilite(Choix_d_une_loi_de_probabilite Loi); /* Permet de créer une nouvelle loi de probabilité. Pré - Nil. Post - Le choix d'une loi de probabilité a été faite.*/ void Fixer_un_parametre_de_la_loi(float Parametre, int i); /* Permet de fixer le ième paramètre de la loi autre que la loi discrète. Pré - La loi de probabilité a été créée. Post - Le ième paramètre de la loi a été créé. */
Loi_de_probabilite void Fixer_les_parametres_de_la_loi_discrete (int Nombre_de_valeurs, float Valeurs[], float Probabilites[]); /* Permet de fixer les paramètres de la loi discrète. Pré - La loi de probabilité discrète a été créée. La somme des probabilités du paramètre 3 est 1. Les valeurs possibles du paramètre 2 sont distinctes et représentées en ordre croissant. Paramètre 1 : désigne le # de valeurs possibles que peut prendre la variable aléatoire, Paramètre 2 : les valeurs possibles que peut prendre la variable aléatoire, Paramètre 3 : la probabilité que la variable aléatoire prenne la valeur correspondante au paramètre 2. */
Loi_de_probabilite float Generer_une_valeur_pseudo_aleatoire(); /* Permet de générer une valeur pseudo-aléatoire selon la loi de probabilité choisie. Pré - La loi de probabilité est choisie. Post - Une valeur pseudo-aléatoire est générée selon la loi de probabilité choisie. */ };
Palette_de_couleurs Palette_de_couleurs(int Nombre_de_couleurs); Permet de créer une palette de "Nombre_de_couleurs" couleurs et d'initialiser chaque couleur à noire (0, 0, 0). Palette_de_couleurs(Couleur_RVB C1, Couleur_RVB C2, int Nombre_de_couleurs); RVB de la forme : C1 + i*(C2-C1) / (Nombre_de_couleurs - 1), i = 0, 1, 2, ..., Nombre_de_couleurs - 1. Palette_de_couleurs(Palette_de_couleurs & P); Permet de créer une nouvelle palette et de l'initialiser à P. Palette_de_couleurs & operator = (Palette_de_couleurs & P); Permet d'affecter P à la palette courante.
Palette_de_couleurs int Longueur_de_la_palette(); Détermine le nombre de couleurs de la palette. Couleur_RVB & operator[](int i); Permet d'accéder ou de modifier la i ième couleur de la palette. Palette_de_couleurs Degrade(float t, Couleur_RVB C); Retourne une palette avec le même nombre de couleurs que la palette courante où la i ième couleur est obtenue comme suit : (1 – t) * i ième couleur de la palette courante + t * C. friend Palette_de_couleurs Juxtaposition ( Palette_de_couleurs & P1, Palette_de_couleurs & P2); Permet de construire une nouvelle palette obtenue en juxtaposant P1 avec P2. La longueur de la nouvelle palette est la somme des longueurs de P1 et P2. friend void Afficher(Palette_de_couleurs & P); Permet d'afficher la palette de couleurs P sans tenir compte du caractère opaque.
Texture_2D enum mode_de_parcours {balayage_horizontal = 0, aleatoire}; class Texture_2D { /* Spécification fonctionnelle de la classe "Texture_2D" Composantes : Un objet de "Couleur_RVB". Structure: Il s'agit d'un tableau à deux dimensions de couleurs.*/ private: int m; int n; /* Un tableau m x n de couleurs. */ Couleur_RVB * Tableau_de_couleurs;
Texture_2D public: Texture_2D(int u, int v); /* Permet de créer un tableau u x v de couleurs RVB. Le tableau est complètement noir. Pré - u > 0, v > 0. Post - Une texture de couleur noire est créée. */ Texture_2D( int u, int v, Palette_de_couleurs P, Loi_de_probabilite L); Chaque couleur du tableau de texture issue de la palette P est générée aléatoirement d'après la loi discrète L. */
Texture_2D Texture_2D( int u, int v, Palette_de_couleurs P, Probabilites_conjointes Q, enum mode_de_parcours M); /* Permet de créer un tableau de couleurs RVB de dimension u x v. Chaque couleur du tableau de texture issue de la palette P est générée aléatoirement d'après la matrice de probabilités conjointes Q. L'ordre avec lequel les couleurs sont générées sur la texture 2D est défini à l'aide de M. */ Couleur_RVB & operator()(int i, int j); /* Permet d'accéder ou de remplacer la couleur en position (i, j) du tableau de texture.
Texture_2D friend void Afficher(Texture_2D & T); /* Permet d'afficher à l'écran une texture à partir de la position courante. };
Maillage_triangulaire Maillage_triangulaire & Fractale (float Facteur_de_rugosite, int Niveau_de_recurrence, float Variance); Transforme le maillage courant en un maillage plus fin en se basant sur la théorie fractale. À chaque niveau de récurrence i allant de 1 à Niveau_de_recurrence, il s'agit de considérer le point-milieu P de chaque triangle dont les sommets sont P1, P2 et P3 et les normales N1, N2 et N3 : P = (P1 + P2 + P3) / 3 puis, de calculer la normale N au plan du triangle : N = (P2 - P1) x (P3 - P2) et de calculer le point Q = P + r N, où r suit une loi normale de moyenne 0 - Facteur_de_rugosite * i et de variance Variance * 2 .
Maillage_triangulaire Le triangle P1, P2 et P3 du maillage est remplacé par les trois triangles suivants : le triangle P1, P2 et Q, le triangle P2, P3 et Q, et, finalement, le triangle P3, P1 et Q. Les normales aux sommets P1, P2 et P3 demeurent les mêmes i.e. N1, N2 et N3. Par contre, la normale au sommet Q est (N1 + N2 + N3) / 3.