From 2fed71cc3ae7e1c219bcaf5d52f93ccb2a62f172 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 17 Jan 2015 00:37:47 +0100 Subject: [PATCH] Fixed mesh centering Former-commit-id: d27dc7f0734d6a5bf0ecd6d36ede2f11cbff7c9c --- src/Nazara/Graphics/Loaders/OBJ/Loader.cpp | 15 ++++++++++++--- src/Nazara/Utility/Loaders/MD5Mesh/Loader.cpp | 14 +++++++++++--- src/Nazara/Utility/StaticMesh.cpp | 4 +++- 3 files changed, 26 insertions(+), 7 deletions(-) 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);