From 46c4a166c4dc7a3d9ce89452b985e1c935971ef9 Mon Sep 17 00:00:00 2001 From: Anakin Date: Fri, 2 Dec 2016 14:04:01 +0100 Subject: [PATCH] code improvement --- MshViewer/Header/Object.h | 1 + MshViewer/Source/Object.cpp | 44 ++++++++++++++++----------- MshViewer/Source/OpenGlController.cpp | 25 +++++++-------- 3 files changed, 38 insertions(+), 32 deletions(-) diff --git a/MshViewer/Header/Object.h b/MshViewer/Header/Object.h index 91e927a..ad674dc 100644 --- a/MshViewer/Header/Object.h +++ b/MshViewer/Header/Object.h @@ -66,6 +66,7 @@ private: void analyseClthChunks(Modl* dataDestination, std::list &chunkList); void readVertex(Segment* dataDestination, std::streampos position); void readUV(Segment* dataDestination, std::streampos position); + void quat2eul(float &quat0, float &quat1, float &quat2, float &quat3); public: diff --git a/MshViewer/Source/Object.cpp b/MshViewer/Source/Object.cpp index b14d519..6208b27 100644 --- a/MshViewer/Source/Object.cpp +++ b/MshViewer/Source/Object.cpp @@ -271,27 +271,16 @@ void Object::analyseModlChunks(Modl* dataDestination, std::list& c fsMesh.seekg(it->position); - //TODO: use loop - fsMesh.read(reinterpret_cast(&tempScale[0]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempScale[1]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempScale[2]), sizeof(float)); + for(int i = 0; i < 3; i++) + fsMesh.read(reinterpret_cast(&tempScale[i]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempRotation[0]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempRotation[1]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempRotation[2]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempRotation[3]), sizeof(float)); + for (int i = 0; i < 4; i++) + fsMesh.read(reinterpret_cast(&tempRotation[i]), sizeof(float)); - //TODO: make a function for this - //calculate x,y,z rotation - tempRotation[0] = atan2(2 * (tempRotation[0] * tempRotation[1] + tempRotation[2] * tempRotation[3]), - 1 - 2 * (pow(tempRotation[1], 2) + pow(tempRotation[2], 2))); - tempRotation[1] = asin(2 * (tempRotation[0] * tempRotation[2] - tempRotation[3] * tempRotation[1])); - tempRotation[2] = atan2(2 * (tempRotation[0] * tempRotation[3] + tempRotation[1] * tempRotation[2]), - 1 - 2 * (pow(tempRotation[2], 2) + pow(tempRotation[3], 2))) - PI; + quat2eul(tempRotation[0], tempRotation[1], tempRotation[2], tempRotation[3]); - fsMesh.read(reinterpret_cast(&tempTrans[0]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempTrans[1]), sizeof(float)); - fsMesh.read(reinterpret_cast(&tempTrans[2]), sizeof(float)); + for (int i = 0; i < 3; i++) + fsMesh.read(reinterpret_cast(&tempTrans[i]), sizeof(float)); dataDestination->m4x4Translation = glm::scale( dataDestination->m4x4Translation, @@ -583,6 +572,25 @@ void Object::readUV(Segment* dataDestination, std::streampos position) fsMesh.read(reinterpret_cast(&dataDestination->uv[i]), sizeof(float)); } +void Object::quat2eul(float &quat0, float &quat1, float & quat2, float &quat3) +{ + float eulX = atan2( + 2 * (quat0 * quat1 + quat2 * quat3), + 1 - 2 * (pow(quat1, 2) + pow(quat2, 2)) + ); + + float eulY = asin(2 * (quat0 * quat2 - quat3 * quat1)); + + float eulZ = atan2( + 2 * (quat0 * quat3 + quat1 * quat2), + 1 - 2 * (pow(quat2, 2) + pow(quat3, 2)) + ) - PI; + + quat0 = eulX; + quat1 = eulY; + quat2 = eulZ; +} + ///////////////////////////////////////////////////////////////////////// // public getter diff --git a/MshViewer/Source/OpenGlController.cpp b/MshViewer/Source/OpenGlController.cpp index 384c0b8..b19b5be 100644 --- a/MshViewer/Source/OpenGlController.cpp +++ b/MshViewer/Source/OpenGlController.cpp @@ -109,34 +109,31 @@ void OpenGLController::processInit() void OpenGLController::deleteVectors() { - //TODO: does .clear() work, too?? if (vModels != NULL) { while (!vModels->empty()) { - Modl* cursor = vModels->back(); + Modl* modelVectorElement = vModels->back(); vModels->pop_back(); - while (!cursor->segmLst.empty()) + while (!modelVectorElement->segmLst.empty()) { - Segment* segmCuror = cursor->segmLst.back(); - cursor->segmLst.pop_back(); + Segment* segmentVectorElement = modelVectorElement->segmLst.back(); + modelVectorElement->segmLst.pop_back(); - delete[] segmCuror->uv; - delete[] segmCuror->vertex; + delete[] segmentVectorElement->uv; + delete[] segmentVectorElement->vertex; - while (!segmCuror->meshIndices.empty()) + while (!segmentVectorElement->meshIndices.empty()) { - while (!segmCuror->meshIndices.back().empty()) - segmCuror->meshIndices.back().pop_back(); - - segmCuror->meshIndices.pop_back(); + segmentVectorElement->meshIndices.back().clear(); + segmentVectorElement->meshIndices.pop_back(); } - delete segmCuror; + delete segmentVectorElement; } - delete cursor; + delete modelVectorElement; } delete vModels; }