Commit 7b4d76de authored by hybrid's avatar hybrid

Fixed some things in .obj texture handling.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1439 dfc29bdd-3216-0410-991c-e03cc46cb475
parent c493b739
...@@ -15,12 +15,15 @@ ...@@ -15,12 +15,15 @@
#include "IAttributes.h" #include "IAttributes.h"
#include "fast_atof.h" #include "fast_atof.h"
#include "coreutil.h" #include "coreutil.h"
#include "os.h"
namespace irr namespace irr
{ {
namespace scene namespace scene
{ {
//#define _IRR_DEBUG_OBJ_LOADER_
static const u32 WORD_BUFFER_LENGTH = 512; static const u32 WORD_BUFFER_LENGTH = 512;
//! Constructor //! Constructor
...@@ -88,6 +91,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) ...@@ -88,6 +91,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
{ {
c8 name[WORD_BUFFER_LENGTH]; c8 name[WORD_BUFFER_LENGTH];
bufPtr = goAndCopyNextWord(name, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(name, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
#ifdef _IRR_DEBUG_OBJ_LOADER_
os::Printer::log("Reading material file",name);
#endif
readMTL(name, relPath); readMTL(name, relPath);
} }
break; break;
...@@ -125,6 +131,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) ...@@ -125,6 +131,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
{ {
c8 grp[WORD_BUFFER_LENGTH]; c8 grp[WORD_BUFFER_LENGTH];
bufPtr = goAndCopyNextWord(grp, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(grp, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
#ifdef _IRR_DEBUG_OBJ_LOADER_
os::Printer::log("Loaded group start",grp);
#endif
if (useGroups) if (useGroups)
grpName = grp; grpName = grp;
} }
...@@ -134,6 +143,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) ...@@ -134,6 +143,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
{ {
c8 smooth[WORD_BUFFER_LENGTH]; c8 smooth[WORD_BUFFER_LENGTH];
bufPtr = goAndCopyNextWord(smooth, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(smooth, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
#ifdef _IRR_DEBUG_OBJ_LOADER_
os::Printer::log("Loaded smoothing group start",smooth);
#endif
if (core::stringc("off")==smooth) if (core::stringc("off")==smooth)
smoothingGroup=0; smoothingGroup=0;
else else
...@@ -146,6 +158,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file) ...@@ -146,6 +158,9 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
{ {
c8 matName[WORD_BUFFER_LENGTH]; c8 matName[WORD_BUFFER_LENGTH];
bufPtr = goAndCopyNextWord(matName, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(matName, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
#ifdef _IRR_DEBUG_OBJ_LOADER_
os::Printer::log("Loaded material start",matName);
#endif
// retrieve the material // retrieve the material
SObjMtl *useMtl = findMtl(matName, grpName); SObjMtl *useMtl = findMtl(matName, grpName);
// only change material if we found it // only change material if we found it
...@@ -295,10 +310,8 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf ...@@ -295,10 +310,8 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf
// extract new material's name // extract new material's name
c8 textureNameBuf[WORD_BUFFER_LENGTH]; c8 textureNameBuf[WORD_BUFFER_LENGTH];
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
core::stringc texname(textureNameBuf);
texname.replace('\\', '/');
f32 bumpiness = 1.0f; f32 bumpiness = 6.0f;
bool clamp = false; bool clamp = false;
// handle options // handle options
while (textureNameBuf[0]=='-') while (textureNameBuf[0]=='-')
...@@ -306,7 +319,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf ...@@ -306,7 +319,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf
if (!strncmp(bufPtr,"-bm",3)) if (!strncmp(bufPtr,"-bm",3))
{ {
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
bumpiness = core::fast_atof(textureNameBuf); currMaterial->Meshbuffer->Material.MaterialTypeParam=core::fast_atof(textureNameBuf);
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
continue;
} }
else else
if (!strncmp(bufPtr,"-blendu",7)) if (!strncmp(bufPtr,"-blendu",7))
...@@ -324,6 +339,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf ...@@ -324,6 +339,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf
if (!strncmp(bufPtr,"-texres",7)) if (!strncmp(bufPtr,"-texres",7))
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
else else
if (!strncmp(bufPtr,"-type",5))
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
else
if (!strncmp(bufPtr,"-mm",3)) if (!strncmp(bufPtr,"-mm",3))
{ {
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
...@@ -368,7 +386,8 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf ...@@ -368,7 +386,8 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf
// get next word // get next word
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
} }
if (type==1)
if ((type==1) && (core::isdigit(textureNameBuf[0])))
{ {
currMaterial->Meshbuffer->Material.MaterialTypeParam=core::fast_atof(textureNameBuf); currMaterial->Meshbuffer->Material.MaterialTypeParam=core::fast_atof(textureNameBuf);
bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd); bufPtr = goAndCopyNextWord(textureNameBuf, bufPtr, WORD_BUFFER_LENGTH, bufEnd);
...@@ -376,6 +395,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf ...@@ -376,6 +395,9 @@ const c8* COBJMeshFileLoader::readTextures(const c8* bufPtr, const c8* const buf
if (clamp) if (clamp)
currMaterial->Meshbuffer->Material.setFlag(video::EMF_TEXTURE_WRAP, video::ETC_CLAMP); currMaterial->Meshbuffer->Material.setFlag(video::EMF_TEXTURE_WRAP, video::ETC_CLAMP);
core::stringc texname(textureNameBuf);
texname.replace('\\', '/');
video::ITexture * texture = 0; video::ITexture * texture = 0;
if (FileSystem->existFile(texname.c_str())) if (FileSystem->existFile(texname.c_str()))
texture = SceneManager->getVideoDriver()->getTexture(texname.c_str()); texture = SceneManager->getVideoDriver()->getTexture(texname.c_str());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment