Thank you very much for this library! 🙇
In update_triangles it should be possible to skip re-calculating errors for the edges opposed to collapsed vertex:
Before
void update_triangles(int i0,Vertex &v,std::vector<int> &deleted,int &deleted_triangles)
{
vec3f p;
loopk(0,v.tcount)
{
Ref &r=refs[v.tstart+k];
Triangle &t=triangles[r.tid];
if(t.deleted)continue;
if(deleted[k])
{
t.deleted=1;
deleted_triangles++;
continue;
}
t.v[r.tvertex]=i0;
t.dirty=1;
t.err[0]=calculate_error(t.v[0],t.v[1],p);
t.err[1]=calculate_error(t.v[1],t.v[2],p);
t.err[2]=calculate_error(t.v[2],t.v[0],p);
t.err[3]=min(t.err[0],min(t.err[1],t.err[2]));
refs.push_back(r);
}
}
After
void update_triangles(int i0,Vertex &v,std::vector<int> &deleted,int &deleted_triangles)
{
vec3f p;
loopk(0,v.tcount)
{
Ref &r=refs[v.tstart+k];
Triangle &t=triangles[r.tid];
if(t.deleted)continue;
if(deleted[k])
{
t.deleted=1;
deleted_triangles++;
continue;
}
const int vi0=t.v[r.tvertex], vi1=t.v[(r.tvertex+1)%3], vi2=t.v[(r.tvertex+2)%3];
t.v[vi0]=i0;
t.dirty=1;
t.err[vi0]=calculate_error(i0,t.v[vi1],p);
t.err[vi2]=calculate_error(t.v[vi2],i0,p);
t.err[3]=min(t.err[0],min(t.err[1],t.err[2]));
refs.push_back(r);
}
}
Please let me know what you think.
Thank you very much for this library! 🙇
In
update_trianglesit should be possible to skip re-calculating errors for the edges opposed to collapsed vertex:Before
After
Please let me know what you think.