From 4f52510ff95a58a59b4ab33c234aac8352a548f4 Mon Sep 17 00:00:00 2001 From: Anakin Date: Sat, 22 Oct 2016 15:35:06 +0200 Subject: [PATCH] texture is now correctly detected and used, there seams to be a problem with the UV. They are not correctly --- MshViewer/Source/Object.cpp | 11 ++++++++--- MshViewer/Source/OpenGlController.cpp | 14 +++++++++----- MshViewer/main.cpp | 2 +- Release/Msh/cubeTex.msh | Bin 0 -> 1376 bytes Release/{Textures => Msh}/texture32R.tga | Bin 5 files changed, 18 insertions(+), 9 deletions(-) create mode 100644 Release/Msh/cubeTex.msh rename Release/{Textures => Msh}/texture32R.tga (100%) diff --git a/MshViewer/Source/Object.cpp b/MshViewer/Source/Object.cpp index 4d5a5b4..316c74b 100644 --- a/MshViewer/Source/Object.cpp +++ b/MshViewer/Source/Object.cpp @@ -135,9 +135,14 @@ void Object::analyseMsh2Chunks(std::list& chunkList) { if (!strcmp("MATL", (*it)->name)) { + // "useless" information how many MATD follow + fsMesh.seekg((*it)->position); + std::uint32_t tempMatdCount; + fsMesh.read(reinterpret_cast(&tempMatdCount), sizeof(std::uint32_t)); + // get all MATD from MATL list std::list tempMatlChunks; - loadChunks(tempMatlChunks, (*it)->position, (*it)->size); + loadChunks(tempMatlChunks, fsMesh.tellg(), (*it)->size - 4); // evaluate MATL subchunks for (std::list::iterator it = tempMatlChunks.begin(); it != tempMatlChunks.end(); it++) @@ -383,13 +388,13 @@ void Object::analyseSegmChunks(Modl * dataDestination, std::list& fsMesh.seekg((*it)->position); std::uint32_t tempIndex; fsMesh.read(reinterpret_cast(&tempIndex), sizeof(tempIndex)); - if (vTextures.size() < tempIndex - 1) + if (vTextures.size() <= tempIndex) { std::cout << "warning texture index <" << tempIndex << "> unknown" << std::endl; dataDestination->texture = ""; continue; } - dataDestination->texture = vTextures[tempIndex - 1]; + dataDestination->texture = vTextures[tempIndex]; continue; } diff --git a/MshViewer/Source/OpenGlController.cpp b/MshViewer/Source/OpenGlController.cpp index 2515ba3..28ace6e 100644 --- a/MshViewer/Source/OpenGlController.cpp +++ b/MshViewer/Source/OpenGlController.cpp @@ -12,7 +12,7 @@ #define VERTEX_SHADER "Shader/VertexTextureShader.mv2shdr" #define FRAGMENT_SHADER "Shader/FragmentTextureShader.mv2shdr" -#define TEXTURE_NAME "Textures/texture32R.tga" +//#define TEXTURE_NAME "Textures/texture32R.tga" ///////////////////////////////////////////////////////////////////////// // public constructor/destructor @@ -281,11 +281,13 @@ void OpenGLController::loadMsh(const char * path) gluiSamplerID = glGetUniformLocation(gluiShaderPrgmID, "textureSampler"); // get data + std::list listTextures; try { Object obj(path); vfVertices = obj.getVertex(); vfUV = obj.getUV(); + listTextures = obj.getTexture(); } catch (std::invalid_argument e) { @@ -296,15 +298,17 @@ void OpenGLController::loadMsh(const char * path) glGenTextures(1, &gluiTextureID); glBindTexture(GL_TEXTURE_2D, gluiTextureID); - std::list listTextures; - - try { if (listTextures.empty()) throw std::invalid_argument("no texture names"); - TextureTGA tempTex(listTextures.front().c_str()); + std::string tempPath = path; + + while (tempPath.back() != '/' && tempPath.back() != '\\') + tempPath.pop_back(); + + TextureTGA tempTex(std::string(tempPath + listTextures.front()).c_str()); glTexImage2D(GL_TEXTURE_2D, 0, tempTex.hasAlpha() ? GL_RGBA : GL_RGB, tempTex.getWidth(), tempTex.getHeight(), 0, tempTex.hasAlpha() ? GL_BGRA : GL_BGR, GL_UNSIGNED_BYTE, tempTex.getData().data()); } catch (std::invalid_argument e) diff --git a/MshViewer/main.cpp b/MshViewer/main.cpp index bcda1d0..fb2fff4 100644 --- a/MshViewer/main.cpp +++ b/MshViewer/main.cpp @@ -28,7 +28,7 @@ openGL: OpenGLController *scene = OpenGLController::getInstance(); - scene->loadMsh("..\\Release\\Msh\\cube.msh"); + scene->loadMsh("..\\Release\\Msh\\cubeTex.msh"); do { scene->updateScene(); diff --git a/Release/Msh/cubeTex.msh b/Release/Msh/cubeTex.msh new file mode 100644 index 0000000000000000000000000000000000000000..c5ebab9a16c691eeb72bf9bd66a3e752a4899786 GIT binary patch literal 1376 zcmb_bzi-oE5WSMNv=C^4@T06C#89EMVM~MKVCRQqCy{MvU;$H1K_H4ESL%SGPvRe_ zU@A+c3I-Th_ybaQ1{PEn5EBzfpsozub92&{kO^Vw`MtY$-`(YtQ?)IxHAdw6)%hy3 zU#pjI6H(oC?F_TO6g`Y?T(<*z?a@j*j^LF&(@isvFc1^{G)tvMYc|pPOBs4Zq>6%_ zx1Woy890gy(1*1ZGh;4#yI~x)?}ZOol4S*7lK{FuXyHoDTSU42_&XJc+@`73-d>-5d2D)fL4x zL-ep5PDox@&;6yf|AhW+=sG#`AM1wgB{|`~nTjJu-%d$<&t~s?8@l8DkI(Ym z59b!X?QRve*54EmgXd0f=3i%T8kybSg-`1p