diff --git a/src/Mesh.cpp b/src/Mesh.cpp index 5e792f1..6b9b227 100644 --- a/src/Mesh.cpp +++ b/src/Mesh.cpp @@ -55,8 +55,6 @@ void Mesh::draw(ShaderLoader &shader) { shader.setFloat(("material." + name + number).c_str(), i); glBindTexture(GL_TEXTURE_2D, textures[i].id); - error.log(std::to_string(textures[i].id)); - error.log(std::to_string(GL_TEXTURE0 + i)); } glActiveTexture(GL_TEXTURE0); diff --git a/src/Model.cpp b/src/Model.cpp index 1f3c7ae..24878a2 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -34,10 +34,10 @@ void Model::loadModel(std::string path) { return; } directory = path.substr(0, path.find_last_of('/')) + '/'; - error.log(directory); processNode(scene->mRootNode, scene); } void Model::processNode(aiNode *node, const aiScene *scene) { + error.log("Processing Node"); // if the node has meshes process them for (unsigned int i = 0; i < node->mNumMeshes; i++) { aiMesh *mesh = scene->mMeshes[node->mMeshes[i]]; @@ -53,7 +53,9 @@ Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene) { std::vector vertices; std::vector indecies; std::vector textures; + error.log("Processing Mesh"); + error.log("Loading vertices"); for (unsigned int i = 0; i < mesh->mNumVertices; i++) { Vertex vertex; // process vertex postions and add to our mesh @@ -72,6 +74,7 @@ Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene) { } // Handle indeces // Loop through the meshes faces to get the correct order + error.log("Loading indecies"); for (unsigned int i = 0; i < mesh->mNumFaces; i++) { aiFace face = mesh->mFaces[i]; // loop through and add each face's indecies @@ -81,13 +84,15 @@ Mesh Model::processMesh(aiMesh *mesh, const aiScene *scene) { } } // Handle Assimps material format + error.log("loading textures"); if (mesh->mMaterialIndex >= 0) { + error.log("material index is greater than 0"); aiMaterial *material = scene->mMaterials[mesh->mMaterialIndex]; std::vector diffuseMaps = loadMaterialTextures( material, aiTextureType_DIFFUSE, "texture_diffuse"); textures.insert(textures.end(), diffuseMaps.begin(), diffuseMaps.end()); std::vector specularMaps = loadMaterialTextures( - material, aiTextureType_DIFFUSE, "texture_diffuse"); + material, aiTextureType_SPECULAR, "texture_specular"); textures.insert(textures.end(), specularMaps.begin(), specularMaps.end()); } return Mesh(vertices, indecies, textures); @@ -101,9 +106,17 @@ std::vector Model::loadMaterialTextures(aiMaterial *material, aiString str; material->GetTexture(type, i, &str); bool skip = false; + // check we're not loading in a texture we already have + + error.log(std::to_string(textures_loaded.size())); + for (unsigned int loadedtex = 0; loadedtex < textures_loaded.size(); loadedtex++) { + + error.log(std::string("loaded texture: ") + + textures_loaded[loadedtex].path.data()); + if (std::strcmp(textures_loaded[loadedtex].path.data(), str.C_Str()) == 0) { textures.push_back(textures_loaded[loadedtex]); @@ -118,6 +131,9 @@ std::vector Model::loadMaterialTextures(aiMaterial *material, texture.type = typeName; texture.path = str.C_Str(); textures.push_back(texture); + // Store the texture in the models loaded texture bank so we can check if + // we've already loaded it + textures_loaded.push_back(texture); } } return textures; @@ -159,6 +175,5 @@ unsigned int Model::loadTextureFromFile(std::string file, SDL_FreeSurface(image); image = nullptr; - error.log("loaded texture: " + std::to_string(texture)); return texture; } diff --git a/src/main.cpp b/src/main.cpp index 51ee656..336f19c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -186,8 +186,8 @@ int main(int argc, char **argv) { // model.translate(glm::vec3(1.0f, 0.0f, 0.0f)); - // Model backpack(ROOT_DIR "data/models/backpack/backpack.obj"); - Model cube(ROOT_DIR "data/models/cube/cube.obj"); + Model backpack(ROOT_DIR "data/models/backpack/backpack.obj"); + // Model cube(ROOT_DIR "data/models/cube/cube.obj"); // Mess with perspective // Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 @@ -230,8 +230,8 @@ int main(int argc, char **argv) { // Draw Meshes // model2.draw(shader); // model.draw(shader); - cube.draw(shader); - // backpack.draw(shader); + // cube.draw(shader); + backpack.draw(shader); // Finally render everything shader.use();