- if (atom != "SURF") throw std::runtime_error("uh oh");
-
- int flags = read_hex(stream);
- log_info(flags);
-
- 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)
- {
- log_info("inserting face...");
- //obj->faces.insert(obj->faces.begin() + material,
- //material_group());
- obj->faces.resize(material + 1);
- log_info("inserted face", material, obj->faces.size());
- }
-
- material_group& face = obj->faces[material];
-
- int vert;
- stream >> vert;
- vector2 uv = read_pair(stream);
- face.triangles.push_back(vert);
- face.triangles_uv.push_back(uv);
-
- unsigned first = face.triangles.back();
- vector2 first_uv = face.triangles_uv.back();
-
- stream >> vert;
- uv = read_pair(stream);
- face.triangles.push_back(vert);
- face.triangles_uv.push_back(uv);
-
- stream >> vert;
- uv = read_pair(stream);
- face.triangles.push_back(vert);
- face.triangles_uv.push_back(uv);
-
- unsigned last = face.triangles.back();
- vector2 last_uv = face.triangles_uv.back();
-
- for (int j = 3; j < numrefs; ++j)
- {
- // first
- face.triangles.push_back(first);
- face.triangles_uv.push_back(first_uv);
-
- // last
- face.triangles.push_back(last);
- face.triangles_uv.push_back(last_uv);
-
- stream >> vert;
- uv = read_pair(stream);
- face.triangles.push_back(vert);
- face.triangles_uv.push_back(uv);
-
- last = face.triangles.back();
- last_uv = face.triangles_uv.back();
- }