Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

pge::SGFMeshModel Class Reference

#include <SGFMeshModel.h>

Inheritance diagram for pge::SGFMeshModel:

Inheritance graph
[legend]
Collaboration diagram for pge::SGFMeshModel:

Collaboration graph
[legend]

Public Member Functions

 SGFMeshModel (SGFFile *sgfFile, ShaderObject *shader=NULL)
 Constructor.

 SGFMeshModel (SGFFile *sgfFile, Vector3f bottomCenter, float scaleFactor, ShaderObject *shader=NULL)
virtual ~SGFMeshModel (void)
 Destructor.


Private Member Functions

void convertMeshes (SGFFile *sgfFile, ShaderObject *shader)
bool isSingleTextured (SGFFile::SGFMesh *mesh)

Constructor & Destructor Documentation

pge::SGFMeshModel::SGFMeshModel SGFFile sgfFile,
ShaderObject shader = NULL
 

Constructor.

Definition at line 20 of file SGFMeshModel.cpp.

References pge::MeshModel::buildBoundingBox(), and convertMeshes().

00020                                                                          {
00021                 convertMeshes(sgfFile, shader);
00022 
00023                 // ConvertMeshses adds the meshs to the model, so afterwards the boundingbox can be
00024                 // created.
00025                 buildBoundingBox();
00026         }

Here is the call graph for this function:

pge::SGFMeshModel::SGFMeshModel SGFFile sgfFile,
Vector3f  bottomCenter,
float  scaleFactor,
ShaderObject shader = NULL
 

Definition at line 35 of file SGFMeshModel.cpp.

References pge::MeshModel::buildBoundingBox(), convertMeshes(), pge::MeshModel::scale(), and pge::MeshModel::setBottomCenter().

00035                                                                                                                    {
00036                 convertMeshes(sgfFile, shader);
00037                 
00038                 // Scale the model after the meshs have been converted.
00039                 if(scaleFactor != 0.0f && scaleFactor != 1.0f) {
00040                         scale(scaleFactor);
00041                 }
00042 
00043                 buildBoundingBox();
00044                 setBottomCenter(bottomCenter);
00045         }

Here is the call graph for this function:

pge::SGFMeshModel::~SGFMeshModel void   )  [virtual]
 

Destructor.

Definition at line 53 of file SGFMeshModel.cpp.

00053                                         {
00054         }


Member Function Documentation

void pge::SGFMeshModel::convertMeshes SGFFile sgfFile,
ShaderObject shader
[private]
 

Definition at line 62 of file SGFMeshModel.cpp.

References pge::MeshModel::addMesh(), pge::Mesh::addTriangle(), pge::SGFFile::getMeshs(), isSingleTextured(), pge::SGFFile::SGFPrimitive::m_indices, pge::Triangle::m_plane, pge::SGFFile::SGFPrimitive::m_texCoords, pge::Triangle::m_texCoords, pge::Triangle::m_texture, pge::SGFFile::SGFPrimitive::m_textureFile, pge::SGFFile::SGFMesh::m_triangles, pge::SGFFile::SGFMesh::m_vertices, and pge::Triangle::m_vertices.

Referenced by SGFMeshModel().

00062                                                                                {
00063                 std::vector<SGFFile::SGFMesh> *meshs;
00064                 std::vector<SGFFile::SGFMesh>::iterator it;
00065                 std::vector<SGFFile::SGFPrimitive>::iterator primIt;
00066                 Texture *singleTexture;
00067 
00068 
00069                 meshs = sgfFile->getMeshs();
00070 
00071                 // Add textures to the global texturedatabase.
00072                 for(it = meshs->begin(); it != meshs->end(); it++) {
00073                         SGFFile::SGFMesh mesh = *it;
00074 
00075                         for(primIt = mesh.m_triangles.begin(); primIt != mesh.m_triangles.end(); primIt++) {
00076                                 SGFFile::SGFPrimitive prim = *primIt;
00077 
00078                                 // Save texture for later use in SingleTexturedMesh.
00079                                 TextureDatabase::getInstance()->addTexture(prim.m_textureFile);
00080                         }
00081                 }
00082 
00083                 // Go through each mesh.
00084                 for(it = meshs->begin(); it != meshs->end(); it++) {
00085                         SGFFile::SGFMesh sgfMesh = *it;
00086 
00087                         // Create the new mesh.
00088                         Mesh *mesh;
00089                         if(isSingleTextured(&sgfMesh)) {
00090                                 mesh = new SingleTexturedMesh();
00091                                 if(sgfMesh.m_triangles.size() > 0) {
00092                                         singleTexture = TextureDatabase::getInstance()->getTextureByName(sgfMesh.m_triangles.at(0).m_textureFile);
00093                                 }
00094                                 ((SingleTexturedMesh*)mesh)->setTexture(singleTexture);
00095                         } else {
00096                                 mesh = new Mesh();
00097                         }
00098 
00099                         for(primIt = sgfMesh.m_triangles.begin(); primIt != sgfMesh.m_triangles.end(); primIt++) {
00100                                 SGFFile::SGFPrimitive prim = *primIt;
00101                                 Triangle triangle;
00102 
00103                                 triangle.m_vertices[0] = sgfMesh.m_vertices.at(prim.m_indices[0]);
00104                                 triangle.m_vertices[1] = sgfMesh.m_vertices.at(prim.m_indices[1]);
00105                                 triangle.m_vertices[2] = sgfMesh.m_vertices.at(prim.m_indices[2]);
00106 
00107                                 triangle.m_texCoords[0] = prim.m_texCoords[0];
00108                                 triangle.m_texCoords[1] = prim.m_texCoords[1];
00109                                 triangle.m_texCoords[2] = prim.m_texCoords[2];
00110 
00111                                 triangle.m_texture = TextureDatabase::getInstance()->getTextureByName(prim.m_textureFile);
00112 
00113                                 triangle.m_plane = new Plane(&triangle);
00114 
00115                                 mesh->addTriangle(triangle);
00116                         }
00117                         addMesh(mesh);
00118                 }
00119         }

Here is the call graph for this function:

bool pge::SGFMeshModel::isSingleTextured SGFFile::SGFMesh mesh  )  [private]
 

Definition at line 127 of file SGFMeshModel.cpp.

References pge::SGFFile::SGFPrimitive::m_textureFile, and pge::SGFFile::SGFMesh::m_triangles.

Referenced by convertMeshes().

00127                                                                 {
00128                 std::string refTexName;
00129                 std::vector<SGFFile::SGFPrimitive>::iterator it;
00130 
00131 
00132                 // Get first meshs texture name.
00133                 if(mesh->m_triangles.size() > 0) {
00134                         refTexName = mesh->m_triangles.at(0).m_textureFile;
00135                 } else {
00136                         return false;
00137                 }
00138 
00139                 // Compare each texture with the reference one.
00140                 for(it = mesh->m_triangles.begin(); it != mesh->m_triangles.end(); it++) {
00141                         SGFFile::SGFPrimitive prim = *it;
00142                         if(prim.m_textureFile != refTexName) {
00143                                 return false;
00144                         }
00145                 }
00146 
00147                 return true;
00148         }


The documentation for this class was generated from the following files:
Generated on Mon Oct 16 12:09:34 2006 for Phobosengine by doxygen 1.3.4