Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

Mesh Class Reference

Classe stockant le maillage du terrain a rendre. More...

#include <Mesh.h>

List of all members.

Public Member Functions

 Mesh (HeightMap *hm, Lac **lac, int nbLacs)
 Constructeur de la classe Mesh.
 Mesh (HeightMap *hm, unsigned int nbPatchX, unsigned int nbPatchY)
 Constructeur de la classe Mesh.
 ~Mesh ()
 Destructeur de la classe Mesh.
GLfloat * getVertices ()
 Accesseur pour le tableau de vertices du maillage.
unsigned getVertexCount ()
 Renvoie la taille du tableau de vertices.
unsigned int getPatchSize ()
 Renvoie la taille d'un patch du maillage.
unsigned int getNbPatchX ()
 Renvoie le nombre de patches du maillage selon X.
unsigned int getNbPatchY ()
 Renvoie le nombre de patches du maillage selon Y.
unsigned int getNbPatch ()
 Renvoie le nombre total de patches du maillage.
unsigned int getSizeX ()
 Renvoie la taille du maillage selon X.
unsigned int getSizeY ()
 Renvoie la taille du maillage selon Y.
void render ()
 Effectue le rendu du terrain avec variation de niveau de detail.
void renderHighDetail ()
 Fonction de rendu a niveau de detail eleve.
void init (HeightMap *hm, unsigned int nbPatchX, unsigned int nbPatchY, Lac **lac, int nbLacs)
 Fonction de construction du maillage.
void displayAABoundingBoxs (bool display)
 Change la modalite de rendu des boites englobantes.
void walk (point3 *pos, point3 newPos)
 Verifie si une position dans l'espace est correcte, et calcule une nouvelle position dans le cas contraire.

Static Public Member Functions

static float getGmLod ()
 Renvoie le niveau de detail du patch courant (variable de shader).
static float getGmLodX ()
 Renvoie le niveau de detail du patch voisin gauche (variable de shader).
static float getGmLodY ()
 Renvoie le niveau de detail du patch voisin haut (variable de shader).
static float getGmPatchSize ()
 Renvoie la taille de patch du maillage (variable de shader).

Private Member Functions

void computePatchSize (HeightMap *hm)
 Fonction de calcul de la taille de patch pour le maillage.
void computeMaxLOD ()
 Fonction de calcul du niveau de detail maximum.
void computeTilesPieces ()
 Fonction de calcul de triangulation du maillage.
void compileTilesPieces ()
 Fonction de chargement des donnees de triangulation en VBO.
void computeAABBs ()
 Fonction de calcul des boites englobantes orientees pour les patches du maillage.
void renderAABBBs ()
void computeOMaps ()
 pre-calcul ou charge les cartes d'occlusion (Occlusion Maps)
void computeGeomorphingVertices ()
 Calcul des informations de geomorphing.
void computeGeomorphingVertex (unsigned int i1, unsigned int i2, unsigned int lod)
 Effectue le calcul des informations de geomorphing pour un vertex donne.
void insertLakes (Lac **lac, int nbLacs)
 Insere les lacs dans le maillage en changeant l'elevation sur les zones considerees.
void saveOMaps (char *path, char *fname)
 Sauvegarde toutes les cartes d'occlusion dans un fichier pgm.
bool loadOMaps (char *path, char *fname)
 Charge toutes les cartes d'occlusion a partir d'un fichier pgm.
bool isVisible (unsigned int fromx, unsigned int fromy, float fromz, unsigned int tox, unsigned int toy)
 Teste si un patch est visible a partir du point de vu courrant.

Private Attributes

unsigned int patchSize
 Taille d'un patch (les patches sont supposes carres).
unsigned int nbPatchX
 Nombre de patches selon X.
unsigned int nbPatchY
 Nombre de patches selon Y.
unsigned int nbTotalPatchs
 Nombre total de patches dans le maillage.
unsigned int sizeX
 Taille du maillage affiche selon X.
unsigned int sizeY
 Taille du maillage affiche selon Y.
unsigned int hmSizeX
 Taille du maillage complet selon X.
unsigned int hmSizeY
 Taille du maillage complet selon Y.
