/*
- * Copyright (C) 2009-2010 Andy Spencer <andy753421@gmail.com>
+ * Copyright (C) 2009-2011 Andy Spencer <andy753421@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* 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.
#include <glib.h>
#include <math.h>
#include <string.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
+#include "gtkgl.h"
#include "gpqueue.h"
-#include "gis-util.h"
+#include "grits-util.h"
#include "roam.h"
/*
// 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};
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;
}
}
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;