- self->error = sqrt((scur[0]-sgood[0])*(scur[0]-sgood[0]) +
- (scur[1]-sgood[1])*(scur[1]-sgood[1]));
-
- /* Multiply by size of triangle (todo, do this in screen space) */
- double sa[3], sb[3], sc[3];
- double *a = (double*)self->p.l;
- double *b = (double*)self->p.m;
- double *c = (double*)self->p.r;
- gluProject(a[0],a[1],a[2], model,proj,view, &sa[0],&sa[1],&sa[2]);
- gluProject(b[0],b[1],b[2], model,proj,view, &sb[0],&sb[1],&sb[2]);
- gluProject(c[0],c[1],c[2], model,proj,view, &sc[0],&sc[1],&sc[2]);
- double size = -( sa[0]*(sb[1]-sc[1]) + sb[0]*(sc[1]-sa[1]) + sc[0]*(sa[1]-sb[1]) ) / 2.0;
- //g_message("%f * %f = %f", self->error, size, self->error * size);
+ RoamPoint *l = self->p.l;
+ RoamPoint *m = self->p.m;
+ RoamPoint *r = self->p.r;
+
+ /* TODO: share this with the base */
+ RoamPoint base = { (l->x + r->x)/2,
+ (l->y + r->y)/2,
+ (l->z + r->z)/2 };
+ RoamPoint good = base;
+ roam_point_update(&base, sphere, FALSE);
+ roam_point_update(&good, sphere, TRUE);
+
+ self->error = sqrt((base.px - good.px) * (base.px - good.px) +
+ (base.py - good.py) * (base.py - good.py));
+
+ /* Multiply by size of triangle */
+ double size = -( l->px * (m->py - r->py) +
+ m->px * (r->py - l->py) +
+ r->px * (l->py - m->py) ) / 2.0;
+