bool displayAABBs
 Indique si le rendu des boites englobantes doit etre effectue.
GLuint verticesID
 Identifiant VBO du tableau de vertices du maillage.
GLuint normalsID
 Identifiant VBO du tableau de normales du maillage.
unsigned int vertexCount
 Nombre de coordonnees de vertices dans le maillage (nombre de vertices * 3).
GLfloat * meshVertices
 Tableau de vertices du maillage (De taille vertexCount).
GLfloat * meshNormals
 Tableau de normales du maillage (De taille vertexCount).
unsigned int maxLOD
 Valeur maximale de niveau de detail pour le maillage.
vector< LodDatalodsData
 Vecteur contenant les informations de triangulation du maillage a chaque niveau de detail.
float * lods
 Niveaux de detail de tous les patches du maillage lors du rendu.
int realDecal
AABoundingBoxAABBTab
 Tableau de boites englobantes de tous les patches du maillage.
OcclusionMapOMtab
 Tableau contenant les cartes d'occlusion de tous les patchs.
OMinitOMI
 Informations generales identique pour toutes les cartes d'occlusion.

Static Private Attributes

static float gmLod
 Niveau de detail du patch courant, pour le geomorphing.
static float gmLodX
 Niveau de detail du voisin gauche du patch courant, pour le geomorphing (variable de shader).
static float gmLodY
 Niveau de detail du voisin haut du patch courant, pour le geomorphing (variable de shader).
static float gmPatchSize
 Taille de patch, pour le geomorphing (variable de shader).

Classes

struct  LodData
 Structure conservant les informations de triangulation pour toutes les parties d'un patch, a un niveau de detail donne. More...
struct  TilePiece
 Structure conservant les informations de triangulation d'un morceau de patch pour un niveau de detail. More...


Detailed Description

Classe stockant le maillage du terrain a rendre.

Cette classe cree un maillage a partir d'une carte d'elevation, en effectuant toutes les operations de pretraitement necessaires :

Le rendu du terrain en lui meme est aussi fait dans cette classe, avec l'utilisation d'un frustum culling (grace aux boites englobantes). Toutes les donnees du maillage sont chargees dans la carte graphique grace a l'extension GL_ARB_vertex_buffer_object.


Constructor & Destructor Documentation

Mesh::Mesh HeightMap hm,
Lac **  lac,
int  nbLacs
 

Constructeur de la classe Mesh.

Parameters:
hm Heightmap utilisee pour construire le maillage du terrain.
lac Liste des lacs associes au terrain.
nbLacs Nombre de lacs associes au terrain.
Cree un maillage a partir d'une heightmap.

Mesh::Mesh HeightMap hm,
unsigned int  nbPatchX,
unsigned int  nbPatchY
 

Constructeur de la classe Mesh.

Parameters:
hm Heightmap utilisee pour construire le maillage du terrain.
nbPatchX Nombre souhaite de patches selon X.
nbPatchY Nombre souhaite de patches selon Y.
Cree un maillage a partir d'une heightmap. Deprecated **

Mesh::~Mesh  ) 
 

Destructeur de la classe Mesh.


Member Function Documentation

void Mesh::compileTilesPieces  )  [private]
 

Fonction de chargement des donnees de triangulation en VBO.

Charge toutes les donnees de triangulation dans la carte graphique grace a l'extension GL_ARB_vertex_buffer_object.

void Mesh::computeAABBs  )  [private]
 

Fonction de calcul des boites englobantes orientees pour les patches du maillage.

Calcule les boites englobantes orientees selon les axes pour tous les patches du maillage, ainsi que le centre de chaque boite englobante.

void Mesh::computeGeomorphingVertex unsigned int  i1,
unsigned int  i2,
unsigned int  lod
[private]
 

Effectue le calcul des informations de geomorphing pour un vertex donne.

Parameters:
i1 Index du premier vertex du cote d'un triangle.
i2 Index du deuxieme vertex du cote d'un triangle.
lod Niveau de detail calcule.
Effetue le calcul d'elevation du centre d'un cote de triangle entre les vertex d'index i1 et i2, au niveau de detail specifie.

