mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 22:02:58 -06:00
56 lines
1.5 KiB
C
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__ */
|