ultimatepp/uppdev/GLShadow/sv_mesh.h
cxl 4a1c627474 Adding uppdev....
git-svn-id: svn://ultimatepp.org/upp/trunk@328 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2008-08-15 08:36:24 +00:00

56 lines
1.5 KiB
C

/* shadow volume mesh
*
* written by Alexander Zaprjagaev
* frustum@public.tsu.ru
*/
#ifndef __SV_MESH_H__
#define __SV_MESH_H__
typedef struct {
float xyz[3]; /* ËÏÏÒÄÉÎÁÔÁ */
float normal[3]; /* ÎÏÒÍÁÌØ */
float st[2]; /* ÔÅËÓÔÕÒÎÙÅ ËÏÏÒÄÉÎÁÔÙ */
} vertex_t;
typedef struct {
float xyz[3]; /* ËÏÏÒÄÉÎÁÔÁ */
} sv_vertex_t;
typedef struct {
sv_vertex_t *v0,*v1; /* ×ÅÒÛÉÎÙ */
int rv; /* ÄÌÑ ÐÒÁ×ÉÌØÎÏÇÏ ÎÁÐÒÁ×ÌÅÎÉÑ ÏÂÈÏÄÁ */
int id; /* ÉÄÅÎÔÉÆÉËÁÔÏÒ */
} sv_edge_t;
typedef struct {
sv_vertex_t *v0,*v1,*v2; /* ×ÅÒÛÉÎÙ */
sv_edge_t *e0,*e1,*e2; /* ÒÅÂÒÁ */
int r0,r1,r2; /* ÒÅ×ÅÒÓ */
float plane[4]; /* ÐÌÏÓËÏÓÔØ */
} sv_face_t;
typedef struct {
int num_vertex; /* ÞÉÓÌÏ ×ÅÒÛÉÎ */
sv_vertex_t *vertex; /* ×ÅÒÛÉÎÙ */
int num_edge; /* ÞÉÓÌÏ ÒÅÂÅÒ */
sv_edge_t *edge; /* ÒÅÂÒÁ */
int num_face; /* ÞÉÓÌÏ ÇÒÁÎÅÊ */
sv_face_t *face; /* ÇÒÁÎÉ */
} sv_t;
typedef struct {
int num_vertex; /* ÞÉÓÌÏ ×ÅÒÛÉÎ */
vertex_t *vertex; /* ×ÅÒÛÉÎÙ */
float matrix[16]; /* ÍÁÔÒÉÃÁ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ */
sv_t *sv; /* ÔÅÎÅ×ÏÊ ÏÂßÅÍ */
} sv_mesh_t;
sv_mesh_t *sv_mesh_create(float *vertex,int num_vertex);
sv_mesh_t *sv_mesh_load_3ds(char *name);
void sv_mesh_set_matrix(sv_mesh_t *mesh,float *matrix);
void sv_mesh_render(sv_mesh_t *mesh);
void sv_mesh_render_to_stencil(sv_mesh_t *mesh,float *light);
void sv_mesh_render_shadow(float *color);
#endif /* __SV_MESH_H__ */