void Mesh::computeGeomorphingVertices  )  [private]
 

Calcul des informations de geomorphing.

Effectue le calcul de toutes les informations de geomorphing a partir de la triangulation du maillage.

void Mesh::computeMaxLOD  )  [private]
 

Fonction de calcul du niveau de detail maximum.

La fonction calcule la taille maximum de niveau de detail possible en fonction de la taille de patch calculee pour le maillage.

void Mesh::computeOMaps  )  [private]
 

pre-calcul ou charge les cartes d'occlusion (Occlusion Maps)

Charge les cartes d'occlusion si possiblem sinon effectue le pre-calcul a partir des boites englobantes.

void Mesh::computePatchSize HeightMap hm  )  [private]
 

Fonction de calcul de la taille de patch pour le maillage.

Parameters:
hm Heightmap a partir de laquelle calculer la taille de patch.
Cette fonction calcule la meilleure taille possible de patch en fonction du nombre de patchs demandes.

void Mesh::computeTilesPieces  )  [private]
 

Fonction de calcul de triangulation du maillage.

Calcule pour tous les niveaux de detail possibles pour le maillage la triangulation des patches.

void Mesh::displayAABoundingBoxs bool  display  )  [inline]
 

Change la modalite de rendu des boites englobantes.

Active ou desactive le rendu des boites englobantes.

static float Mesh::getGmLod  )  [inline, static]
 

Renvoie le niveau de detail du patch courant (variable de shader).

Returns:
Niveau de detail du patch courant.

static float Mesh::getGmLodX  )  [inline, static]
 

Renvoie le niveau de detail du patch voisin gauche (variable de shader).

Returns:
Niveau de detail du patch voisin gauche.

static float Mesh::getGmLodY  )  [inline, static]
 

Renvoie le niveau de detail du patch voisin haut (variable de shader).

Returns:
Niveau de detail du patch voisin haut.

static float Mesh::getGmPatchSize  )  [inline, static]
 

Renvoie la taille de patch du maillage (variable de shader).

Returns:
Taille de patch dans le maillage..

unsigned int Mesh::getNbPatch  )  [inline]
 

Renvoie le nombre total de patches du maillage.

Returns:
Nombre total de patches du maillage.

unsigned int Mesh::getNbPatchX  )  [inline]
 

Renvoie le nombre de patches du maillage selon X.

Returns:
Nombre de patches du maillage selon X.

unsigned int Mesh::getNbPatchY  )  [inline]
 

Renvoie le nombre de patches du maillage selon Y.

Returns:
Nombre de patches du maillage selon Y.

unsigned int Mesh::getPatchSize  )  [inline]
 

Renvoie la taille d'un patch du maillage.

Returns:
Taille d'un patch du maillage en nombre de vertices.

unsigned int Mesh::getSizeX  )  [inline]
 

Renvoie la taille du maillage selon X.

Returns:
Taille du maillage selon X, en nombre de vertices.

unsigned int Mesh::getSizeY  )  [inline]
 

Renvoie la taille du maillage selon Y.

Returns:
Taille du maillage selon Y, en nombre de vertices.

unsigned Mesh::getVertexCount  )  [inline]
 

Renvoie la taille du tableau de vertices.

Returns:
Taille du tableau en nombre de coordonnees.

GLfloat* Mesh::getVertices  )  [inline]
 

Accesseur pour le tableau de vertices du maillage.

Returns:
Tableau de vertices du maillage.

void Mesh::init HeightMap hm,
unsigned int  nbPatchX,
unsigned int  nbPatchY,
Lac **  lac,
int  nbLacs
 

Fonction de construction du maillage.

Parameters:
hm Heightmap a partie de laquelle on cree le maillage.
nbPatchX Nombre de patches souhaites selon X.
nbPatchY Nombre de patches souhaites selon Y.
lac Lacs a inserer dans le maillage.
nbLacs Nombre de lacs a inserer dans le maillage.
Cette fonction est appelee par le constructeur et effectue toute la construction du maillage, et tous les pretraitements necessaires.

void Mesh::insertLakes Lac **  lac,
int  nbLacs
[private]
 

