texture is now correctly detected and used,

there seams to be a problem with the UV. They are not correctly
This commit is contained in:
Anakin 2016-10-22 15:35:06 +02:00
parent be97fa8e6f
commit 4f52510ff9
5 changed files with 18 additions and 9 deletions

View File

@ -135,9 +135,14 @@ void Object::analyseMsh2Chunks(std::list<ChunkHeader*>& chunkList)
{ {
if (!strcmp("MATL", (*it)->name)) if (!strcmp("MATL", (*it)->name))
{ {
// "useless" information how many MATD follow
fsMesh.seekg((*it)->position);
std::uint32_t tempMatdCount;
fsMesh.read(reinterpret_cast<char*>(&tempMatdCount), sizeof(std::uint32_t));
// get all MATD from MATL list // get all MATD from MATL list
std::list<ChunkHeader*> tempMatlChunks; std::list<ChunkHeader*> tempMatlChunks;
loadChunks(tempMatlChunks, (*it)->position, (*it)->size); loadChunks(tempMatlChunks, fsMesh.tellg(), (*it)->size - 4);
// evaluate MATL subchunks // evaluate MATL subchunks
for (std::list<ChunkHeader*>::iterator it = tempMatlChunks.begin(); it != tempMatlChunks.end(); it++) for (std::list<ChunkHeader*>::iterator it = tempMatlChunks.begin(); it != tempMatlChunks.end(); it++)
@ -383,13 +388,13 @@ void Object::analyseSegmChunks(Modl * dataDestination, std::list<ChunkHeader*>&
fsMesh.seekg((*it)->position); fsMesh.seekg((*it)->position);
std::uint32_t tempIndex; std::uint32_t tempIndex;
fsMesh.read(reinterpret_cast<char*>(&tempIndex), sizeof(tempIndex)); fsMesh.read(reinterpret_cast<char*>(&tempIndex), sizeof(tempIndex));
if (vTextures.size() < tempIndex - 1) if (vTextures.size() <= tempIndex)
{ {
std::cout << "warning texture index <" << tempIndex << "> unknown" << std::endl; std::cout << "warning texture index <" << tempIndex << "> unknown" << std::endl;
dataDestination->texture = ""; dataDestination->texture = "";
continue; continue;
} }
dataDestination->texture = vTextures[tempIndex - 1]; dataDestination->texture = vTextures[tempIndex];
continue; continue;
} }

View File

@ -12,7 +12,7 @@
#define VERTEX_SHADER "Shader/VertexTextureShader.mv2shdr" #define VERTEX_SHADER "Shader/VertexTextureShader.mv2shdr"
#define FRAGMENT_SHADER "Shader/FragmentTextureShader.mv2shdr" #define FRAGMENT_SHADER "Shader/FragmentTextureShader.mv2shdr"
#define TEXTURE_NAME "Textures/texture32R.tga" //#define TEXTURE_NAME "Textures/texture32R.tga"
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// public constructor/destructor // public constructor/destructor
@ -281,11 +281,13 @@ void OpenGLController::loadMsh(const char * path)
gluiSamplerID = glGetUniformLocation(gluiShaderPrgmID, "textureSampler"); gluiSamplerID = glGetUniformLocation(gluiShaderPrgmID, "textureSampler");
// get data // get data
std::list<std::string> listTextures;
try try
{ {
Object obj(path); Object obj(path);
vfVertices = obj.getVertex(); vfVertices = obj.getVertex();
vfUV = obj.getUV(); vfUV = obj.getUV();
listTextures = obj.getTexture();
} }
catch (std::invalid_argument e) catch (std::invalid_argument e)
{ {
@ -296,15 +298,17 @@ void OpenGLController::loadMsh(const char * path)
glGenTextures(1, &gluiTextureID); glGenTextures(1, &gluiTextureID);
glBindTexture(GL_TEXTURE_2D, gluiTextureID); glBindTexture(GL_TEXTURE_2D, gluiTextureID);
std::list<std::string> listTextures;
try try
{ {
if (listTextures.empty()) if (listTextures.empty())
throw std::invalid_argument("no texture names"); 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()); 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) catch (std::invalid_argument e)

View File

@ -28,7 +28,7 @@ openGL:
OpenGLController *scene = OpenGLController::getInstance(); OpenGLController *scene = OpenGLController::getInstance();
scene->loadMsh("..\\Release\\Msh\\cube.msh"); scene->loadMsh("..\\Release\\Msh\\cubeTex.msh");
do { do {
scene->updateScene(); scene->updateScene();

BIN
Release/Msh/cubeTex.msh Normal file

Binary file not shown.