#ifdef __APPLE__ #include #else #include #endif GLubyte *grid_rgb_value(GLubyte *data, int width, int height, double xd, double yd); GLfloat grid_value(GLubyte *data, int width, int height, double x, double y); typedef struct { int w; int h; GLfloat data[]; } grid_t; grid_t *sample_grid(GLubyte *data, int width, int height, int nx, int ny); void grid_bounds_check(grid_t *, int x, int y); #define GRID_VALUE(grid,x,y) \ (grid_bounds_check(grid,x,y), (grid)->data[ ((grid)->w) * (y) + (x) ]) GLfloat *normal(GLfloat *a, GLfloat *b, GLfloat *c); /* ********************************************************************** */ #include "queue.h" struct face_t; struct vertex_t; typedef TAILQ_HEAD(facelist_t, face_t) facelist_t; typedef TAILQ_HEAD(vertexlist_t, vertex_t) vertexlist_t; typedef struct triangulation_t { facelist_t flist; vertexlist_t vlist; } triangulation_t; typedef struct vertex_t { GLfloat pt[3]; facelist_t vfl; /* faces */ TAILQ_ENTRY(vertex_t) vlist_link; /* list of vertices */ GLfloat normal[3]; } vertex_t; typedef struct face_t { vertex_t *vertices[3]; TAILQ_ENTRY(face_t) vfl_link; /* faces of vertex */ TAILQ_ENTRY(face_t) flist_link; /* list of faces */ GLfloat normal[3]; } face_t; triangulation_t *grid2triangulation(grid_t *grid); void trFree(triangulation_t *);