From a47eefe92ef4a4f7899471e6626f167e7faf4399 Mon Sep 17 00:00:00 2001 From: Anakin Date: Thu, 1 Dec 2016 19:51:11 +0100 Subject: [PATCH] move the model to the center, clean up variables, use delete[] --- MshViewer/Header/Object.h | 2 +- MshViewer/Header/OpenGLController.h | 1 + MshViewer/Source/Object.cpp | 16 ++++++++++++---- MshViewer/Source/OpenGlController.cpp | 14 ++++++++++---- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/MshViewer/Header/Object.h b/MshViewer/Header/Object.h index 1dab18b..91e927a 100644 --- a/MshViewer/Header/Object.h +++ b/MshViewer/Header/Object.h @@ -71,5 +71,5 @@ private: public: std::vector* getModels() const; std::vector getTextureList() const; - + Bbox getBoundgBox() const; }; diff --git a/MshViewer/Header/OpenGLController.h b/MshViewer/Header/OpenGLController.h index 33ed4ea..5e781c3 100644 --- a/MshViewer/Header/OpenGLController.h +++ b/MshViewer/Header/OpenGLController.h @@ -72,6 +72,7 @@ private: // data std::vector* vModels = NULL; std::vector vTextures; + Bbox sceneBoundingBox; // transformation ========================= //values diff --git a/MshViewer/Source/Object.cpp b/MshViewer/Source/Object.cpp index 3dc71cd..b14d519 100644 --- a/MshViewer/Source/Object.cpp +++ b/MshViewer/Source/Object.cpp @@ -134,6 +134,9 @@ void Object::analyseMsh2Chunks(std::list& chunkList) fsMesh.read(reinterpret_cast(&boundingBox.extents[i]), sizeof(float)); } } + + for (ChunkHeader* it : tempSinfChunks) + delete it; } else if (!strcmp("MATL", it->name)) @@ -217,7 +220,7 @@ void Object::analyseMatdChunks(std::list& chunkList) *buffer = { 0 }; fsMesh.read(buffer, it->size); vTextures.back() = buffer; - delete buffer; + delete[] buffer; } } } @@ -241,7 +244,7 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list& c *buffer = { 0 }; fsMesh.read(buffer, it->size); dataDestination->parent = buffer; - delete buffer; + delete[] buffer; } else if (!strcmp("NAME", it->name)) @@ -251,7 +254,7 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list& c *buffer = { 0 }; fsMesh.read(buffer, it->size); dataDestination->name = buffer; - delete buffer; + delete[] buffer; } else if (!strcmp("FLGS", it->name)) @@ -515,7 +518,7 @@ void Object::analyseClthChunks(Modl * dataDestination, std::list& tempData->textureIndex = vTextures.size() - 1; } - delete buffer; + delete[] buffer; } else if (!strcmp("CPOS", it->name)) @@ -594,6 +597,11 @@ std::vector Object::getTextureList() const return vTextures; } +Bbox Object::getBoundgBox() const +{ + return boundingBox; +} + ///////////////////////////////////////////////////////////////////////// // public functions diff --git a/MshViewer/Source/OpenGlController.cpp b/MshViewer/Source/OpenGlController.cpp index bc851c6..7ef12ee 100644 --- a/MshViewer/Source/OpenGlController.cpp +++ b/MshViewer/Source/OpenGlController.cpp @@ -122,8 +122,8 @@ void OpenGLController::deleteVectors() Segment* segmCuror = cursor->segmLst.back(); cursor->segmLst.pop_back(); - delete segmCuror->uv; - delete segmCuror->vertex; + delete[] segmCuror->uv; + delete[] segmCuror->vertex; while (!segmCuror->meshIndices.empty()) { @@ -243,8 +243,13 @@ glm::mat4 OpenGLController::getMVPMatrix(unsigned int index) m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationY, glm::vec3(0, 1, 0)); m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationZ, glm::vec3(0, 0, 1)); + glm::mat4 m4x4ModelCenter = glm::translate( + glm::mat4(1.0f), + glm::vec3(-sceneBoundingBox.center[0], -sceneBoundingBox.center[1], -sceneBoundingBox.center[2]) + ); + // Return MVP - return m4x4Projection * m4x4View * m4x4ModelRot * getModelMatrix(index); + return m4x4Projection * m4x4View * m4x4ModelRot * m4x4ModelCenter * getModelMatrix(index); } @@ -378,11 +383,12 @@ void OpenGLController::loadMsh(const char * path) Object obj(path); vModels = obj.getModels(); tempTexList = obj.getTextureList(); + sceneBoundingBox = obj.getBoundgBox(); } catch (std::invalid_argument e) { MessageBox(NULL, e.what(), "MeshViewer 2.0 Error", MB_OK | MB_ICONERROR); - return; exit(1); + return; } // collect vertex data of all models