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:
parent
be97fa8e6f
commit
4f52510ff9
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue