Pipeline graphique
 Tout Structures de données Espaces de nommage Fichiers Fonctions Variables Définitions de type Énumérations Valeurs énumérées Macros
Object.cpp
Aller à la documentation de ce fichier.
1 #include "Object.h"
2 
9 {
10  if(this->typefichier == PLY)
11  {
12  this->nVertex = LoaderPly.getNPoints();
13  this->Stride = sizeof(Sommet);
14 
16  Sommet * var = new Sommet[this->nVertex];
17  this->VertexBuffer = var;
18  for(int i = 0; i < this->nVertex; i++)
19  {
20  var[i] = vertex[i];
21  }
22 
23  }
24  else if(this->typefichier == MESH)
25  {
26  this->Stride = LoaderMesh.getStride();
27 
28  Mesh::VERTEX *vertex = LoaderMesh.getVertex(this->nVertex);
29  Sommet * var = new Sommet[this->nVertex];
30  this->VertexBuffer = var;
31  for(int i = 0; i < this->nVertex; i++)
32  {
33  var[i] = vertex[i];
34  }
35 
36  }
37  else
38  {
39  std::cerr << "Erreur typefichier inconue BuildVertexBuffer" << std::endl;
40  }
41 }
42 
49 {
50  if(this->typefichier == PLY)
51  {
52  this->nFaces = LoaderPly.getNFaces();
53  this->IndexBuffer = new unsigned int[this->nFaces * 3];
54  Ply::FACE_PLY *Faces = LoaderPly.getFaces();
55  for(int i = 0; i < this->nFaces; i++)
56  {
57  int u = i*3;
58  this->IndexBuffer[u] = Faces[i].ind[0];
59  this->IndexBuffer[u+1] = Faces[i].ind[1];
60  this->IndexBuffer[u+2] = Faces[i].ind[2];
61  }
62 
63  }
64  else if(this->typefichier == MESH)
65  {
66  this->IndexBuffer = LoaderMesh.getIndices(this->nFaces);
67  }
68  else
69  {
70  std::cerr << "Erreur typefichier inconue Buildindexbuffer" << std::endl;
71  return;
72  }
73 }
74 
80 BaseObject::BaseObject(int nbinstance)
81 {
82  this->typefichier = NONE;
83  this->nInstance = nbinstance;
84  this->Instance = new ObjectInstance[nbinstance];
85  this->material = &(this->Instance[0].material);
86  this->world = &(this->Instance[0].world);
87  for(int i = 0; i < nbinstance; i++ )
88  {
89  this->Instance->world.identity();
90  }
91 }
97 {
98  LoaderMesh.Clear();
99  delete[] this->Instance;
100  if(this->typefichier == PLY)
101  {
102  delete[] this->IndexBuffer;
103  }
104 }
112 bool BaseObject::LoadPLY(std::string PlyFilename, bool bInvertNormal)
113 {
114  if(this->typefichier != NONE)
115  {
116  std::cerr << "ficher deja charger" << std::endl;
117  return false;
118  }
119 
120  if(LoaderPly.Load(PlyFilename.c_str()) == false)
121  {
122  printf("erreur lecture fichier\n");
123  return false;
124  }
125 
126 
129  if(bInvertNormal)
131 
132 
133  //si tout cest bien passer
134  this->typefichier = PLY;
135 
136  this->BuildVertexBuffer();
137  this->BuildIndexBuffer();
138  std::cout << "Object " << PlyFilename << " charger en memoire" << std::endl;
139  return true;
140 
141 }
149 bool BaseObject::LoadMesh(std::string MeshFilename, bool bInvertFace)
150 {
151  if(this->typefichier != NONE)
152  {
153  std::cerr << "ficher deja charger" << std::endl;
154  return false;
155  }
156 
157  if(LoaderMesh.LoadMesh(MeshFilename.c_str(),bInvertFace) == false)
158  {
159  std::cerr << "Erreur LoadMesh : Erreur lors de l'ouverture du model" << std::endl;
160  return false;
161  }
162 
164  //si tout cest bien passer
165  this->typefichier = MESH;
166 
167  this->BuildVertexBuffer();
168  this->BuildIndexBuffer();
169 
170  std::cout << "Object " << MeshFilename << " charger en memoire" << std::endl;
171  return true;
172 }
void ProcessNormals(void)
Recalcul des normales sur un objet.
Definition: PlyLoader.cpp:538
void BuildIndexBuffer()
BaseObject::BuildIndexBuffer() Construit l'index Buffer en sadaptant au type de fichier Le vertex buf...
Definition: Object.cpp:48
Math::matrice44 * world
Definition: Object.h:60
Material * material
Definition: Object.h:59
int getStride(void)
renvoit la table des mat�riaux, et le nombre de mat�riaux en param�tre
Definition: ReadMesh.h:79
BaseObject(int nbinstance=1)
BaseObject::BaseObject(int nbinstance) Constructeur d'un object, il prend le nombre d'instance pour i...
Definition: Object.cpp:80
Definition: Object.h:18
INDICE * getIndices(int &_nFaces)
renvoit la table des sommets, et le nombre de sommets en param�tre
Definition: ReadMesh.h:76
int getNPoints(void)
renvoie le nombre de sommets lus dans le fichier PLY.
Definition: PlyLoader.h:156
void CompressAttributeTable(float)
met la table des mat�riaux � 0 (m�me mat�riau pour toutes les faces)
Definition: ReadMesh.cpp:359
unsigned int nInstance
Nombre d'instances.
Definition: Object.h:57
int nVertex
Nombre de sommets.
Definition: Object.h:46
void identity()
M.identity(), construit une matrice identité.
Definition: libMath.h:269
bool LoadMesh(std::string MeshFilename, bool bInvertFace=false)
BaseObject::LoadMesh(std::string MeshFilename, bool bInvertFace) Charge un fichier MESH dans la memoi...
Definition: Object.cpp:149
Definition: Object.h:18
Ply::FACE_PLY * getFaces(void)
renvoie un pointeur sur le tableau des faces lues dans le fichier PLY.
Definition: PlyLoader.h:168
ObjectInstance * Instance
Pointeur vers le tableau d'instances.
Definition: Object.h:58
bool Load(const char *name)
charge le fichier PLY et construit les structures de donn�es.
Definition: PlyLoader.cpp:650
void SmartInvertNormals(void)
inverse les normales si n�cessaire: si les normales sont lues, inverse simplement les normales...
Definition: PlyLoader.cpp:509
int nFaces
Nombre de faces.
Definition: Object.h:47
unsigned int * ind
Definition: PlyLoader.h:40
int Stride
Taille d'un sommet (à savoir le sizeof de la structure contenant un sommet).
Definition: Object.h:48
Material material
caractéristique du matériau de l'instance
Definition: Object.h:14
void Clear(void)
Definition: ReadMesh.cpp:68
Ply::POINT_PLY * getPoints(void)
renvoie un pointeur sur le tableau des sommets lus dans le fichier PLY.
Definition: PlyLoader.h:161
bool LoadMesh(const char *fname, bool invface)
reduit le nombre de mat�riaux dans la table (param�tre=distance entre 2 mat�riaux pour les amalgam...
Definition: ReadMesh.cpp:115
structure de sommet (position+normale)
Definition: ReadMesh.h:42
Definition: Object.h:18
Mesh::Object LoaderMesh
Definition: Object.h:51
Structure utilis�e pour lire les caract�ristiques des sommets.
Definition: PlyLoader.h:38
void BuildVertexBuffer()
BaseObject::BuildVertexBuffer() Construit de Vertex Buffer en sadaptant au type de fichier Le vertex ...
Definition: Object.cpp:8
void NormalizeObject(void)
renormalise l'objet pour qu'il soit centr� � l'origine du rep�re (local) et de largeur 1...
Definition: PlyLoader.cpp:688
Math::matrice44 world
matrice de transformation globale de l'instance
Definition: Object.h:15
VERTEX * getVertex(int &_nVertex)
affiche les 10 premiers mat�riaux
Definition: ReadMesh.h:75
~BaseObject()
BaseObject::~BaseObject() destructeur d'un object, il suprime tout les element allouer dynamiquement...
Definition: Object.cpp:96
int getNFaces(void)
renvoie le nombre de faces lues dans le fichier PLY.
Definition: PlyLoader.h:154
bool LoadPLY(std::string PlyFilename, bool bInvertNormal=false)
BaseObject::LoadPLY(std::string PlyFilename, bool bInvertNormal) Charge un fichier PLY dans la memoir...
Definition: Object.cpp:112
void * VertexBuffer
Tableau de sommets.
Definition: Object.h:53
PlyLoader LoaderPly
Definition: Object.h:50
structure utilis�e pour lire un fichier au format PLY
Definition: PlyLoader.h:13
E_typefichier typefichier
Definition: Object.h:45
unsigned int * IndexBuffer
Tableau des indices.
Definition: Object.h:54