X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fmesh.cc;fp=src%2Fmoof%2Fmesh.cc;h=b41c377f29429514a1bcfffe48b91e16e877f3cc;hp=ee4d4b62540c22c3ff5a19c891cf145fe238ed49;hb=c143f7e806766a73cd69dc6e084e977641019ce6;hpb=1fb5f7e36af1a4de040bc2989133703b0e0d4a9f diff --git a/src/moof/mesh.cc b/src/moof/mesh.cc index ee4d4b6..b41c377 100644 --- a/src/moof/mesh.cc +++ b/src/moof/mesh.cc @@ -140,7 +140,7 @@ void mesh::import(std::istream& stream) stream >> atom >> materials_.back().shininess; stream >> atom >> materials_.back().diffuse[3]; // transparency - materials_.back().diffuse[3] = 1.0; + materials_.back().diffuse[3] = 1.0; // FIXME: temporary log_info("read material", materials_.back().name, materials_.back().diffuse); @@ -242,7 +242,7 @@ void mesh::import(std::istream& stream) int numrefs = 0; stream >> numrefs; - ASSERT(numrefs == 3 || numrefs == 4); + ASSERT(numrefs >= 3); if ((int)obj->faces.size() <= material) { @@ -254,23 +254,46 @@ void mesh::import(std::istream& stream) } material_group& face = obj->faces[material]; - for (int j = 0; j < numrefs; ++j) + + 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) { - int vert; + // 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); - vector2 uv = read_pair(stream); - - if (numrefs == 3) - { - face.triangles.push_back(vert); - face.triangles_uv.push_back(uv); - } - else - { - face.quads.push_back(vert); - face.quads_uv.push_back(uv); - } + last = face.triangles.back(); + last_uv = face.triangles_uv.back(); } } } @@ -402,12 +425,12 @@ void mesh::set_material(int index) const void mesh::set_material(const material& material) const { - //glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material.diffuse.data()); - //glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material.ambient.data()); - //glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material.specular.data()); - //glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, material.emissive.data()); - //glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material.shininess); - glColor(material.diffuse); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, material.diffuse.data()); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, material.ambient.data()); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, material.specular.data()); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, material.emissive.data()); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, material.shininess); + //glColor(material.diffuse); } @@ -425,12 +448,12 @@ void mesh::object::draw(const mesh& mesh, scalar alpha) const //glEnd(); //} - glPolygonMode(GL_BACK, GL_LINE); + //glPolygonMode(GL_BACK, GL_LINE); //glVertexPointer(3, GL_SCALAR, 0, verts[0].data()); if (texture) texture->bind(); else image::reset_binding(); - for (int i = 0; i < faces.size(); ++i) + for (size_t i = 0; i < faces.size(); ++i) { const material_group& face = faces[i]; mesh.set_material(i); @@ -448,21 +471,6 @@ void mesh::object::draw(const mesh& mesh, scalar alpha) const glVertex(verts[face.triangles[j+2]]); glEnd(); } - - count = face.quads.size(); - for (int j = 0; j < count; j += 4) - { - glBegin(GL_QUADS); - glTexCoord(face.quads_uv[j]); - glVertex(verts[face.quads[j]]); - glTexCoord(face.quads_uv[j+1]); - glVertex(verts[face.quads[j+1]]); - glTexCoord(face.quads_uv[j+2]); - glVertex(verts[face.quads[j+2]]); - glTexCoord(face.quads_uv[j+3]); - glVertex(verts[face.quads[j+3]]); - glEnd(); - } } std::vector::const_iterator jt; @@ -485,13 +493,6 @@ void mesh::material_group::draw(scalar alpha) const triangles.size(), GL_UNSIGNED_INT, &triangles[0]); } - - if (quads.size() > 0) - { - //log_info("drawing quads:", quads.size()/4); - glTexCoordPointer(2, GL_SCALAR, 0, quads_uv[0].data()); - glDrawElements(GL_QUADS, quads.size(), GL_UNSIGNED_INT, &quads[0]); - } */ }