Insere les lacs dans le maillage en changeant l'elevation sur les zones considerees.

Parameters:
lac Liste des lacs a inserer sur le terrain.
nbLacs Nombre de lacs a inserer sur le terrain
Insere les lacs dans le terrain en descendant l'elevation des zones de terrain recouvertes par un lac pour ne pas avoir de conflit d'elevations entre les lacs et le terrain.

bool Mesh::isVisible unsigned int  fromx,
unsigned int  fromy,
float  fromz,
unsigned int  tox,
unsigned int  toy
[inline, private]
 

Teste si un patch est visible a partir du point de vu courrant.

Parameters:
fromx coordonnee x du patch au dessus du quel se trouve la camera
fromy coordonnee y du patch au dessus du quel se trouve la camera
fromz hauteur de la camera.
tox coordonnee x du patch dont on veut connaitre la visibilite
toy coordonnee y du patch dont on veut connaitre la visibilite
Returns:
Renvoie vrai si le patch de destination est visible, faux sinon.
Teste si un patch de coordonnees (tox,toy) est visible a partir d'un point de vu situe a une hauteur fromz au dessus du patch de coordonnees (fromx,fromy).

bool Mesh::loadOMaps char *  path,
char *  fname
[private]
 

Charge toutes les cartes d'occlusion a partir d'un fichier pgm.

Parameters:
path Chemin ou se trouve le fichier a charger.
fname Base du nom du fichier pgm qu'on desire charger, au quel on ajoutera les dimensions
Returns:
Renvoie vrai si le fichier est charge correctement, faux si le fichier ou le chemin sont errones.
Charge toutes les cartes d'occlusion a partir du fichier pgm, dont le nom et chemin sont suivant : path/fnam_dimx_x_dimy.pgm ou dimx et dimy sont le nombre de patch du terrain, en largeur et en longueur. renvoie false

void Mesh::render  ) 
 

Effectue le rendu du terrain avec variation de niveau de detail.

La fonction effectue le rendu du terrain avec variation de niveau de detail, geomorphing et shaders.

void Mesh::renderAABBBs  )  [private]
 

void Mesh::renderHighDetail  ) 
 

Fonction de rendu a niveau de detail eleve.

Cette fonction effectue le rendu du terrain au niveau de detail le plus eleve, pour effectuer les pre-passes pour les skybox de reflexion d'eau.

void Mesh::saveOMaps char *  path,
char *  fname
[private]
 

Sauvegarde toutes les cartes d'occlusion dans un fichier pgm.

Parameters:
path Chemin ou l'on souhaite sauvegarder le fichier.
fname Base du nom du fichier pgm au quel on ajoutera les dimensions lors de la sauvegarde
Sauvegarde toutes les cartes d'occlusion dans un fichier pgm, sous le nom et chemin suivant : path/fnam_dimx_x_dimy.pgm ou dimx et dimy sont le nombre de patch du terrain, en largeur et en longueur.

void Mesh::walk point3 *  pos,
point3  newPos
 

Verifie si une position dans l'espace est correcte, et calcule une nouvelle position dans le cas contraire.

Parameters:
pos La position voulue dont on cherche a savoir sa validite
newPos Cette nouvelle position est une position conforme remplie par la fonction walk(...)
Lorsque l'utilisateur va avancer dans une direction donnee, la position souhaitee est passee a la fonction walk (par la variable pos).

Cette fonction verifie que pos est correcte, ou bien la modifie le cas echeant : on regarde si les hauteurs autour de la nouvelle position coupent le plan de vue le plus proche (near), et on remonte cette position si c'est effectivement le cas.

Le resultat est stocke dans newPos et c'est cette nouvelle position qui sera utilisee.


Member Data Documentation

AABoundingBox* Mesh::AABBTab [private]
 

Tableau de boites englobantes de tous les patches du maillage.

bool Mesh::displayAABBs [private]
 

Indique si le rendu des boites englobantes doit etre effectue.

float Mesh::gmLod [static, private]
 

Niveau de detail du patch courant, pour le geomorphing.

float Mesh::gmLodX [static, private]
 

Niveau de detail du voisin gauche du patch courant, pour le geomorphing (variable de shader).

float Mesh::gmLodY [static, private]
 

Niveau de detail du voisin haut du patch courant, pour le geomorphing (variable de shader).

float Mesh::gmPatchSize [static, private]
 

Taille de patch, pour le geomorphing (variable de shader).

unsigned int Mesh::hmSizeX [private]
 

Taille du maillage complet selon X.

Cette taille est donnee en nombre de vertices. Le maillage peut etre tronque pour avoir une taille de patches en puissance de 2 avec le nombre de patches demandes. Dans ce cas cette variable indique la taille du maillage complet.

unsigned int Mesh::hmSizeY [private]
 

Taille du maillage complet selon Y.

Cette taille est donnee en nombre de vertices. Le maillage peut etre tronque pour avoir une taille de patches en puissance de 2 avec le nombre de patches demandes. Dans ce cas cette variable indique la taille du maillage complet.

float* Mesh::lods [private]
 

Niveaux de detail de tous les patches du maillage lors du rendu.

vector<LodData> Mesh::lodsData [private]
 

Vecteur contenant les informations de triangulation du maillage a chaque niveau de detail.

unsigned int Mesh::maxLOD [private]
 

Valeur maximale de niveau de detail pour le maillage.

GLfloat* Mesh::meshNormals [private]
 

Tableau de normales du maillage (De taille vertexCount).

Dans le tableau de normales, la premiere coordonnee contient l'elevation reelle du terrain au point, la troisieme coordonnee contient les valeurs moyennes calculees par le geomorphing sur les triangulations, et la deuxieme coordonnee contient le niveau de detail auquel a ete calcule la troisieme coordonnee.

GLfloat* Mesh::meshVertices [private]
 

Tableau de vertices du maillage (De taille vertexCount).

unsigned int Mesh::nbPatchX [private]
 

Nombre de patches selon X.

unsigned int Mesh::nbPatchY [private]
 

Nombre de patches selon Y.

unsigned int Mesh::nbTotalPatchs [private]
 

Nombre total de patches dans le maillage.

GLuint Mesh::normalsID [private]
 

Identifiant VBO du tableau de normales du maillage.

Le tableau de normales du maillage est stocke directement dans la carte graphique grace a l'extension GL_ARB_vertex_buffer_object. Cette variable indique l'identifiant de ce tableau pour y acceder et l'utiliser.

OMinit* Mesh::OMI [private]
 

Informations generales identique pour toutes les cartes d'occlusion.

OcclusionMap* Mesh::OMtab [private]
 

Tableau contenant les cartes d'occlusion de tous les patchs.

unsigned int Mesh::patchSize [private]
 

Taille d'un patch (les patches sont supposes carres).

La taille d'un patch doit obligatoirement etre une puissance de 2, pour que le decoupage en niveaux de detail soit fait correctement. La taille est donnee en nombre de vertices.

int Mesh::realDecal [private]
 

unsigned int Mesh::sizeX [private]
 

Taille du maillage affiche selon X.

Cette taille est donnee en nombre de vertices. Le maillage peut etre tronque pour avoir une taille de patches en puissance de 2 avec le nombre de patches demandes. Dans ce cas cette variable indique la taille du maillage tronque.

unsigned int Mesh::sizeY [private]
 

Taille du maillage affiche selon Y.

Cette taille est donnee en nombre de vertices. Le maillage peut etre tronque pour avoir une taille de patches en puissance de 2 avec le nombre de patches demandes. Dans ce cas cette variable indique la taille du maillage tronque.

unsigned int Mesh::vertexCount [private]
 

Nombre de coordonnees de vertices dans le maillage (nombre de vertices * 3).

GLuint Mesh::verticesID [private]
 

Identifiant VBO du tableau de vertices du maillage.

Le tableau de vertices du maillage est stocke directement dans la carte graphique grace a l'extension GL_ARB_vertex_buffer_object. Cette variable indique l'identifiant de ce tableau pour y acceder et l'utiliser.


Generated on Thu Mar 24 12:53:49 2005 for Septant by  doxygen 1.4.1