clean up degenerate polygons better

This commit is contained in:
David Rose 2006-03-08 22:26:52 +00:00
parent d38b81dc8d
commit 84e0aaf6ea
1 changed files with 7 additions and 5 deletions

View File

@ -547,9 +547,10 @@ cleanup() {
// checks that the first and last vertices are not the
// same.
//
// This function identifies repeated vertices by pointer
// only; it does not remove consecutive equivalent but
// different vertices.
// This function identifies repeated vertices by
// position only; it does not consider any other
// properties, such as color or UV, significant in
// differentiating vertices.
////////////////////////////////////////////////////////////////////
void EggPrimitive::
remove_doubled_verts(bool closed) {
@ -563,7 +564,7 @@ remove_doubled_verts(bool closed) {
vlast = vi;
++vi;
while (vi != _vertices.end()) {
if ((*vi) != (*vlast)) {
if ((*vi)->get_pos4() != (*vlast)->get_pos4()) {
new_vertices.push_back(*vi);
} else {
prepare_remove_vertex(*vi, vi - _vertices.begin() - num_removed,
@ -580,7 +581,8 @@ remove_doubled_verts(bool closed) {
// Then, if this is a polygon (which will be closed anyway),
// remove the vertex from the end if it's a repeat of the
// beginning.
while (_vertices.size() > 1 && _vertices.back() == _vertices.front()) {
while (_vertices.size() > 1 &&
_vertices.back()->get_pos4() == _vertices.front()->get_pos4()) {
prepare_remove_vertex(_vertices.back(), _vertices.size() - 1,
_vertices.size());
_vertices.pop_back();