roam

roam

Synopsis

                    RoamView;
                    RoamPoint;
                    RoamTriangle;
                    RoamDiamond;
                    RoamSphere;
void                (*RoamTriFunc)                      (RoamTriangle *triangle,
                                                         gpointer user_data);
void                (*RoamHeightFunc)                   (RoamPoint *point,
                                                         gpointer user_data);
RoamPoint *         roam_point_new                      (double x,
                                                         double y,
                                                         double z);
void                roam_point_add_triangle             (RoamPoint *point,
                                                         RoamTriangle *triangle);
void                roam_point_remove_triangle          (RoamPoint *point,
                                                         RoamTriangle *triangle);
void                roam_point_update                   (RoamPoint *point,
                                                         RoamSphere *sphere,
                                                         gboolean do_height);
void                roam_point_clear                    (RoamPoint *self);
RoamTriangle *      roam_triangle_new                   (RoamPoint *l,
                                                         RoamPoint *m,
                                                         RoamPoint *r);
void                roam_triangle_add                   (RoamTriangle *triangle,
                                                         RoamTriangle *left,
                                                         RoamTriangle *base,
                                                         RoamTriangle *right,
                                                         RoamSphere *sphere);
void                roam_triangle_remove                (RoamTriangle *triangle,
                                                         RoamSphere *sphere);
void                roam_triangle_update                (RoamTriangle *triangle,
                                                         RoamSphere *sphere);
void                roam_triangle_split                 (RoamTriangle *triangle,
                                                         RoamSphere *sphere);
void                roam_triangle_draw_normal           (RoamTriangle *triangle);
RoamDiamond *       roam_diamond_new                    (RoamTriangle *parent0,
                                                         RoamTriangle *parent1,
                                                         RoamTriangle *kid0,
                                                         RoamTriangle *kid1,
                                                         RoamTriangle *kid2,
                                                         RoamTriangle *kid3);
void                roam_diamond_add                    (RoamDiamond *diamond,
                                                         RoamSphere *sphere);
void                roam_diamond_remove                 (RoamDiamond *diamond,
                                                         RoamSphere *sphere);
void                roam_diamond_merge                  (RoamDiamond *diamond,
                                                         RoamSphere *sphere);
void                roam_diamond_update                 (RoamDiamond *self,
                                                         RoamSphere *sphere);
RoamSphere *        roam_sphere_new                     (RoamTriFunc tri_func,
                                                         RoamHeightFunc height_func,
                                                         gpointer user_data);
void                roam_sphere_update                  (RoamSphere *sphere);
void                roam_sphere_split_one               (RoamSphere *sphere);
void                roam_sphere_merge_one               (RoamSphere *sphere);
gint                roam_sphere_split_merge             (RoamSphere *sphere);
void                roam_sphere_draw                    (RoamSphere *sphere);
void                roam_sphere_draw_normals            (RoamSphere *sphere);
void                roam_sphere_free                    (RoamSphere *sphere);

Description

Details

RoamView

typedef struct {
	gdouble model[16];
	gdouble proj[16]; 
	gint view[4]; 
} RoamView;


RoamPoint

typedef struct {
	gdouble  x,y,z;     // Model coordinates
	gdouble  px,py,pz;  // Projected coordinates

	gboolean cached;    // Height/projection cached

	gint     tris;      // Associated triangles
	gdouble  norm[3];   // Vertex normal

	WmsCacheNode *node; // TODO: don't depend on wms
} RoamPoint;


RoamTriangle

