Fixed AABBs being larger than mesh/skeleton
When mesh/skeleton was not centered Former-commit-id: 595b234c20ae0447fe0c2263d4e000d87fea7300
This commit is contained in:
parent
542ce665c2
commit
346415e860
|
|
@ -401,11 +401,16 @@ const NzBoxf& NzMesh::GetAABB() const
|
||||||
|
|
||||||
if (!m_impl->aabbUpdated)
|
if (!m_impl->aabbUpdated)
|
||||||
{
|
{
|
||||||
|
unsigned int subMeshCount = m_impl->subMeshes.size();
|
||||||
|
if (subMeshCount > 0)
|
||||||
|
{
|
||||||
|
m_impl->aabb.Set(m_impl->subMeshes[0]->GetAABB());
|
||||||
|
for (unsigned int i = 1; i < subMeshCount; ++i)
|
||||||
|
m_impl->aabb.ExtendTo(m_impl->subMeshes[i]->GetAABB());
|
||||||
|
}
|
||||||
|
else
|
||||||
m_impl->aabb.MakeZero();
|
m_impl->aabb.MakeZero();
|
||||||
|
|
||||||
for (NzSubMesh* subMesh : m_impl->subMeshes)
|
|
||||||
m_impl->aabb.ExtendTo(subMesh->GetAABB());
|
|
||||||
|
|
||||||
m_impl->aabbUpdated = true;
|
m_impl->aabbUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,15 @@ const NzBoxf& NzSkeleton::GetAABB() const
|
||||||
|
|
||||||
if (!m_impl->aabbUpdated)
|
if (!m_impl->aabbUpdated)
|
||||||
{
|
{
|
||||||
m_impl->aabb.MakeZero();
|
unsigned int jointCount = m_impl->joints.size();
|
||||||
|
if (jointCount > 0)
|
||||||
for (unsigned int i = 0; i < m_impl->joints.size(); ++i)
|
{
|
||||||
|
m_impl->aabb.Set(m_impl->joints[0].GetPosition());
|
||||||
|
for (unsigned int i = 1; i < jointCount; ++i)
|
||||||
m_impl->aabb.ExtendTo(m_impl->joints[i].GetPosition());
|
m_impl->aabb.ExtendTo(m_impl->joints[i].GetPosition());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
m_impl->aabb.MakeZero();
|
||||||
|
|
||||||
m_impl->aabbUpdated = true;
|
m_impl->aabbUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <Nazara/Utility/StaticMesh.hpp>
|
#include <Nazara/Utility/StaticMesh.hpp>
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
|
#include <Nazara/Utility/Algorithm.hpp>
|
||||||
#include <Nazara/Utility/BufferMapper.hpp>
|
#include <Nazara/Utility/BufferMapper.hpp>
|
||||||
#include <Nazara/Utility/Mesh.hpp>
|
#include <Nazara/Utility/Mesh.hpp>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
@ -56,16 +57,7 @@ bool NzStaticMesh::GenerateAABB()
|
||||||
{
|
{
|
||||||
// On lock le buffer pour itérer sur toutes les positions et composer notre AABB
|
// On lock le buffer pour itérer sur toutes les positions et composer notre AABB
|
||||||
NzBufferMapper<NzVertexBuffer> mapper(m_vertexBuffer, nzBufferAccess_ReadOnly);
|
NzBufferMapper<NzVertexBuffer> mapper(m_vertexBuffer, nzBufferAccess_ReadOnly);
|
||||||
|
m_aabb = NzComputeVerticesAABB(static_cast<const NzMeshVertex*>(mapper.GetPointer()), m_vertexBuffer->GetVertexCount());
|
||||||
m_aabb.MakeZero();
|
|
||||||
|
|
||||||
NzMeshVertex* vertex = reinterpret_cast<NzMeshVertex*>(mapper.GetPointer());
|
|
||||||
unsigned int vertexCount = m_vertexBuffer->GetVertexCount();
|
|
||||||
for (unsigned int i = 0; i < vertexCount; ++i)
|
|
||||||
{
|
|
||||||
m_aabb.ExtendTo(vertex->position);
|
|
||||||
vertex++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue