Bit more work.

This commit is contained in:
Relintai 2020-03-28 23:49:06 +01:00
parent 73f1e6b29c
commit 896540116f

View File

@ -523,9 +523,15 @@ public:
// remove vertices & mark deleted triangles // remove vertices & mark deleted triangles
for (unsigned int i = 0; i < triangles.size(); ++i) { for (unsigned int i = 0; i < triangles.size(); ++i) {
Triangle &t = triangles[i]; Triangle &t = triangles[i];
if (t.err[3] > threshold) continue;
if (t.deleted) continue; if (t.err[3] > threshold)
if (t.dirty) continue; continue;
if (t.deleted)
continue;
if (t.dirty)
continue;
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
if (t.err[j] < threshold) { if (t.err[j] < threshold) {
@ -535,7 +541,8 @@ public:
Vertex &v1 = vertices[i1]; Vertex &v1 = vertices[i1];
// Border check // Border check
if (v0.border != v1.border) continue; if (v0.border != v1.border)
continue;
// Compute vertex to collapse to // Compute vertex to collapse to
vec3f p; vec3f p;
@ -545,12 +552,15 @@ public:
deleted1.resize(v1.tcount); // normals temporarily deleted1.resize(v1.tcount); // normals temporarily
// don't remove if flipped // don't remove if flipped
if (flipped(p, i0, i1, v0, v1, deleted0)) continue; if (flipped(p, i0, i1, v0, v1, deleted0))
if (flipped(p, i1, i0, v1, v0, deleted1)) continue; continue;
if (flipped(p, i1, i0, v1, v0, deleted1))
continue;
if ((t.attr & TEXCOORD) == TEXCOORD) { if ((t.attr & TEXCOORD) == TEXCOORD) {
// update_uvs(i0, v0, p, deleted0); update_uvs(i0, v0, p, deleted0);
// update_uvs(i0, v1, p, deleted1); update_uvs(i0, v1, p, deleted1);
} }
// not flipped, so remove edge // not flipped, so remove edge
@ -566,15 +576,19 @@ public:
if (tcount <= v0.tcount) { if (tcount <= v0.tcount) {
// save ram // save ram
if (tcount) memcpy(&refs[v0.tstart], &refs[tstart], tcount * sizeof(Ref)); if (tcount) memcpy(&refs[v0.tstart], &refs[tstart], tcount * sizeof(Ref));
} else } else {
// append // append
v0.tstart = tstart; v0.tstart = tstart;
}
v0.tcount = tcount; v0.tcount = tcount;
break; break;
} }
} }
if (deleted_triangles <= 0) break;
if (deleted_triangles <= 0)
break;
deleted_triangles = 0; deleted_triangles = 0;
} //for each iteration } //for each iteration
// clean up mesh // clean up mesh
@ -724,6 +738,7 @@ public:
for (unsigned int i = 0; i < triangles.size(); ++i) { for (unsigned int i = 0; i < triangles.size(); ++i) {
Triangle &t = triangles[i]; Triangle &t = triangles[i];
for (int j = 0; j < 3; ++j) { for (int j = 0; j < 3; ++j) {
vertices[t.v[j]].tcount++; vertices[t.v[j]].tcount++;
} }
@ -829,7 +844,7 @@ public:
for (unsigned int i = 0; i < triangles.size(); ++i) { for (unsigned int i = 0; i < triangles.size(); ++i) {
Triangle &t = triangles[i]; Triangle &t = triangles[i];
//ok
//print_error("b " + String::num(t.v[0]) + " " + String::num(t.v[1]) + " " + String::num(t.v[2]) + " "); //print_error("b " + String::num(t.v[0]) + " " + String::num(t.v[1]) + " " + String::num(t.v[2]) + " ");
for (int j = 0; j < 3; ++j) { for (int j = 0; j < 3; ++j) {