#include <SGFMeshModel.h>
Inheritance diagram for pge::SGFMeshModel:
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.
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:
|
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:
|
Destructor.
Definition at line 53 of file SGFMeshModel.cpp.
00053 { 00054 } |
|
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:
|
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 } |