From 650e317c047fe50e535ed05761cdf7dc42f93d21 Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 1 Apr 2013 03:03:02 +0200 Subject: [PATCH] Fixed OBJ loader Former-commit-id: 492b5fa542b8744021ff11de4d0e4492a28203ac --- src/Nazara/3D/Loaders/OBJ/OBJParser.cpp | 60 +++++++++++-------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/src/Nazara/3D/Loaders/OBJ/OBJParser.cpp b/src/Nazara/3D/Loaders/OBJ/OBJParser.cpp index b0f5b749c..4183f3914 100644 --- a/src/Nazara/3D/Loaders/OBJ/OBJParser.cpp +++ b/src/Nazara/3D/Loaders/OBJ/OBJParser.cpp @@ -137,42 +137,36 @@ bool NzOBJParser::Parse() int& p = face.vertices[i].position; 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--; - t--; - n--; - } - else if (std::sscanf(&m_currentLine[pos], "%d//%d%n", &p, &n, &offset) == 2) - { - p--; - n--; - t = -1; - } - else if (std::sscanf(&m_currentLine[pos], "%d/%d%n", &p, &t, &offset) == 2) - { - p--; - n = -1; - t--; - } - else if (std::sscanf(&m_currentLine[pos], "%d%n", &p, &offset) == 1) - { - p--; - n = -1; - t = -1; - } - else - { - #if NAZARA_UTILITY_STRICT_RESOURCE_PARSING - UnrecognizedLine(); - #endif - error = true; - break; + if (std::sscanf(&m_currentLine[pos], "%d//%d%n", &p, &n, &offset) != 2) + { + if (std::sscanf(&m_currentLine[pos], "%d/%d%n", &p, &t, &offset) != 2) + { + if (std::sscanf(&m_currentLine[pos], "%d%n", &p, &offset) != 1) + { + #if NAZARA_UTILITY_STRICT_RESOURCE_PARSING + UnrecognizedLine(); + #endif + error = true; + break; + } + else + { + n = 0; + t = 0; + } + } + else + n = 0; + } + else + t = 0; } if (p < 0) { - p += m_positions.size() + 1; + p += m_positions.size(); if (p < 0) { Error("Vertex index out of range (" + NzString::Number(p) + " < 0"); @@ -185,7 +179,7 @@ bool NzOBJParser::Parse() if (n < 0) { - n += m_normals.size() + 1; + n += m_normals.size(); if (n < 0) { Error("Vertex index out of range (" + NzString::Number(n) + " < 0"); @@ -198,7 +192,7 @@ bool NzOBJParser::Parse() if (t < 0) { - t += m_texCoords.size() + 1; + t += m_texCoords.size(); if (t < 0) { Error("Vertex index out of range (" + NzString::Number(t) + " < 0");