From 1968d151fef10d00c4d7ad781bc697868e73043f Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 29 Feb 2020 03:04:55 +0100 Subject: Move texcoord before faces --- src/main.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/main.cpp b/src/main.cpp index a679828..87260cb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -64,20 +64,29 @@ void file_write_uint_error_check(FILE *file, unsigned int value) { } static void process_mesh(const aiScene *scene, const aiMesh *mesh, FILE *output_file) { - file_write_uint_error_check(output_file, mesh->mNumVertices); - file_write_error_check(output_file, &mesh->mVertices, mesh->mNumVertices * sizeof(aiVector3D)); - file_write_error_check(output_file, &mesh->mNormals, mesh->mNumVertices * sizeof(aiVector3D)); + // TODO: It seems like sometimes the vertice count doesn't match triangles.. excluding the last vertices in the list + unsigned int vertice_overflow = mesh->mNumVertices % 3; + unsigned int num_vertices = mesh->mNumVertices - vertice_overflow; + assert(num_vertices % 3 == 0); + file_write_uint_error_check(output_file, num_vertices); + file_write_error_check(output_file, mesh->mVertices, num_vertices * sizeof(aiVector3D)); + file_write_error_check(output_file, mesh->mNormals, num_vertices * sizeof(aiVector3D)); + + file_write_uint_error_check(output_file, mesh->mTextureCoords[0] ? 1 : 0); + if(mesh->mTextureCoords[0]) { + for(unsigned int i = 0; i < num_vertices; ++i) { + file_write_error_check(output_file, &mesh->mTextureCoords[0][i].x, sizeof(float)); + file_write_error_check(output_file, &mesh->mTextureCoords[0][i].y, sizeof(float)); + } + } file_write_uint_error_check(output_file, mesh->mNumFaces); for(unsigned int i = 0; i < mesh->mNumFaces; ++i) { // Should always be 3 since the file was loaded with aiProcess_Triangulate + assert(mesh->mFaces[i].mNumIndices == 3); file_write_error_check(output_file, mesh->mFaces[i].mIndices, 3 * sizeof(unsigned int)); } - file_write_uint_error_check(output_file, mesh->mTextureCoords[0] ? 1 : 0); - if(mesh->mTextureCoords[0]) - file_write_error_check(output_file, &mesh->mTextureCoords[0], mesh->mNumVertices * sizeof(aiVector3D)); - file_write_uint_error_check(output_file, mesh->mMaterialIndex < scene->mNumMaterials); if(mesh->mMaterialIndex < scene->mNumMaterials) { const unsigned int num_texture_types = 3; -- cgit v1.2.3