From 6346c34f36cc1ac2989eb16212b8776cdf418883 Mon Sep 17 00:00:00 2001 From: gered Date: Sun, 24 Apr 2011 19:16:31 -0400 Subject: [PATCH] added utility functions for writing chunk data to a file, and moved the chunk identifiers (which wouldn't compile anyway, lol) to these utility functions --- MeshConverter/MeshConverter.vcxproj | 2 + MeshConverter/src/chunks/chunks.cpp | 132 +++++++++++++++++++++++++++ MeshConverter/src/chunks/chunks.h | 23 +++++ MeshConverter/src/chunks/materials.h | 2 - MeshConverter/src/chunks/normals.h | 2 - MeshConverter/src/chunks/texcoords.h | 2 - MeshConverter/src/chunks/triangles.h | 2 - MeshConverter/src/chunks/vertices.h | 2 - 8 files changed, 157 insertions(+), 10 deletions(-) create mode 100644 MeshConverter/src/chunks/chunks.cpp create mode 100644 MeshConverter/src/chunks/chunks.h diff --git a/MeshConverter/MeshConverter.vcxproj b/MeshConverter/MeshConverter.vcxproj index ed5b5ef..dab0dc9 100644 --- a/MeshConverter/MeshConverter.vcxproj +++ b/MeshConverter/MeshConverter.vcxproj @@ -80,6 +80,7 @@ + @@ -90,6 +91,7 @@ + diff --git a/MeshConverter/src/chunks/chunks.cpp b/MeshConverter/src/chunks/chunks.cpp new file mode 100644 index 0000000..2404eb9 --- /dev/null +++ b/MeshConverter/src/chunks/chunks.cpp @@ -0,0 +1,132 @@ +#include "chunks.h" + +void WriteFileHeader(FILE *fp) +{ +} + +void WriteChunk(VerticesChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("VTX", fp); + fwrite(&size, 4, 1, fp); + fwrite(&chunk->count, 4, 1, fp); + + for (uint32_t i = 0; i < chunk->count; ++i) + { + fwrite(&chunk->vertices[i].x, sizeof(float), 1, fp); + fwrite(&chunk->vertices[i].y, sizeof(float), 1, fp); + fwrite(&chunk->vertices[i].z, sizeof(float), 1, fp); + } +} + +void WriteChunk(NormalsChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("NRL", fp); + fwrite(&size, 4, 1, fp); + fwrite(&chunk->count, 4, 1, fp); + + for (uint32_t i = 0; i < chunk->count; ++i) + { + fwrite(&chunk->normals[i].x, sizeof(float), 1, fp); + fwrite(&chunk->normals[i].y, sizeof(float), 1, fp); + fwrite(&chunk->normals[i].z, sizeof(float), 1, fp); + } +} + +void WriteChunk(TexCoordsChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("TXT", fp); + fwrite(&size, 4, 1, fp); + fwrite(&chunk->count, 4, 1, fp); + + for (uint32_t i = 0; i < chunk->count; ++i) + { + fwrite(&chunk->texCoords[i].x, sizeof(float), 1, fp); + fwrite(&chunk->texCoords[i].y, sizeof(float), 1, fp); + } +} + +void WriteChunk(MaterialsChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("MTL", fp); + fwrite(&size, 4, 1, fp); + fwrite(&chunk->count, 4, 1, fp); + + for (uint32_t i = 0; i < chunk->count; ++i) + { + Material *m = &chunk->materials[i]; + + fwrite(m->name.c_str(), m->name.length(), 1, fp); + char ch = '\0'; + fwrite(&ch, 1, 1, fp); + + fwrite(&m->ambient.r, sizeof(float), 1, fp); + fwrite(&m->ambient.g, sizeof(float), 1, fp); + fwrite(&m->ambient.b, sizeof(float), 1, fp); + fwrite(&m->ambient.a, sizeof(float), 1, fp); + + fwrite(&m->diffuse.r, sizeof(float), 1, fp); + fwrite(&m->diffuse.g, sizeof(float), 1, fp); + fwrite(&m->diffuse.b, sizeof(float), 1, fp); + fwrite(&m->diffuse.a, sizeof(float), 1, fp); + + fwrite(&m->specular.r, sizeof(float), 1, fp); + fwrite(&m->specular.g, sizeof(float), 1, fp); + fwrite(&m->specular.b, sizeof(float), 1, fp); + fwrite(&m->specular.a, sizeof(float), 1, fp); + + fwrite(&m->emissive.r, sizeof(float), 1, fp); + fwrite(&m->emissive.g, sizeof(float), 1, fp); + fwrite(&m->emissive.b, sizeof(float), 1, fp); + fwrite(&m->emissive.a, sizeof(float), 1, fp); + + fwrite(&m->shininess, sizeof(float), 1, fp); + + fwrite(&m->opacity, sizeof(float), 1, fp); + } +} + +void WriteChunk(TrianglesChunk *chunk, FILE *fp) +{ + uint32_t size = chunk->GetSize(); + if (size == 0) + return; + + fputs("TRI", fp); + fwrite(&size, 4, 1, fp); + fwrite(&chunk->count, 4, 1, fp); + + for (uint32_t i = 0; i < chunk->count; ++i) + { + Triangle *t = &chunk->triangles[i]; + + fwrite(&t->vertices[0], sizeof(uint32_t), 1, fp); + fwrite(&t->vertices[1], sizeof(uint32_t), 1, fp); + fwrite(&t->vertices[2], sizeof(uint32_t), 1, fp); + + fwrite(&t->normals[0], sizeof(uint32_t), 1, fp); + fwrite(&t->normals[1], sizeof(uint32_t), 1, fp); + fwrite(&t->normals[2], sizeof(uint32_t), 1, fp); + + fwrite(&t->texCoords[0], sizeof(uint32_t), 1, fp); + fwrite(&t->texCoords[1], sizeof(uint32_t), 1, fp); + fwrite(&t->texCoords[2], sizeof(uint32_t), 1, fp); + + fwrite(&t->materialIndex, sizeof(uint32_t), 1, fp); + } +} diff --git a/MeshConverter/src/chunks/chunks.h b/MeshConverter/src/chunks/chunks.h new file mode 100644 index 0000000..586f0e2 --- /dev/null +++ b/MeshConverter/src/chunks/chunks.h @@ -0,0 +1,23 @@ +#ifndef __CHUNKS_CHUNKS_H_INCLUDED__ +#define __CHUNKS_CHUNKS_H_INCLUDED__ + +#include "../common.h" +#include + +void WriteFileHeader(FILE *fp); + +// to be perfectly honest, i don't care to come up with a really elegant solution for this converter tool :p + +#include "vertices.h" +#include "normals.h" +#include "texcoords.h" +#include "materials.h" +#include "triangles.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); + +#endif diff --git a/MeshConverter/src/chunks/materials.h b/MeshConverter/src/chunks/materials.h index 37a96f5..81d6fe1 100644 --- a/MeshConverter/src/chunks/materials.h +++ b/MeshConverter/src/chunks/materials.h @@ -6,8 +6,6 @@ struct MaterialsChunk { - static const char *ident = "MTL"; - uint32_t count; Material *materials; diff --git a/MeshConverter/src/chunks/normals.h b/MeshConverter/src/chunks/normals.h index 93a8b4d..a954c4a 100644 --- a/MeshConverter/src/chunks/normals.h +++ b/MeshConverter/src/chunks/normals.h @@ -6,8 +6,6 @@ struct NormalsChunk { - static const char *ident = "NRL"; - uint32_t count; Vector3 *normals; diff --git a/MeshConverter/src/chunks/texcoords.h b/MeshConverter/src/chunks/texcoords.h index 98be852..ce8cfc3 100644 --- a/MeshConverter/src/chunks/texcoords.h +++ b/MeshConverter/src/chunks/texcoords.h @@ -6,8 +6,6 @@ struct TexCoordsChunk { - static const char *ident = "TXT"; - uint32_t count; Vector2 *texCoords; diff --git a/MeshConverter/src/chunks/triangles.h b/MeshConverter/src/chunks/triangles.h index b5936ac..5d52f0c 100644 --- a/MeshConverter/src/chunks/triangles.h +++ b/MeshConverter/src/chunks/triangles.h @@ -6,8 +6,6 @@ struct TrianglesChunk { - static const char *ident = "TRI"; - uint32_t count; Triangle *triangles; diff --git a/MeshConverter/src/chunks/vertices.h b/MeshConverter/src/chunks/vertices.h index 857b59c..8e8dccb 100644 --- a/MeshConverter/src/chunks/vertices.h +++ b/MeshConverter/src/chunks/vertices.h @@ -6,8 +6,6 @@ struct VerticesChunk { - static const char *ident = "VTX"; - uint32_t count; Vector3 *vertices;