add readFaces() and readVertexRef()

This commit is contained in:
Josh Holtrop 2011-04-19 16:26:59 -04:00
parent 476f4cde66
commit dffa5a98a5
2 changed files with 37 additions and 0 deletions

View File

@ -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<Face>();
m_faces[m_current_material_name].push_back(readFace(tokens));
}
else if (type == "usemtl")
{
@ -242,6 +245,38 @@ WFObj::Vertex WFObj::readVertex(const vector<string> & parts)
return v;
}
vector<WFObj::Face> WFObj::readFaces(const std::vector<std::string> & parts)
{
vector<Face> 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<string> 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;
}

View File

@ -90,6 +90,8 @@ protected:
void clear();
void processInputLine(const std::string & input);
Vertex readVertex(const std::vector<std::string> & parts);
std::vector<Face> readFaces(const std::vector<std::string> & 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);