typedef struct {
	struct { RoamPoint    *l,*m,*r; 
} RoamTriangle;


RoamDiamond

typedef struct {
	RoamTriangle *kids[4];
	RoamTriangle *parents[2];
	double error;
	gboolean active;
	GPQueueHandle handle;
} RoamDiamond;


RoamSphere

typedef struct {
	GPQueue *triangles;
	GPQueue *diamonds;
	RoamView *view;
	RoamTriFunc tri_func;
	RoamHeightFunc height_func;
	gpointer user_data;
	gint polys;
} RoamSphere;


RoamTriFunc ()

void                (*RoamTriFunc)                      (RoamTriangle *triangle,
                                                         gpointer user_data);

triangle :

user_data :


RoamHeightFunc ()

void                (*RoamHeightFunc)                   (RoamPoint *point,
                                                         gpointer user_data);

point :

user_data :


roam_point_new ()

RoamPoint *         roam_point_new                      (double x,
                                                         double y,
                                                         double z);

x :

y :

z :

Returns :


roam_point_add_triangle ()

void                roam_point_add_triangle             (RoamPoint *point,
                                                         RoamTriangle *triangle);

point :

triangle :


roam_point_remove_triangle ()

void                roam_point_remove_triangle          (RoamPoint *point,
                                                         RoamTriangle *triangle);

point :

triangle :


roam_point_update ()

void                roam_point_update                   (RoamPoint *point,
                                                         RoamSphere *sphere,
                                                         gboolean do_height);

point :

sphere :

do_height :


roam_point_clear ()

void                roam_point_clear                    (RoamPoint *self);

self :


roam_triangle_new ()

RoamTriangle *      roam_triangle_new                   (RoamPoint *l,
                                                         RoamPoint *m,
                                                         RoamPoint *r);

l :

m :

r :

Returns :


roam_triangle_add ()

void                roam_triangle_add                   (RoamTriangle *triangle,
                                                         RoamTriangle *left,
                                                         RoamTriangle *base,
                                                         RoamTriangle *right,
                                                         RoamSphere *sphere);

triangle :

left :

base :

right :

sphere :


roam_triangle_remove ()

void                roam_triangle_remove                (RoamTriangle *triangle,
                                                         RoamSphere *sphere);

triangle :

sphere :


roam_triangle_update ()

void                roam_triangle_update                (RoamTriangle *triangle,
                                                         RoamSphere *sphere);

triangle :

sphere :


roam_triangle_split ()

void                roam_triangle_split                 (RoamTriangle *triangle,
                                                         RoamSphere *sphere);

triangle :

sphere :


roam_triangle_draw_normal ()

void                roam_triangle_draw_normal           (RoamTriangle *triangle);

triangle :


roam_diamond_new ()

RoamDiamond *       roam_diamond_new                    (RoamTriangle *parent0,
                                                         RoamTriangle *parent1,
                                                         RoamTriangle *kid0,
                                                         RoamTriangle *kid1,
                                                         RoamTriangle *kid2,
                                                         RoamTriangle *kid3);

parent0 :

parent1 :

kid0 :

kid1 :

kid2 :

kid3 :

Returns :


roam_diamond_add ()

void                roam_diamond_add                    (RoamDiamond *diamond,
                                                         RoamSphere *sphere);

diamond :

sphere :


roam_diamond_remove ()

void                roam_diamond_remove                 (RoamDiamond *diamond,
                                                         RoamSphere *sphere);

diamond :

sphere :


roam_diamond_merge ()

void                roam_diamond_merge                  (RoamDiamond *diamond,
                                                         RoamSphere *sphere);

diamond :

sphere :


roam_diamond_update ()

void                roam_diamond_update                 (RoamDiamond *self,
                                                         RoamSphere *sphere);

self :

sphere :


roam_sphere_new ()

RoamSphere *        roam_sphere_new                     (RoamTriFunc tri_func,
                                                         RoamHeightFunc height_func,
                                                         gpointer user_data);

tri_func :

height_func :

user_data :

Returns :


roam_sphere_update ()

void                roam_sphere_update                  (RoamSphere *sphere);

sphere :


roam_sphere_split_one ()

void                roam_sphere_split_one               (RoamSphere *sphere);

sphere :


roam_sphere_merge_one ()

void                roam_sphere_merge_one               (RoamSphere *sphere);

sphere :


roam_sphere_split_merge ()

gint                roam_sphere_split_merge             (RoamSphere *sphere);

sphere :

Returns :


roam_sphere_draw ()

void                roam_sphere_draw                    (RoamSphere *sphere);

sphere :


roam_sphere_draw_normals ()

void                roam_sphere_draw_normals            (RoamSphere *sphere);

sphere :


roam_sphere_free ()

void                roam_sphere_free                    (RoamSphere *sphere);

sphere :