Added ComputeVerticesAABB algorithm

Made TransformVertices template
Removed TransformVertex


Former-commit-id: 68c7bdae2bd21adbed3fc7c54361c439ea0e5d37
This commit is contained in:
Lynix 2013-06-09 16:10:12 +02:00
parent a478926570
commit 542ce665c2
2 changed files with 30 additions and 9 deletions

View File

@ -21,6 +21,7 @@ NAZARA_API void NzComputeCubicSphereIndexVertexCount(unsigned int subdivision, u
NAZARA_API void NzComputeIcoSphereIndexVertexCount(unsigned int recursionLevel, unsigned int* indexCount, unsigned int* vertexCount); NAZARA_API void NzComputeIcoSphereIndexVertexCount(unsigned int recursionLevel, unsigned int* indexCount, unsigned int* vertexCount);
NAZARA_API void NzComputePlaneIndexVertexCount(const NzVector2ui& subdivision, unsigned int* indexCount, unsigned int* vertexCount); NAZARA_API void NzComputePlaneIndexVertexCount(const NzVector2ui& subdivision, unsigned int* indexCount, unsigned int* vertexCount);
NAZARA_API void NzComputeUvSphereIndexVertexCount(unsigned int sliceCount, unsigned int stackCount, unsigned int* indexCount, unsigned int* vertexCount); NAZARA_API void NzComputeUvSphereIndexVertexCount(unsigned int sliceCount, unsigned int stackCount, unsigned int* indexCount, unsigned int* vertexCount);
template<typename T> NzBoxf NzComputeVerticesAABB(const T* vertices, unsigned int vertexCount);
NAZARA_API void NzGenerateBox(const NzVector3f& lengths, const NzVector3ui& subdivision, const NzMatrix4f& matrix, NzMeshVertex* vertices, NzIndexIterator indices, NzBoxf* aabb = nullptr, unsigned int indexOffset = 0); NAZARA_API void NzGenerateBox(const NzVector3f& lengths, const NzVector3ui& subdivision, const NzMatrix4f& matrix, NzMeshVertex* vertices, NzIndexIterator indices, NzBoxf* aabb = nullptr, unsigned int indexOffset = 0);
NAZARA_API void NzGenerateCubicSphere(float size, unsigned int subdivision, const NzMatrix4f& matrix, NzMeshVertex* vertices, NzIndexIterator indices, NzBoxf* aabb = nullptr, unsigned int indexOffset = 0); NAZARA_API void NzGenerateCubicSphere(float size, unsigned int subdivision, const NzMatrix4f& matrix, NzMeshVertex* vertices, NzIndexIterator indices, NzBoxf* aabb = nullptr, unsigned int indexOffset = 0);
@ -30,8 +31,7 @@ NAZARA_API void NzGenerateUvSphere(float size, unsigned int sliceCount, unsigned
NAZARA_API void NzOptimizeIndices(NzIndexIterator indices, unsigned int indexCount); NAZARA_API void NzOptimizeIndices(NzIndexIterator indices, unsigned int indexCount);
inline void NzTransformVertex(NzMeshVertex* vertex, const NzMatrix4f& matrix); template<typename T> void NzTransformVertices(T* vertices, unsigned int vertexCount, const NzMatrix4f& matrix);
inline void NzTransformVertices(NzMeshVertex* vertices, unsigned int vertexCount, const NzMatrix4f& matrix);
#include <Nazara/Utility/Algorithm.inl> #include <Nazara/Utility/Algorithm.inl>

View File

@ -4,21 +4,42 @@
#include <Nazara/Utility/Debug.hpp> #include <Nazara/Utility/Debug.hpp>
void NzTransformVertex(NzMeshVertex* vertex, const NzMatrix4f& matrix) template<typename T>
NzBoxf NzComputeVerticesAABB(const T* vertices, unsigned int vertexCount)
{ {
vertex->normal = matrix.Transform(vertex->normal, 0.f); NzBoxf aabb;
vertex->position = matrix.Transform(vertex->position); if (vertexCount > 0)
vertex->tangent = matrix.Transform(vertex->tangent, 0.f); {
vertex++; aabb.Set(vertices->position);
vertices++;
for (unsigned int i = 1; i < vertexCount; ++i)
{
aabb.ExtendTo(vertices->position);
vertices++;
}
}
else
aabb.MakeZero();
return aabb;
} }
void NzTransformVertices(NzMeshVertex* vertices, unsigned int vertexCount, const NzMatrix4f& matrix) template<typename T>
void NzTransformVertices(T* vertices, unsigned int vertexCount, const NzMatrix4f& matrix)
{ {
if (matrix.IsIdentity()) if (matrix.IsIdentity())
return; return;
NzVector3f scale = matrix.GetScale();
for (unsigned int i = 0; i < vertexCount; ++i) for (unsigned int i = 0; i < vertexCount; ++i)
NzTransformVertex(vertices++, matrix); {
vertices->normal = matrix.Transform(vertices->normal, 0.f) / scale;
vertices->position = matrix.Transform(vertices->position);
vertices->tangent = matrix.Transform(vertices->tangent, 0.f) / scale;
vertices++;
}
} }
#include <Nazara/Utility/DebugOff.hpp> #include <Nazara/Utility/DebugOff.hpp>