diff --git a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp index 3d939f7ea..449a82f2f 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp +++ b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp @@ -61,6 +61,8 @@ namespace for (unsigned int i = 0; i < meshCount; ++i) { unsigned int faceCount = meshes[i].faces.size(); + if (faceCount == 0) + continue; std::vector indices; indices.reserve(faceCount*3); // Pire cas si les faces sont des triangles @@ -97,6 +99,7 @@ namespace } } + // Création des buffers std::unique_ptr indexBuffer(new NzIndexBuffer(vertexCount > std::numeric_limits::max(), indices.size(), parameters.mesh.storage, nzBufferUsage_Static)); indexBuffer->SetPersistent(false); @@ -108,7 +111,7 @@ namespace for (unsigned int j = 0; j < indices.size(); ++j) indexMapper.Set(j, indices[j]); - indexMapper.Unmap(); + indexMapper.Unmap(); // Pour laisser les autres tâches affecter l'index buffer // Remplissage des vertices bool hasNormals = true; @@ -170,6 +173,7 @@ namespace if (parameters.mesh.center) subMesh->Center(); + // Ce que nous pouvons générer dépend des données à disposition (par exemple les tangentes nécessitent des coordonnées de texture) if (hasNormals && hasTexCoords) subMesh->GenerateTangents(); else if (hasTexCoords) diff --git a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp b/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp index a527008f8..6a404e2c6 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp +++ b/src/Nazara/Graphics/Loaders/OBJ/OBJParser.cpp @@ -93,13 +93,15 @@ bool NzOBJParser::Parse() m_positions.clear(); m_texCoords.clear(); - // Beaucoup de meshs font plus de 100 sommets, on prépare le terrain + // Beaucoup de meshs font plus de 100 sommets, préparons le terrain m_normals.reserve(100); m_positions.reserve(100); m_texCoords.reserve(100); + // On va regrouper les meshs par nom et par matériau std::unordered_map>> meshes; + // On prépare le mesh par défaut std::vector* currentMesh = &meshes[meshName][matName]; while (Advance(false))