Fixed OBJ loader

Former-commit-id: 492b5fa542b8744021ff11de4d0e4492a28203ac
This commit is contained in:
Lynix 2013-04-01 03:03:02 +02:00
parent 8c942ef19b
commit 650e317c04
1 changed files with 27 additions and 33 deletions

View File

@ -137,42 +137,36 @@ bool NzOBJParser::Parse()
int& p = face.vertices[i].position; int& p = face.vertices[i].position;
int& t = face.vertices[i].texCoord; int& t = face.vertices[i].texCoord;
if (std::sscanf(&m_currentLine[pos], "%d/%d/%d%n", &p, &t, &n, &offset) == 3) if (std::sscanf(&m_currentLine[pos], "%d/%d/%d%n", &p, &t, &n, &offset) != 3)
{ {
p--; if (std::sscanf(&m_currentLine[pos], "%d//%d%n", &p, &n, &offset) != 2)
t--; {
n--; if (std::sscanf(&m_currentLine[pos], "%d/%d%n", &p, &t, &offset) != 2)
} {
else if (std::sscanf(&m_currentLine[pos], "%d//%d%n", &p, &n, &offset) == 2) if (std::sscanf(&m_currentLine[pos], "%d%n", &p, &offset) != 1)
{ {
p--; #if NAZARA_UTILITY_STRICT_RESOURCE_PARSING
n--; UnrecognizedLine();
t = -1; #endif
} error = true;
else if (std::sscanf(&m_currentLine[pos], "%d/%d%n", &p, &t, &offset) == 2) break;
{ }
p--; else
n = -1; {
t--; n = 0;
} t = 0;
else if (std::sscanf(&m_currentLine[pos], "%d%n", &p, &offset) == 1) }
{ }
p--; else
n = -1; n = 0;
t = -1; }
} else
else t = 0;
{
#if NAZARA_UTILITY_STRICT_RESOURCE_PARSING
UnrecognizedLine();
#endif
error = true;
break;
} }
if (p < 0) if (p < 0)
{ {
p += m_positions.size() + 1; p += m_positions.size();
if (p < 0) if (p < 0)
{ {
Error("Vertex index out of range (" + NzString::Number(p) + " < 0"); Error("Vertex index out of range (" + NzString::Number(p) + " < 0");
@ -185,7 +179,7 @@ bool NzOBJParser::Parse()
if (n < 0) if (n < 0)
{ {
n += m_normals.size() + 1; n += m_normals.size();
if (n < 0) if (n < 0)
{ {
Error("Vertex index out of range (" + NzString::Number(n) + " < 0"); Error("Vertex index out of range (" + NzString::Number(n) + " < 0");
@ -198,7 +192,7 @@ bool NzOBJParser::Parse()
if (t < 0) if (t < 0)
{ {
t += m_texCoords.size() + 1; t += m_texCoords.size();
if (t < 0) if (t < 0)
{ {
Error("Vertex index out of range (" + NzString::Number(t) + " < 0"); Error("Vertex index out of range (" + NzString::Number(t) + " < 0");