From 757f3a0666afd7fd9f29b3d449ce76e6ab168c82 Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 24 Apr 2011 20:19:05 -0400 Subject: [PATCH] add functions to write out keyframe related chunks --- MeshConverter/src/chunks/chunks.cpp | 74 +++++++++++++++++++++++++++++ MeshConverter/src/chunks/chunks.h | 6 +++ 2 files changed, 80 insertions(+) diff --git a/MeshConverter/src/chunks/chunks.cpp b/MeshConverter/src/chunks/chunks.cpp index 6c60222..4a37843 100644 --- a/MeshConverter/src/chunks/chunks.cpp +++ b/MeshConverter/src/chunks/chunks.cpp @@ -138,3 +138,77 @@ void WriteChunk(TrianglesChunk *chunk, FILE *fp) fwrite(&t->materialIndex, sizeof(uint32_t), 1, fp); } } + +void WriteChunk(KeyFramesChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("KFR", fp); + fwrite(&size, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); + + for (uint32_t i = 0; i < count; ++i) + { + KeyFrame *f = &chunk->frames[i]; + + fwrite(&f->vertex.x, sizeof(float), 1, fp); + fwrite(&f->vertex.y, sizeof(float), 1, fp); + fwrite(&f->vertex.z, sizeof(float), 1, fp); + + fwrite(&f->normal.x, sizeof(float), 1, fp); + fwrite(&f->normal.y, sizeof(float), 1, fp); + fwrite(&f->normal.z, sizeof(float), 1, fp); + } +} + +void WriteChunk(KeyFrameTrianglesChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("KTR", fp); + fwrite(&size, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); + + for (uint32_t i = 0; i < count; ++i) + { + KeyFrameTriangle *t = &chunk->triangles[i]; + + fwrite(&t->vertices[0], 4, 1, fp); + fwrite(&t->vertices[1], 4, 1, fp); + fwrite(&t->vertices[2], 4, 1, fp); + + fwrite(&t->texCoords[0], 4, 1, fp); + fwrite(&t->texCoords[1], 4, 1, fp); + fwrite(&t->texCoords[2], 4, 1, fp); + } +} + +void WriteChunk(AnimationsChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("ANI", fp); + fwrite(&size, 4, 1, fp); + uint32_t count = chunk->GetCount(); + fwrite(&count, 4, 1, fp); + + for (uint32_t i = 0; i < count; ++i) + { + AnimationSequence *a = &chunk->animations[i]; + + fwrite(a->name.c_str(), a->name.length(), 1, fp); + char ch = '\0'; + fwrite(&ch, 1, 1, fp); + + fwrite(&a->start, 4, 1, fp); + fwrite(&a->end, 4, 1, fp); + } +} diff --git a/MeshConverter/src/chunks/chunks.h b/MeshConverter/src/chunks/chunks.h index 586f0e2..a7c1e8c 100644 --- a/MeshConverter/src/chunks/chunks.h +++ b/MeshConverter/src/chunks/chunks.h @@ -13,11 +13,17 @@ void WriteFileHeader(FILE *fp); #include "texcoords.h" #include "materials.h" #include "triangles.h" +#include "keyframes.h" +#include "keyframetriangles.h" +#include "animations.h" void WriteChunk(VerticesChunk *chunk, FILE *fp); void WriteChunk(NormalsChunk *chunk, FILE *fp); void WriteChunk(TexCoordsChunk *chunk, FILE *fp); void WriteChunk(MaterialsChunk *chunk, FILE *fp); void WriteChunk(TrianglesChunk *chunk, FILE *fp); +void WriteChunk(KeyFramesChunk *chunk, FILE *fp); +void WriteChunk(KeyFrameTrianglesChunk *chunk, FILE *fp); +void WriteChunk(AnimationsChunk *chunk, FILE *fp); #endif