#include <MeshModel.h>
Inheritance diagram for pge::MeshModel:
Public Member Functions | |
MeshModel (void) | |
Constructor. | |
virtual | ~MeshModel (void) |
Destructor. | |
bool | init (void) |
void | render (void) |
Called when the object should render itself. | |
void | timer (unsigned int delay) |
Called when the timer event comes. | |
std::vector< Mesh * > * | getMeshs (void) |
int | getTriangleNum (void) |
int | getMeshNum (void) |
AABB * | getBoundingBox (void) |
void | addMesh (Mesh *mesh) |
void | addMeshModel (MeshModel *model) |
void | clearMeshs (void) |
float | getHeightAt (float posX, float posZ) |
void | buildBoundingBox (void) |
void | scale (float f) |
void | setBottomCenter (Vector3f bottomCenter) |
Vector3f | getBottomCenterDifference (void) |
Private Attributes | |
std::vector< Mesh * > * | m_meshs |
AABB * | m_boundingBox |
Vector3f | m_bottomCenterDifference |
|
Constructor.
Definition at line 16 of file MeshModel.cpp. References m_boundingBox, and m_meshs.
00016 { 00017 m_boundingBox = NULL; 00018 m_meshs = new std::vector<Mesh*>(); 00019 } |
|
Destructor.
Definition at line 27 of file MeshModel.cpp. References m_boundingBox, and m_meshs.
00027 { 00028 std::vector<Mesh*>::iterator it; 00029 00030 if(m_meshs != NULL) { 00031 for(it = m_meshs->begin(); it != m_meshs->end(); it++) { 00032 if(*it != NULL) { 00033 delete *it; 00034 } 00035 } 00036 delete m_meshs; 00037 m_meshs = NULL; 00038 } 00039 00040 if(m_boundingBox != NULL) { 00041 delete m_boundingBox; 00042 m_boundingBox = NULL; 00043 } 00044 } |
|
Definition at line 151 of file MeshModel.cpp. References m_meshs. Referenced by pge::SGFMeshModel::convertMeshes(), pge::DynamicCity::createCity(), createGrass(), pge::DynamicCity::createGround(), and pge::Terrain::createTerrain().
00151 { 00152 m_meshs->push_back(mesh); 00153 } |
|
Definition at line 161 of file MeshModel.cpp. References getMeshs(), and m_meshs. Referenced by main().
00161 { 00162 std::vector<Mesh*>::iterator it; 00163 00164 00165 for(it = model->getMeshs()->begin(); it != model->getMeshs()->end(); it++) { 00166 m_meshs->push_back(*it); 00167 } 00168 } |
Here is the call graph for this function:
|
Definition at line 210 of file MeshModel.cpp. References pge::Mesh::getTriangles(), m_boundingBox, pge::AABB::m_maxX, pge::AABB::m_maxY, pge::AABB::m_maxZ, m_meshs, pge::AABB::m_minX, pge::AABB::m_minY, pge::AABB::m_minZ, pge::Vector3f::m_v, and pge::Triangle::m_vertices. Referenced by init(), pge::DynamicCity::init(), pge::SGFMeshModel::SGFMeshModel(), and pge::Terrain::Terrain().
00210 { 00211 // 00212 // Variables 00213 // 00214 float minX; 00215 float minY; 00216 float minZ; 00217 float maxX; 00218 float maxY; 00219 float maxZ; 00220 int i; 00221 Vector3f temp; 00222 std::vector<Mesh*>::iterator meshIt; 00223 std::vector<Triangle*>::iterator triangleIt; 00224 00225 00226 // Set the start values to the first vertex in the first mesh, if it exists. 00227 if(m_meshs->size() < 1) { 00228 // TODO: Error? 00229 return; 00230 } else { 00231 if(m_meshs->at(0)->getTriangles()->size() < 1) { 00232 return; 00233 } 00234 } 00235 00236 temp = m_meshs->at(0)->getTriangles()->at(0)->m_vertices[0]; 00237 minX = temp.m_v[0]; 00238 minY = temp.m_v[1]; 00239 minZ = temp.m_v[2]; 00240 maxX = temp.m_v[0]; 00241 maxY = temp.m_v[1]; 00242 maxZ = temp.m_v[2]; 00243 00244 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) { 00245 Mesh *mesh = *meshIt; 00246 00247 for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) { 00248 Triangle *t = *triangleIt; 00249 00250 for(i = 0; i < 3; i++) { 00251 Vector3f v = t->m_vertices[i]; 00252 00253 // Min values. 00254 if (v.m_v[0] < minX) { 00255 minX = v.m_v[0]; 00256 } 00257 if (v.m_v[1] < minY) { 00258 minY = v.m_v[1]; 00259 } 00260 if (v.m_v[2] < minZ) { 00261 minZ = v.m_v[2]; 00262 } 00263 00264 // Max values. 00265 if (v.m_v[0] > maxX) { 00266 maxX = v.m_v[0]; 00267 } 00268 if (v.m_v[1] > maxY) { 00269 maxY = v.m_v[1]; 00270 } 00271 if (v.m_v[2] > maxZ) { 00272 maxZ = v.m_v[2]; 00273 } 00274 } 00275 } 00276 } 00277 00278 if(m_boundingBox != NULL) { 00279 m_boundingBox->m_minX = minX; 00280 m_boundingBox->m_minY = minY; 00281 m_boundingBox->m_minZ = minZ; 00282 m_boundingBox->m_maxX = maxX; 00283 m_boundingBox->m_maxY = maxY; 00284 m_boundingBox->m_maxZ = maxZ; 00285 } else { 00286 m_boundingBox = new AABB(minX, minY, minZ, maxX, maxY, maxZ); 00287 } 00288 } |
Here is the call graph for this function:
|
Definition at line 176 of file MeshModel.cpp. References m_meshs.
00176 { 00177 m_meshs->clear(); 00178 } |
|
Definition at line 357 of file MeshModel.cpp. References m_bottomCenterDifference. Referenced by pge::sgfmeshmodelfactory::createSGFMeshModelWithLights().
00357 { 00358 return m_bottomCenterDifference; 00359 } |
|
Definition at line 141 of file MeshModel.cpp. References m_boundingBox. Referenced by pge::Quadtree::init(), pge::Octree::init(), pge::DynamicCity::init(), and main().
00141 { 00142 return m_boundingBox; 00143 } |
|
Definition at line 186 of file MeshModel.cpp. References pge::Mesh::getHeightAt(), pge::Mesh::isHeightQueryInside(), and m_meshs. Referenced by addModels(), and main().
00186 { 00187 float height = 0.0f; 00188 std::vector<Mesh*>::iterator it; 00189 00190 00191 for(it = m_meshs->begin(); it != m_meshs->end(); it++) { 00192 Mesh *mesh = *it; 00193 00194 if(mesh->isHeightQueryInside(posX, posZ)) { 00195 00196 if(mesh->getHeightAt(posX, posZ, &height)) { 00197 return height; 00198 } 00199 } 00200 } 00201 return 0.0f; 00202 } |
Here is the call graph for this function:
|
Definition at line 131 of file MeshModel.cpp. References m_meshs.
00131 { 00132 return (int)m_meshs->size(); 00133 } |
|
Definition at line 103 of file MeshModel.cpp. References m_meshs. Referenced by addMeshModel(), pge::Quadtree::init(), and pge::Octree::init().
00103 { 00104 return m_meshs; 00105 } |
|
Definition at line 113 of file MeshModel.cpp. References pge::Mesh::getTriangleNum(), and m_meshs.
|
Here is the call graph for this function:
|
Implements pge::IRenderableObject. Reimplemented in pge::DynamicCity. Definition at line 52 of file MeshModel.cpp. References buildBoundingBox(), pge::Mesh::init(), and m_meshs. Referenced by pge::Quadtree::init(), and pge::Octree::init().
00052 { 00053 std::vector<Mesh*>::iterator it; 00054 00055 buildBoundingBox(); 00056 00057 for(it = m_meshs->begin(); it != m_meshs->end(); it++) { 00058 Mesh *mesh = *it; 00059 mesh->init(); 00060 } 00061 00062 return true; 00063 } |
Here is the call graph for this function:
|
Called when the object should render itself.
Implements pge::IRenderableObject. Definition at line 71 of file MeshModel.cpp. References m_meshs, and pge::Mesh::render().
|
Here is the call graph for this function:
|
Definition at line 296 of file MeshModel.cpp. References pge::Mesh::getTriangles(), m_meshs, pge::Triangle::m_vertices, and pge::Vector3f::multiply(). Referenced by pge::SGFMeshModel::SGFMeshModel().
00296 { 00297 std::vector<Mesh*>::iterator meshIt; 00298 std::vector<Triangle*>::iterator triangleIt; 00299 00300 00301 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) { 00302 Mesh *mesh = *meshIt; 00303 00304 for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) { 00305 Triangle *t = *triangleIt; 00306 00307 t->m_vertices[0] = t->m_vertices[0].multiply(s); 00308 t->m_vertices[1] = t->m_vertices[1].multiply(s); 00309 t->m_vertices[2] = t->m_vertices[2].multiply(s); 00310 } 00311 } 00312 } |
Here is the call graph for this function:
|
Definition at line 320 of file MeshModel.cpp. References pge::Vector3f::add(), pge::AABB::getBottomCenter(), pge::Mesh::getTriangles(), m_bottomCenterDifference, m_boundingBox, pge::AABB::m_maxX, pge::AABB::m_maxY, pge::AABB::m_maxZ, m_meshs, pge::AABB::m_minX, pge::AABB::m_minY, pge::AABB::m_minZ, pge::Triangle::m_vertices, and pge::Vector3f::subtract(). Referenced by pge::SGFMeshModel::SGFMeshModel().
00320 { 00321 Vector3f difference; 00322 Vector3f center; 00323 std::vector<Mesh*>::iterator meshIt; 00324 std::vector<Triangle*>::iterator triangleIt; 00325 00326 00327 center = m_boundingBox->getBottomCenter(); 00328 difference = bottomCenter.subtract(center); 00329 m_bottomCenterDifference = difference; 00330 00331 for(meshIt = m_meshs->begin(); meshIt != m_meshs->end(); meshIt++) { 00332 Mesh *mesh = *meshIt; 00333 00334 for(triangleIt = mesh->getTriangles()->begin(); triangleIt != mesh->getTriangles()->end(); triangleIt++) { 00335 Triangle *t = *triangleIt; 00336 00337 t->m_vertices[0] = t->m_vertices[0].add(difference); 00338 t->m_vertices[1] = t->m_vertices[1].add(difference); 00339 t->m_vertices[2] = t->m_vertices[2].add(difference); 00340 } 00341 } 00342 00343 m_boundingBox->m_minX += difference.m_v[0]; 00344 m_boundingBox->m_minY += difference.m_v[1]; 00345 m_boundingBox->m_minZ += difference.m_v[2]; 00346 m_boundingBox->m_maxX += difference.m_v[0]; 00347 m_boundingBox->m_maxY += difference.m_v[1]; 00348 m_boundingBox->m_maxZ += difference.m_v[2]; 00349 } |
Here is the call graph for this function:
|
Called when the timer event comes.
Implements pge::IRenderableObject. Definition at line 87 of file MeshModel.cpp. References m_meshs, and pge::Mesh::timer(). Referenced by pge::Octree::timer().
|
Here is the call graph for this function:
|
Definition at line 81 of file MeshModel.h. Referenced by getBottomCenterDifference(), and setBottomCenter(). |
|
Definition at line 80 of file MeshModel.h. Referenced by buildBoundingBox(), getBoundingBox(), MeshModel(), setBottomCenter(), and ~MeshModel(). |
|
Definition at line 77 of file MeshModel.h. Referenced by addMesh(), addMeshModel(), buildBoundingBox(), clearMeshs(), getHeightAt(), getMeshNum(), getMeshs(), getTriangleNum(), init(), MeshModel(), render(), scale(), setBottomCenter(), timer(), and ~MeshModel(). |