From dffa5a98a555060f6880d6a487a00421e64db754 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 19 Apr 2011 16:26:59 -0400 Subject: [PATCH] add readFaces() and readVertexRef() --- WFObj.cc | 35 +++++++++++++++++++++++++++++++++++ WFObj.h | 2 ++ 2 files changed, 37 insertions(+) diff --git a/WFObj.cc b/WFObj.cc index 6c9ec2e..9b88317 100644 --- a/WFObj.cc +++ b/WFObj.cc @@ -196,6 +196,9 @@ void WFObj::processInputLine(const std::string & input) m_vertices[VERTEX_NORMAL].push_back(readVertex(tokens)); else if (type == "f") { + if (m_faces.find(m_current_material_name) == m_faces.end()) + m_faces[m_current_material_name] = vector(); + m_faces[m_current_material_name].push_back(readFace(tokens)); } else if (type == "usemtl") { @@ -242,6 +245,38 @@ WFObj::Vertex WFObj::readVertex(const vector & parts) return v; } +vector WFObj::readFaces(const std::vector & parts) +{ + vector faces; + VertexRef refs[4]; + for (int i = 1, len = parts.size(); i < len && i <= 4; i++) + { + refs[i - 1] = readVertexRef(parts[i]); + } + return faces; +} + +WFObj::VertexRef WFObj::readVertexRef(const std::string ref) +{ + vector parts = splitString(ref, '/'); + VertexRef fr; + for (int i = 0, sz = parts.size(); i < sz; i++) + { + string idx_str = trimString(parts[i]); + if (idx_str.size() > 0) + { + int idx = atoi(idx_str.c_str()); + switch (i) + { + case 0: fr.vertex = idx; break; + case 1: fr.texture = idx; break; + case 2: fr.normal = idx; break; + } + } + } + return fr; +} + diff --git a/WFObj.h b/WFObj.h index 377a234..4ecf5d3 100644 --- a/WFObj.h +++ b/WFObj.h @@ -90,6 +90,8 @@ protected: void clear(); void processInputLine(const std::string & input); Vertex readVertex(const std::vector & parts); + std::vector readFaces(const std::vector & parts); + VertexRef readVertexRef(const std::string ref); void updateAABB(const float * const vertex); static Buffer loadfile(const char *path); std::string getLine(const Buff & buff, size_t idx, size_t *update_idx);