From 2303ef60aac043b63daec4a70a9ee7d70e0ce62f Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Mon, 1 Nov 2010 03:54:15 +0000 Subject: [PATCH] Test pure distance based errors This commit is for historic purposes and will be reverend shortly. --- src/gis-opengl.c | 6 ++++++ src/roam.c | 15 ++++++++++++++- src/roam.h | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/gis-opengl.c b/src/gis-opengl.c index e5f6468..3b4355b 100644 --- a/src/gis-opengl.c +++ b/src/gis-opengl.c @@ -249,6 +249,12 @@ static gboolean on_key_press(GisOpenGL *opengl, GdkEventKey *event, gpointer _) static gboolean _update_errors_cb(gpointer _opengl) { GisOpenGL *opengl = _opengl; + gdouble lat, lon, elev; + gis_viewer_get_location(GIS_VIEWER(opengl), &lat, &lon, &elev); + lle2xyz(lat, lon, elev, + &opengl->sphere->view->pos[0], + &opengl->sphere->view->pos[1], + &opengl->sphere->view->pos[2]); g_mutex_lock(opengl->sphere_lock); roam_sphere_update_errors(opengl->sphere); g_mutex_unlock(opengl->sphere_lock); diff --git a/src/roam.c b/src/roam.c index 0f4995e..aa488fc 100644 --- a/src/roam.c +++ b/src/roam.c @@ -361,6 +361,7 @@ static gboolean roam_triangle_backface(RoamTriangle *triangle, RoamSphere *spher */ void roam_triangle_update_errors(RoamTriangle *triangle, RoamSphere *sphere) { +#if 0 /* Update points */ roam_point_update_projection(triangle->p.l, sphere->view); roam_point_update_projection(triangle->p.m, sphere->view); @@ -395,6 +396,17 @@ void roam_triangle_update_errors(RoamTriangle *triangle, RoamSphere *sphere) roam_triangle_backface(triangle->t.r, sphere)) triangle->error *= 500; } +#endif + + /* For pure distance based errors */ + (void)roam_triangle_visible; + (void)roam_triangle_backface; + RoamPoint *l = triangle->p.l; + RoamPoint *m = triangle->p.m; + RoamPoint *r = triangle->p.r; + double base = distd((gdouble*)l, (gdouble*)r); + double dist = distd((gdouble*)m, (gdouble*)sphere->view->pos); + triangle->error = base/dist; } /** @@ -777,8 +789,9 @@ void roam_sphere_merge_one(RoamSphere *sphere) gint roam_sphere_split_merge(RoamSphere *sphere) { gint iters = 0, max_iters = 500; + gint target = 10000; //gint target = 4000; - gint target = 2000; + //gint target = 2000; //gint target = 500; if (!sphere->view) diff --git a/src/roam.h b/src/roam.h index aec4b21..7c7371d 100644 --- a/src/roam.h +++ b/src/roam.h @@ -53,6 +53,7 @@ struct _RoamView { gdouble proj[16]; gint view[4]; gint version; + gdouble pos[3]; }; /************* -- 2.43.2