X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Froam.c;h=d8bff628b33f939151e1def1c2c1f069a76b17d9;hb=5d4daa2b86d30c77c9828447ca1828a45713b5d6;hp=0f4995e0b56593d7bf3dc03f4d65015afb847e8e;hpb=22408daaad6f0c7b4075c2b0a725802b0659cfbe;p=grits diff --git a/src/roam.c b/src/roam.c index 0f4995e..d8bff62 100644 --- a/src/roam.c +++ b/src/roam.c @@ -21,8 +21,8 @@ * * A spherical version of the Realtime Optimally-Adapting Meshes (ROAM) * algorithm is use for drawing the surface of the planet. ROAM provide a - * continuous level-of-detail mesh of the planet which is used by #GisOpenGL - * when drawing surface textures for GisTiles. + * continuous level-of-detail mesh of the planet which is used by #GritsOpenGL + * when drawing surface textures for GritsTiles. * * This implementation of the ROAM algorithm is based on an octahedron as the * base model. @@ -35,7 +35,7 @@ #include #include "gpqueue.h" -#include "gis-util.h" +#include "grits-util.h" #include "roam.h" /* @@ -206,27 +206,10 @@ RoamTriangle *roam_triangle_new(RoamPoint *l, RoamPoint *m, RoamPoint *r, // triangle->split->lat, l->lat); /* Update normal */ - double pa[3]; - double pb[3]; - pa[0] = triangle->p.l->x - triangle->p.m->x; - pa[1] = triangle->p.l->y - triangle->p.m->y; - pa[2] = triangle->p.l->z - triangle->p.m->z; - - pb[0] = triangle->p.r->x - triangle->p.m->x; - pb[1] = triangle->p.r->y - triangle->p.m->y; - pb[2] = triangle->p.r->z - triangle->p.m->z; - - triangle->norm[0] = pa[1] * pb[2] - pa[2] * pb[1]; - triangle->norm[1] = pa[2] * pb[0] - pa[0] * pb[2]; - triangle->norm[2] = pa[0] * pb[1] - pa[1] * pb[0]; - - double total = sqrt(triangle->norm[0] * triangle->norm[0] + - triangle->norm[1] * triangle->norm[1] + - triangle->norm[2] * triangle->norm[2]); - - triangle->norm[0] /= total; - triangle->norm[1] /= total; - triangle->norm[2] /= total; + crossd3((gdouble*)triangle->p.l, + (gdouble*)triangle->p.m, + (gdouble*)triangle->p.r, triangle->norm); + normd(triangle->norm); /* Store bounding box, for get_intersect */ RoamPoint *p[] = {l,m,r}; @@ -393,7 +376,7 @@ void roam_triangle_update_errors(RoamTriangle *triangle, RoamSphere *sphere) if (roam_triangle_backface(triangle->t.l, sphere) || roam_triangle_backface(triangle->t.b, sphere) || roam_triangle_backface(triangle->t.r, sphere)) - triangle->error *= 500; + triangle->error *= 50; } } @@ -777,6 +760,7 @@ void roam_sphere_merge_one(RoamSphere *sphere) gint roam_sphere_split_merge(RoamSphere *sphere) { gint iters = 0, max_iters = 500; + //gint target = 20000; //gint target = 4000; gint target = 2000; //gint target = 500;