From c026932e19cab26a991ea33450616b714f69d47d Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 24 Apr 2011 20:12:12 -0400 Subject: [PATCH] added keyframe animation model supporting chunk structs and other classes (KeyFrame, KeyFrameTriangle, AnimationSequence) --- MeshConverter/MeshConverter.vcxproj | 6 ++++ MeshConverter/src/assets/animationsequence.h | 15 +++++++++ MeshConverter/src/chunks/animations.h | 33 +++++++++++++++++++ MeshConverter/src/chunks/keyframes.h | 33 +++++++++++++++++++ MeshConverter/src/chunks/keyframetriangles.h | 33 +++++++++++++++++++ MeshConverter/src/geometry/keyframe.h | 13 ++++++++ MeshConverter/src/geometry/keyframetriangle.h | 13 ++++++++ 7 files changed, 146 insertions(+) create mode 100644 MeshConverter/src/assets/animationsequence.h create mode 100644 MeshConverter/src/chunks/animations.h create mode 100644 MeshConverter/src/chunks/keyframes.h create mode 100644 MeshConverter/src/chunks/keyframetriangles.h create mode 100644 MeshConverter/src/geometry/keyframe.h create mode 100644 MeshConverter/src/geometry/keyframetriangle.h diff --git a/MeshConverter/MeshConverter.vcxproj b/MeshConverter/MeshConverter.vcxproj index dab0dc9..ec1cf63 100644 --- a/MeshConverter/MeshConverter.vcxproj +++ b/MeshConverter/MeshConverter.vcxproj @@ -89,9 +89,13 @@ + + + + @@ -99,6 +103,8 @@ + + diff --git a/MeshConverter/src/assets/animationsequence.h b/MeshConverter/src/assets/animationsequence.h new file mode 100644 index 0000000..e68aff3 --- /dev/null +++ b/MeshConverter/src/assets/animationsequence.h @@ -0,0 +1,15 @@ +#ifndef __ASSETS_ANIMATIONSEQUENCE_H_INCLUDED__ +#define __ASSETS_ANIMATIONSEQUENCE_H_INCLUDED__ + +#include "../common.h" +#include + +class AnimationSequence +{ +public: + std::string name; + uint32_t start; + uint32_t end; +}; + +#endif diff --git a/MeshConverter/src/chunks/animations.h b/MeshConverter/src/chunks/animations.h new file mode 100644 index 0000000..cdca650 --- /dev/null +++ b/MeshConverter/src/chunks/animations.h @@ -0,0 +1,33 @@ +#ifndef __CHUNKS_ANIMATIONS_H_INCLUDED__ +#define __CHUNKS_ANIMATIONS_H_INCLUDED__ + +#include "../common.h" +#include "../assets/animationsequence.h" +#include + +struct AnimationsChunk +{ + std::vector animations; + + uint32_t GetCount() + { + return animations.size(); + } + + uint32_t GetSize() + { + if (animations.size() == 0) + return 0; + + uint32_t size = sizeof(uint32_t); + for (uint32_t i = 0; i < animations.size(); ++i) + { + size += animations[i].name.length() + 1; // include null terminator + size += sizeof(uint32_t) * 2 // start + end + } + + return size; + } +}; + +#endif diff --git a/MeshConverter/src/chunks/keyframes.h b/MeshConverter/src/chunks/keyframes.h new file mode 100644 index 0000000..d41fd10 --- /dev/null +++ b/MeshConverter/src/chunks/keyframes.h @@ -0,0 +1,33 @@ +#ifndef __CHUNKS_KEYFRAMES_H_INCLUDED__ +#define __CHUNKS_KEYFRAMES_H_INCLUDED__ + +#include "../common.h" +#include "../geometry/keyframe.h" +#include + +struct KeyFramesChunk +{ + std::vector frames; + + uint32_t GetCount() + { + return frames.size(); + } + + uint32_t GetSize() + { + if (frames.size() == 0) + return 0; + + uint32_t size = sizeof(uint32_t); + size += + ( + (sizeof(float) * 3) // vertex + + (sizeof(float) * 3) // normal + ) * frames.size(); + + return size; + } +}; + +#endif diff --git a/MeshConverter/src/chunks/keyframetriangles.h b/MeshConverter/src/chunks/keyframetriangles.h new file mode 100644 index 0000000..948c40e --- /dev/null +++ b/MeshConverter/src/chunks/keyframetriangles.h @@ -0,0 +1,33 @@ +#ifndef __CHUNKS_KEYFRAMETRIANGLES_H_INCLUDED__ +#define __CHUNKS_KEYFRAMETRIANGLES_H_INCLUDED__ + +#include "../common.h" +#include "../geometry/keyframetriangle.h" +#include + +struct KeyFrameTrianglesChunk +{ + std::vector triangles; + + uint32_t GetCount() + { + return triangles.size(); + } + + uint32_t GetSize() + { + if (triangles.size() == 0) + return 0; + + uint32_t size = sizeof(uint32_t); + size += + ( + (sizeof(uint32_t) * 3) // vertex indices + + (sizeof(uint32_t) * 3) // texcoord indices + ) * triangles.size(); + + return size; + } +}; + +#endif diff --git a/MeshConverter/src/geometry/keyframe.h b/MeshConverter/src/geometry/keyframe.h new file mode 100644 index 0000000..be576e4 --- /dev/null +++ b/MeshConverter/src/geometry/keyframe.h @@ -0,0 +1,13 @@ +#ifndef __GEOMETRY_KEYFRAME_H_INCLUDED__ +#define __GEOMETRY_KEYFRAME_H_INCLUDED__ + +#include "vector3.h" + +class KeyFrame +{ +public: + Vector3 vertex; + Vector3 normal; +}; + +#endif diff --git a/MeshConverter/src/geometry/keyframetriangle.h b/MeshConverter/src/geometry/keyframetriangle.h new file mode 100644 index 0000000..387da8e --- /dev/null +++ b/MeshConverter/src/geometry/keyframetriangle.h @@ -0,0 +1,13 @@ +#ifndef __GEOMETRY_KEYFRAMETRIANGLE_H_INCLUDED__ +#define __GEOMETRY_KEYFRAMETRIANGLE_H_INCLUDED__ + +#include "../common.h" + +class KeyFrameTriangle +{ +public: + uint32_t vertices[3]; + uint32_t texCoords[3]; +}; + +#endif