diff --git a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp index 07c1742ec..bc9f3b3a4 100644 --- a/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp +++ b/src/Nazara/Graphics/Loaders/OBJ/Loader.cpp @@ -170,9 +170,6 @@ namespace subMesh->SetMaterialIndex(meshes[i].material); subMesh->SetPrimitiveMode(nzPrimitiveMode_TriangleList); - 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(); @@ -185,6 +182,18 @@ namespace subMesh.release(); } + if (parameters.mesh.center) + { + unsigned int subMeshCount = mesh->GetSubMeshCount(); + for (unsigned int i = 0; i < subMeshCount; ++i) + { + NzStaticMesh* subMesh = static_cast(mesh->GetSubMesh(i)); + subMesh->Center(); + } + + mesh->InvalidateAABB(); + } + mesh->SetMaterialCount(parser.GetMaterialCount()); model->SetMesh(mesh.get()); diff --git a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp b/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp index b2b518dae..4712cf9ab 100644 --- a/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp +++ b/src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp @@ -294,12 +294,20 @@ namespace subMesh->GenerateNormalsAndTangents(); subMesh->SetMaterialIndex(i); - if (parameters.center) - subMesh->Center(); - mesh->AddSubMesh(subMesh.get()); subMesh.release(); } + + if (parameters.center) + { + for (unsigned int i = 0; i < meshCount; ++i) + { + NzStaticMesh* subMesh = static_cast(mesh->GetSubMesh(i)); + subMesh->Center(); + } + + mesh->InvalidateAABB(); + } } return true; diff --git a/src/Nazara/Utility/StaticMesh.cpp b/src/Nazara/Utility/StaticMesh.cpp index b54126008..9e64eceea 100644 --- a/src/Nazara/Utility/StaticMesh.cpp +++ b/src/Nazara/Utility/StaticMesh.cpp @@ -23,7 +23,9 @@ NzStaticMesh::~NzStaticMesh() void NzStaticMesh::Center() { - NzVector3f offset(m_aabb.x + m_aabb.width/2.f, m_aabb.y + m_aabb.height/2.f, m_aabb.z + m_aabb.depth/2.f); + ///DOC: Invalider l'AABB après ça + NzBoxf aabb(m_parent->GetAABB()); + NzVector3f offset(aabb.x + aabb.width/2.f, aabb.y + aabb.height/2.f, aabb.z + aabb.depth/2.f); NzVertexMapper mapper(this); NzSparsePtr position = mapper.GetComponentPtr(nzVertexComponent_Position);