]> Pileus Git - grits/blobdiff - src/roam.c
Add timeout for http servers
[grits] / src / roam.c
index 0f4995e0b56593d7bf3dc03f4d65015afb847e8e..d8bff628b33f939151e1def1c2c1f069a76b17d9 100644 (file)
@@ -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 <GL/glu.h>
 
 #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;