diff --git a/MshViewer/Header/OpenGLController.h b/MshViewer/Header/OpenGLController.h index d5c9c3d..1132361 100644 --- a/MshViewer/Header/OpenGLController.h +++ b/MshViewer/Header/OpenGLController.h @@ -102,6 +102,7 @@ private: void startGLEW(); void setCallbackFunctions(); + glm::mat4 getModelMatrix(unsigned int index); glm::mat4 getMVPMatrix(unsigned int index); diff --git a/MshViewer/Source/OpenGlController.cpp b/MshViewer/Source/OpenGlController.cpp index bee631d..d2c4831 100644 --- a/MshViewer/Source/OpenGlController.cpp +++ b/MshViewer/Source/OpenGlController.cpp @@ -184,6 +184,22 @@ void OpenGLController::setCallbackFunctions() glfwSetKeyCallback(pWindow, keyPress); } +glm::mat4 OpenGLController::getModelMatrix(unsigned int index) +{ + glm::mat4 tempParentMatrix = glm::mat4(1.0f); + + for (unsigned int loop = 0; loop < vModels.size(); loop++) + { + if (!strcmp(vModels[index]->parent.c_str(), vModels[loop]->name.c_str())) + { + tempParentMatrix = getModelMatrix(loop); + break; + } + } + + return tempParentMatrix * vModels[index]->m4x4Translation; +} + glm::mat4 OpenGLController::getMVPMatrix(unsigned int index) { // Projection @@ -196,10 +212,6 @@ glm::mat4 OpenGLController::getMVPMatrix(unsigned int index) glm::vec3(0, 1, 0) ); - // Model - //TODO for all - glm::mat4 m4x4Model = vModels[index]->m4x4Translation; - // User controlled rotation glm::mat4 m4x4ModelRot = glm::mat4(1.0f); m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationX, glm::vec3(1, 0, 0)); @@ -207,7 +219,7 @@ glm::mat4 OpenGLController::getMVPMatrix(unsigned int index) m4x4ModelRot = glm::rotate(m4x4ModelRot, fRotationZ, glm::vec3(0, 0, 1)); // Return MVP - return m4x4Projection * m4x4View * m4x4ModelRot * m4x4Model; + return m4x4Projection * m4x4View * m4x4ModelRot * getModelMatrix(index); } diff --git a/MshViewer/main.cpp b/MshViewer/main.cpp index 024d5cb..531e087 100644 --- a/MshViewer/main.cpp +++ b/MshViewer/main.cpp @@ -20,8 +20,7 @@ int main(int argc, char** argv) else scene = OpenGLController::getInstance(); - scene->loadMsh("..\\Release\\Msh\\multiModTex.msh"); - //scene->loadMsh("..\\Release\\Msh\\cubeTex.msh"); + scene->loadMsh("..\\Release\\Msh\\structured.msh"); do { scene->updateScene(); diff --git a/Release/Msh/structured.msh b/Release/Msh/structured.msh new file mode 100644 index 0000000..3669c3c Binary files /dev/null and b/Release/Msh/structured.msh differ