- if (atom != "SURF") throw std::runtime_error("uh oh");
-
- read_hex(stream);
-
- int material = 0;
- stream >> atom;
- if (atom == "mat") stream >> material >> atom;
-
- if (atom != "refs")
- {
- throw std::runtime_error("blaaaaaaaahhh!!");
- }
-
- int numrefs = 0;
- stream >> numrefs;
- ASSERT(numrefs >= 3);
-
- if ((int)obj->faces.size() <= material)
- {
- obj->faces.resize(material + 1);
- }
- material_group& face = obj->faces[material];
-
- unsigned vert;
- stream >> vert;
- vector2 uv = read_pair(stream);
- if (vert < face.triangles_uv.size())
- {
- if (uv != face.triangles_uv[vert])
- {
- obj->verts.push_back(obj->verts[vert]);
- face.triangles_uv.resize(obj->verts.size());
- vert = obj->verts.size() - 1;
- }
- }
- else face.triangles_uv.resize(vert + 1);
- face.triangles_uv[vert] = uv;
- face.triangles.push_back(vert);
-
- unsigned first = vert;
-
- stream >> vert;
- uv = read_pair(stream);
- if (vert < face.triangles_uv.size())
- {
- if (uv != face.triangles_uv[vert])
- {
- obj->verts.push_back(obj->verts[vert]);
- face.triangles_uv.resize(obj->verts.size());
- vert = obj->verts.size() - 1;
- }
- }
- else face.triangles_uv.resize(vert + 1);
- face.triangles_uv[vert] = uv;
- face.triangles.push_back(vert);
-
- stream >> vert;
- uv = read_pair(stream);
- if (vert < face.triangles_uv.size())
- {
- if (uv != face.triangles_uv[vert])
- {
- obj->verts.push_back(obj->verts[vert]);
- face.triangles_uv.resize(obj->verts.size());
- vert = obj->verts.size() - 1;
- }
- }
- else face.triangles_uv.resize(vert + 1);
- face.triangles_uv[vert] = uv;
- face.triangles.push_back(vert);
-
- unsigned last = vert;
-
- for (int j = 3; j < numrefs; ++j)
- {
- face.triangles.push_back(first);
- face.triangles.push_back(last);
-
- stream >> vert;
- uv = read_pair(stream);
- if (vert < face.triangles_uv.size())
- {
- if (uv != face.triangles_uv[vert])
- {
- obj->verts.push_back(obj->verts[vert]);
- face.triangles_uv.resize(obj->verts.size());
- vert = obj->verts.size() - 1;
- }
- }
- else face.triangles_uv.resize(vert + 1);
- face.triangles_uv[vert] = uv;
- face.triangles.push_back(vert);
-
- last = face.triangles.back();
- }