Added center mesh parameter

Former-commit-id: e010a81e3f00ca6091e438d405e3e6ca14938b8f
This commit is contained in:
Lynix
2013-12-20 20:03:18 +01:00
parent a560a16ef3
commit 69479de643
15 changed files with 53 additions and 10 deletions

View File

@@ -63,7 +63,7 @@ namespace
unsigned int faceCount = meshes[i].faces.size();
std::vector<unsigned int> indices;
indices.reserve(faceCount*3); // Pire cas (si les faces sont des triangles)
indices.reserve(faceCount*3); // Pire cas si les faces sont des triangles
// Bien plus rapide qu'un vector (pour la recherche)
std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, unsigned int>>> vertices;
@@ -167,6 +167,9 @@ namespace
subMesh->SetMaterialIndex(meshes[i].material);
subMesh->SetPrimitiveMode(nzPrimitiveMode_TriangleList);
if (parameters.mesh.center)
subMesh->Center();
if (hasNormals && hasTexCoords)
subMesh->GenerateTangents();
else if (hasTexCoords)

View File

@@ -227,6 +227,10 @@ namespace
subMesh->GenerateAABB();
subMesh->GenerateTangents();
subMesh->SetMaterialIndex(0);
if (parameters.center)
subMesh->Center();
mesh->AddSubMesh(subMesh.release());
return true;

View File

@@ -351,10 +351,14 @@ bool NzMD5MeshParser::Parse(NzMesh* mesh)
// Material
mesh->SetMaterial(i, baseDir + md5Mesh.shader);
subMesh->GenerateAABB();
subMesh->GenerateNormalsAndTangents();
subMesh->SetMaterialIndex(i);
if (m_parameters.center)
subMesh->Center();
mesh->AddSubMesh(subMesh.get());
subMesh.release();
}

View File

@@ -7,6 +7,7 @@
#include <Nazara/Utility/Algorithm.hpp>
#include <Nazara/Utility/BufferMapper.hpp>
#include <Nazara/Utility/Mesh.hpp>
#include <Nazara/Utility/VertexMapper.hpp>
#include <stdexcept>
#include <Nazara/Utility/Debug.hpp>
@@ -20,6 +21,20 @@ NzStaticMesh::~NzStaticMesh()
Destroy();
}
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);
NzVertexMapper mapper(this);
unsigned int vertexCount = mapper.GetVertexCount();
for (unsigned int i = 0; i < vertexCount; ++i)
mapper.SetPosition(i, mapper.GetPosition(i) - offset);
m_aabb.x -= offset.x;
m_aabb.y -= offset.y;
m_aabb.z -= offset.z;
}
bool NzStaticMesh::Create(NzVertexBuffer* vertexBuffer)
{
Destroy();