From: parasti Date: Wed, 6 Jul 2011 17:45:55 +0000 (+0000) Subject: Merge branch 'gles' X-Git-Tag: fremantle/1.5.5-2~22 X-Git-Url: http://git.maemo.org/git/?p=neverball;a=commitdiff_plain;h=9151af610f5c6a1ba57563e6c0d66e141648a5b8 Merge branch 'gles' Conflicts: data/mtrl/leaf share/glext.h git-svn-id: https://s.snth.net/svn/neverball/trunk@3607 78b8d119-cf0a-0410-b17c-f493084dd1d7 --- diff --git a/Makefile b/Makefile index 169b9f8..675a247 100644 --- a/Makefile +++ b/Makefile @@ -189,7 +189,6 @@ BALL_OBJS := \ share/solid_cmd.o \ share/solid_all.o \ share/part.o \ - share/back.o \ share/geom.o \ share/item.o \ share/ball.o \ @@ -197,6 +196,7 @@ BALL_OBJS := \ share/base_config.o \ share/config.o \ share/video.o \ + share/glext.o \ share/binary.o \ share/state.o \ share/audio.o \ @@ -261,10 +261,10 @@ PUTT_OBJS := \ share/part.o \ share/geom.o \ share/ball.o \ - share/back.o \ share/base_config.o \ share/config.o \ share/video.o \ + share/glext.o \ share/binary.o \ share/audio.o \ share/state.o \ diff --git a/ball/game_client.c b/ball/game_client.c index 86fea6b..a41a304 100644 --- a/ball/game_client.c +++ b/ball/game_client.c @@ -20,7 +20,6 @@ #include "vec3.h" #include "geom.h" #include "item.h" -#include "back.h" #include "part.h" #include "ball.h" #include "image.h" @@ -424,7 +423,7 @@ int game_client_init(const char *file_name) /* Initialize particles. */ - part_reset(GOAL_HEIGHT, JUMP_HEIGHT); + part_reset(); /* Initialize command state. */ diff --git a/ball/game_draw.c b/ball/game_draw.c index 7d039fc..0591524 100644 --- a/ball/game_draw.c +++ b/ball/game_draw.c @@ -19,7 +19,6 @@ #include "part.h" #include "geom.h" #include "config.h" -#include "back.h" #include "video.h" #include "solid_draw.h" @@ -28,7 +27,8 @@ /*---------------------------------------------------------------------------*/ -static void game_draw_balls(const struct s_vary *vary, +static void game_draw_balls(struct s_rend *rend, + const struct s_vary *vary, const float *bill_M, float t) { float c[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; @@ -39,7 +39,6 @@ static void game_draw_balls(const struct s_vary *vary, m_basis(ball_M, vary->uv[0].e[0], vary->uv[0].e[1], vary->uv[0].e[2]); m_basis(pend_M, vary->uv[0].E[0], vary->uv[0].E[1], vary->uv[0].E[2]); - glPushAttrib(GL_LIGHTING_BIT); glPushMatrix(); { glTranslatef(vary->uv[0].p[0], @@ -49,81 +48,66 @@ static void game_draw_balls(const struct s_vary *vary, vary->uv[0].r, vary->uv[0].r); - glColor4fv(c); - ball_draw(ball_M, pend_M, bill_M, t); + glColor4f(c[0], c[1], c[2], c[3]); + ball_draw(rend, ball_M, pend_M, bill_M, t); } glPopMatrix(); - glPopAttrib(); } -static void game_draw_items(const struct s_vary *vary, float t) +static void game_draw_items(struct s_rend *rend, + const struct s_vary *vary, + const float *bill_M, float t) { - float r = 360.f * t; int hi; - glPushAttrib(GL_LIGHTING_BIT); + glEnable(GL_COLOR_MATERIAL); { - item_push(ITEM_COIN); - { - for (hi = 0; hi < vary->hc; hi++) - - if (vary->hv[hi].t == ITEM_COIN && vary->hv[hi].n > 0) + for (hi = 0; hi < vary->hc; hi++) + if (vary->hv[hi].t == ITEM_COIN && vary->hv[hi].n > 0) + { + glPushMatrix(); { - glPushMatrix(); - { - glTranslatef(vary->hv[hi].p[0], - vary->hv[hi].p[1], - vary->hv[hi].p[2]); - glRotatef(r, 0.0f, 1.0f, 0.0f); - item_draw(&vary->hv[hi], r); - } - glPopMatrix(); + glTranslatef(vary->hv[hi].p[0], + vary->hv[hi].p[1], + vary->hv[hi].p[2]); + item_draw(rend, &vary->hv[hi], bill_M, t); } - } - item_pull(); - - item_push(ITEM_SHRINK); - { - for (hi = 0; hi < vary->hc; hi++) + glPopMatrix(); + } - if (vary->hv[hi].t == ITEM_SHRINK) + for (hi = 0; hi < vary->hc; hi++) + if (vary->hv[hi].t == ITEM_SHRINK) + { + glPushMatrix(); { - glPushMatrix(); - { - glTranslatef(vary->hv[hi].p[0], - vary->hv[hi].p[1], - vary->hv[hi].p[2]); - glRotatef(r, 0.0f, 1.0f, 0.0f); - item_draw(&vary->hv[hi], r); - } - glPopMatrix(); + glTranslatef(vary->hv[hi].p[0], + vary->hv[hi].p[1], + vary->hv[hi].p[2]); + item_draw(rend, &vary->hv[hi], bill_M, t); } - } - item_pull(); - - item_push(ITEM_GROW); - { - for (hi = 0; hi < vary->hc; hi++) + glPopMatrix(); + } - if (vary->hv[hi].t == ITEM_GROW) + for (hi = 0; hi < vary->hc; hi++) + if (vary->hv[hi].t == ITEM_GROW) + { + glPushMatrix(); { - glPushMatrix(); - { - glTranslatef(vary->hv[hi].p[0], - vary->hv[hi].p[1], - vary->hv[hi].p[2]); - glRotatef(r, 0.0f, 1.0f, 0.0f); - item_draw(&vary->hv[hi], r); - } - glPopMatrix(); + glTranslatef(vary->hv[hi].p[0], + vary->hv[hi].p[1], + vary->hv[hi].p[2]); + item_draw(rend, &vary->hv[hi], bill_M, t); } - } - item_pull(); + glPopMatrix(); + } } - glPopAttrib(); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glDisable(GL_COLOR_MATERIAL); } -static void game_draw_goals(const struct game_draw *gd, +static void game_draw_goals(struct s_rend *rend, + const struct game_draw *gd, const float *M, float t) { const struct s_base *base = gd->vary.base; @@ -132,25 +116,6 @@ static void game_draw_goals(const struct game_draw *gd, { int zi; - /* Draw the goal particles. */ - - glEnable(GL_TEXTURE_2D); - { - for (zi = 0; zi < base->zc; zi++) - { - glPushMatrix(); - { - glTranslatef(base->zv[zi].p[0], - base->zv[zi].p[1], - base->zv[zi].p[2]); - - part_draw_goal(M, base->zv[zi].r, gd->goal_k, t); - } - glPopMatrix(); - } - } - glDisable(GL_TEXTURE_2D); - /* Draw the goal column. */ for (zi = 0; zi < base->zc; zi++) @@ -165,37 +130,21 @@ static void game_draw_goals(const struct game_draw *gd, gd->goal_k, base->zv[zi].r); - goal_draw(); + goal_draw(rend, t); } glPopMatrix(); } } } -static void game_draw_jumps(const struct game_draw *gd, +static void game_draw_jumps(struct s_rend *rend, + const struct game_draw *gd, const float *M, float t) { const struct s_base *base = gd->vary.base; int ji; - glEnable(GL_TEXTURE_2D); - { - for (ji = 0; ji < base->jc; ji++) - { - glPushMatrix(); - { - glTranslatef(base->jv[ji].p[0], - base->jv[ji].p[1], - base->jv[ji].p[2]); - - part_draw_jump(M, base->jv[ji].r, 1.0f, t); - } - glPopMatrix(); - } - } - glDisable(GL_TEXTURE_2D); - for (ji = 0; ji < base->jc; ji++) { glPushMatrix(); @@ -207,13 +156,13 @@ static void game_draw_jumps(const struct game_draw *gd, 1.0f, base->jv[ji].r); - jump_draw(!gd->jump_e); + jump_draw(rend, t, !gd->jump_e); } glPopMatrix(); } } -static void game_draw_swchs(const struct s_vary *vary) +static void game_draw_swchs(struct s_rend *rend, const struct s_vary *vary) { int xi; @@ -233,7 +182,7 @@ static void game_draw_swchs(const struct s_vary *vary) 1.0f, xp->base->r); - swch_draw(xp->f, xp->e); + swch_draw(rend, xp->f, xp->e); } glPopMatrix(); } @@ -254,7 +203,7 @@ static void game_draw_tilt(const struct game_draw *gd, int d) glTranslatef(-ball_p[0], -ball_p[1] * d, -ball_p[2]); } -static void game_refl_all(const struct game_draw *gd) +static void game_refl_all(struct s_rend *rend, const struct game_draw *gd) { glPushMatrix(); { @@ -262,7 +211,7 @@ static void game_refl_all(const struct game_draw *gd) /* Draw the floor. */ - sol_refl(&gd->draw); + sol_refl(&gd->draw, rend); } glPopMatrix(); } @@ -293,7 +242,9 @@ static void game_draw_light(void) glLightfv(GL_LIGHT1, GL_SPECULAR, light_c[1]); } -static void game_draw_back(const struct game_draw *gd, int pose, int d, float t) +static void game_draw_back(struct s_rend *rend, + const struct game_draw *gd, + int pose, int d, float t) { if (pose == POSE_BALL) return; @@ -314,13 +265,10 @@ static void game_draw_back(const struct game_draw *gd, int pose, int d, float t) if (config_get_d(CONFIG_BACKGROUND)) { - /* Draw all background layers back to front. */ - - sol_back(&gd->back.draw, BACK_DIST, FAR_DIST, t); - back_draw(0); - sol_back(&gd->back.draw, 0, BACK_DIST, t); + back_draw(rend, 0); + sol_back(&gd->back.draw, rend, 0, FAR_DIST, t); } - else back_draw(0); + else back_draw(rend, 0); } glPopMatrix(); } @@ -329,19 +277,12 @@ static void game_clip_refl(int d) { /* Fudge to eliminate the floor from reflection. */ - GLdouble e[4], k = -0.00001; - - e[0] = 0; - e[1] = 1; - e[2] = 0; - e[3] = k; - - glClipPlane(GL_CLIP_PLANE0, e); + glClipPlane4f_(GL_CLIP_PLANE0, 0, 1, 0, -0.00001); } static void game_clip_ball(const struct game_draw *gd, int d, const float *p) { - GLdouble r, c[3], pz[4], nz[4]; + GLfloat r, c[3], pz[4], nz[4]; /* Compute the plane giving the front of the ball, as seen from view.p. */ @@ -374,17 +315,18 @@ static void game_clip_ball(const struct game_draw *gd, int d, const float *p) pz[1] *= d; nz[1] *= d; - glClipPlane(GL_CLIP_PLANE1, nz); - glClipPlane(GL_CLIP_PLANE2, pz); + glClipPlane4f_(GL_CLIP_PLANE1, nz[0], nz[1], nz[2], nz[3]); + glClipPlane4f_(GL_CLIP_PLANE2, pz[0], pz[1], pz[2], pz[3]); } -static void game_draw_fore(const struct game_draw *gd, +static void game_draw_fore(struct s_rend *rend, + struct game_draw *gd, int pose, const float *M, int d, float t) { const float *ball_p = gd->vary.uv[0].p; - const struct s_draw *draw = &gd->draw; + struct s_draw *draw = &gd->draw; glPushMatrix(); { @@ -403,58 +345,43 @@ static void game_draw_fore(const struct game_draw *gd, switch (pose) { case POSE_LEVEL: - sol_draw(draw, 0, 1); + sol_draw(draw, rend, 0, 1); break; case POSE_NONE: - /* Draw the coins. */ + /* Draw the floor. */ - game_draw_items(draw->vary, t); + sol_draw(draw, rend, 0, 1); - /* Draw the floor. */ + /* Draw the coins. */ - sol_draw(draw, 0, 1); + game_draw_items(rend, draw->vary, M, t); /* Fall through. */ case POSE_BALL: - /* Draw the ball shadow. */ - - if (d > 0 && config_get_d(CONFIG_SHADOW)) - { - shad_draw_set(); - sol_shad(draw, 0); - shad_draw_clr(); - } - /* Draw the ball. */ - game_draw_balls(draw->vary, M, t); + game_draw_balls(rend, draw->vary, M, t); break; } - /* Draw the particles and light columns. */ + /* Draw the billboards, entities, and particles. */ glEnable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); glDepthMask(GL_FALSE); { - glColor3f(1.0f, 1.0f, 1.0f); + sol_bill(draw, rend, M, t); - sol_bill(draw, M, t); - part_draw_coin(M, t); + game_draw_goals(rend, gd, M, t); + game_draw_jumps(rend, gd, M, t); + game_draw_swchs(rend, draw->vary); - glDisable(GL_TEXTURE_2D); - { - game_draw_goals(gd, M, t); - game_draw_jumps(gd, M, t); - game_draw_swchs(draw->vary); - } - glEnable(GL_TEXTURE_2D); - - glColor3f(1.0f, 1.0f, 1.0f); + part_draw_coin(rend); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } glDepthMask(GL_TRUE); glEnable(GL_LIGHTING); @@ -468,22 +395,30 @@ static void game_draw_fore(const struct game_draw *gd, /*---------------------------------------------------------------------------*/ -void game_draw(const struct game_draw *gd, int pose, float t) +void game_draw(struct game_draw *gd, int pose, float t) { float fov = (float) config_get_d(CONFIG_VIEW_FOV); + int sh = config_get_d(CONFIG_SHADOW); + + if (pose == POSE_LEVEL) + config_set_d(CONFIG_SHADOW, 0); if (gd->jump_b) fov *= 2.f * fabsf(gd->jump_dt - 0.5); if (gd->state) { const struct game_view *view = &gd->view; + struct s_rend rend; + + gd->draw.shadow_ui = 0; + + sol_draw_enable(&rend); video_push_persp(fov, 0.1f, FAR_DIST); glPushMatrix(); { float T[16], U[16], M[16], v[3]; - /* Compute direct and reflected view bases. */ v[0] = +view->p[0]; @@ -503,6 +438,12 @@ void game_draw(const struct game_draw *gd, int pose, float t) glMultMatrixf(M); glTranslatef(-view->c[0], -view->c[1], -view->c[2]); + /* Draw the background. */ + + game_draw_back(&rend, gd, pose, +1, t); + + /* Draw the reflection. */ + if (gd->draw.reflective && config_get_d(CONFIG_REFLECTION)) { glEnable(GL_STENCIL_TEST); @@ -514,7 +455,7 @@ void game_draw(const struct game_draw *gd, int pose, float t) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); glDepthMask(GL_FALSE); - game_refl_all(gd); + game_refl_all(&rend, gd); glDepthMask(GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); @@ -529,76 +470,52 @@ void game_draw(const struct game_draw *gd, int pose, float t) glScalef(+1.0f, -1.0f, +1.0f); game_draw_light(); - game_draw_back(gd, pose, -1, t); - game_draw_fore(gd, pose, U, -1, t); + + game_draw_back(&rend, gd, pose, -1, t); + game_draw_fore(&rend, gd, pose, U, -1, t); } glPopMatrix(); glFrontFace(GL_CCW); + + glStencilFunc(GL_ALWAYS, 0, 0xFFFFFFF); } glDisable(GL_STENCIL_TEST); } - /* Draw the scene normally. */ + /* Ready the lights for foreground rendering. */ game_draw_light(); - if (gd->draw.reflective) - { - if (config_get_d(CONFIG_REFLECTION)) - { - /* Draw background while preserving reflections. */ - - glEnable(GL_STENCIL_TEST); - { - glStencilFunc(GL_NOTEQUAL, 1, 0xFFFFFFFF); - game_draw_back(gd, pose, +1, t); - } - glDisable(GL_STENCIL_TEST); - - /* Draw mirrors. */ + /* When reflection is disabled, mirrors must be rendered opaque */ + /* to prevent the background from showing. */ - game_refl_all(gd); - } - else + if (gd->draw.reflective && !config_get_d(CONFIG_REFLECTION)) + { + glEnable(GL_COLOR_MATERIAL); { - /* Draw background. */ - - game_draw_back(gd, pose, +1, t); - - /* - * Draw mirrors, first fully opaque with a custom - * material color, then blending normally with the - * opaque surfaces using their original material - * properties. (Keeps background from showing - * through.) - */ - - glEnable(GL_COLOR_MATERIAL); - { - glColor4f(0.0, 0.0, 0.05, 1.0); - game_refl_all(gd); - glColor4f(1.0, 1.0, 1.0, 1.0); - } - glDisable(GL_COLOR_MATERIAL); - - game_refl_all(gd); + glColor4f(0.0f, 0.0f, 0.0f, 1.0f); + game_refl_all(&rend, gd); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } + glDisable(GL_COLOR_MATERIAL); } - else - { - game_draw_back(gd, pose, +1, t); - game_refl_all(gd); - } - game_draw_fore(gd, pose, T, +1, t); + /* Draw the mirrors and the rest of the foreground. */ + + game_refl_all (&rend, gd); + game_draw_fore(&rend, gd, pose, T, +1, t); } glPopMatrix(); video_pop_matrix(); /* Draw the fade overlay. */ - fade_draw(gd->fade_k); + sol_fade(&gd->draw, gd->fade_k); + sol_draw_disable(&rend); } + + if (pose == POSE_LEVEL) + config_set_d(CONFIG_SHADOW, sh); } /*---------------------------------------------------------------------------*/ diff --git a/ball/game_draw.h b/ball/game_draw.h index f2d1744..2559590 100644 --- a/ball/game_draw.h +++ b/ball/game_draw.h @@ -32,7 +32,7 @@ struct game_draw /* FIXME: this is just for POSE_* constants. */ #include "game_client.h" -void game_draw(const struct game_draw *, int, float); +void game_draw(struct game_draw *, int, float); /*---------------------------------------------------------------------------*/ diff --git a/ball/hud.c b/ball/hud.c index 2cc790b..e9b6fdc 100644 --- a/ball/hud.c +++ b/ball/hud.c @@ -291,7 +291,7 @@ void hud_speed_pulse(int speed) for (i = SPEED_NONE + 1; i < SPEED_MAX; i++) { - const GLfloat *c = gui_gry; + const GLubyte *c = gui_gry; if (speed != SPEED_NONE) { diff --git a/ball/main.c b/ball/main.c index 6dd19f1..98a33d9 100644 --- a/ball/main.c +++ b/ball/main.c @@ -42,18 +42,30 @@ const char ICON[] = "icon/neverball.png"; /*---------------------------------------------------------------------------*/ -static void shot(void) +static int shot_pending; + +static void shot_prep(void) +{ + shot_pending = 1; +} + +static void shot_take(void) { static char filename[MAXSTR]; - sprintf(filename, "Screenshots/screen%05d.png", config_screenshot()); - image_snap(filename); + if (shot_pending) + { + sprintf(filename, "Screenshots/screen%05d.png", config_screenshot()); + image_snap(filename); + shot_pending = 0; + } } /*---------------------------------------------------------------------------*/ static void toggle_wire(void) { +#if !ENABLE_OPENGLES static int wire = 0; if (wire) @@ -70,6 +82,7 @@ static void toggle_wire(void) glDisable(GL_LIGHTING); wire = 1; } +#endif } /*---------------------------------------------------------------------------*/ @@ -95,7 +108,7 @@ static int handle_key_dn(SDL_Event *e) else switch (c) { - case SDLK_F10: shot(); break; + case SDLK_F10: shot_prep(); break; case SDLK_F9: config_tgl_d(CONFIG_FPS); break; case SDLK_F8: config_tgl_d(CONFIG_NICE); break; @@ -532,6 +545,7 @@ int main(int argc, char *argv[]) /* Render. */ st_paint(0.001f * t0); + shot_take(); video_swap(); if (config_get_d(CONFIG_NICE)) diff --git a/ball/set.c b/ball/set.c index 56f309a..7d0b813 100644 --- a/ball/set.c +++ b/ball/set.c @@ -503,9 +503,9 @@ void level_snap(int i, const char *path) game_client_fly(1.0f); game_kill_fade(); game_client_draw(POSE_LEVEL, 0); - SDL_GL_SwapBuffers(); - image_snap(filename); + + SDL_GL_SwapBuffers(); } free(filename); diff --git a/ball/st_ball.c b/ball/st_ball.c index b8939ee..4c02ab1 100644 --- a/ball/st_ball.c +++ b/ball/st_ball.c @@ -22,7 +22,7 @@ #include "ball.h" #include "cmd.h" #include "audio.h" -#include "back.h" +#include "geom.h" #include "video.h" #include "demo.h" @@ -224,7 +224,7 @@ static void ball_paint(int id, float t) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { - back_draw(0); + back_draw_easy(); } video_pop_matrix(); diff --git a/ball/st_conf.c b/ball/st_conf.c index 2f2d289..12c1f6a 100644 --- a/ball/st_conf.c +++ b/ball/st_conf.c @@ -14,7 +14,6 @@ #include "gui.h" #include "hud.h" -#include "back.h" #include "geom.h" #include "item.h" #include "ball.h" @@ -124,7 +123,7 @@ static void conf_shared_paint(int id, float t) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { - back_draw(0); + back_draw_easy(); } video_pop_matrix(); gui_paint(id); @@ -422,9 +421,7 @@ static int null_enter(struct state *st, struct state *prev) { hud_free(); gui_free(); - swch_free(); - jump_free(); - goal_free(); + geom_free(); item_free(); ball_free(); shad_free(); @@ -435,13 +432,11 @@ static int null_enter(struct state *st, struct state *prev) static void null_leave(struct state *st, struct state *next, int id) { - part_init(GOAL_HEIGHT, JUMP_HEIGHT); + part_init(); shad_init(); ball_init(); item_init(); - goal_init(); - jump_init(); - swch_init(); + geom_init(); gui_init(); hud_init(); } diff --git a/ball/st_name.c b/ball/st_name.c index 6f381e4..44051c8 100644 --- a/ball/st_name.c +++ b/ball/st_name.c @@ -22,7 +22,7 @@ #include "config.h" #include "video.h" #include "text.h" -#include "back.h" +#include "geom.h" #include "game_common.h" #include "game_server.h" @@ -152,7 +152,7 @@ static void name_paint(int id, float t) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { - back_draw(0); + back_draw_easy(); } video_pop_matrix(); } diff --git a/ball/st_start.c b/ball/st_start.c index 83ad6eb..87ef31c 100644 --- a/ball/st_start.c +++ b/ball/st_start.c @@ -46,7 +46,9 @@ static int challenge_id; static void gui_level(int id, int i) { struct level *l = get_level(i); - const GLfloat *fore = 0, *back = 0; + + const GLubyte *fore = 0; + const GLubyte *back = 0; int jd; diff --git a/ball/util.c b/ball/util.c index 9409a8c..0079da4 100644 --- a/ball/util.c +++ b/ball/util.c @@ -36,8 +36,8 @@ static int time_btn_id; static int goal_btn_id; static void set_score_color(int id, int hi, - const GLfloat *c0, - const GLfloat *c1) + const GLubyte *c0, + const GLubyte *c1) { if (hi >= RANK_HARD) { diff --git a/data/back/alien.png b/data/back/alien.png index a8c9f46..e4ef254 100644 Binary files a/data/back/alien.png and b/data/back/alien.png differ diff --git a/data/back/land.png b/data/back/land.png index 4cb23b2..4dccbf5 100644 Binary files a/data/back/land.png and b/data/back/land.png differ diff --git a/data/back/ocean.png b/data/back/ocean.png index 2aa2de9..876e1c9 100644 Binary files a/data/back/ocean.png and b/data/back/ocean.png differ diff --git a/data/back/space.png b/data/back/space.png index dd23f0e..f72241f 100644 Binary files a/data/back/space.png and b/data/back/space.png differ diff --git a/data/back/volcano.png b/data/back/volcano.png index f08550f..3e1fc2b 100644 Binary files a/data/back/volcano.png and b/data/back/volcano.png differ diff --git a/data/ball/atom/atom-glow b/data/ball/atom/atom-glow index 013e7fc..c528fec 100644 --- a/data/ball/atom/atom-glow +++ b/data/ball/atom/atom-glow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 -18 -45.000000 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +1.0 1.0 1.0 1.0 +0.0 +additive clamp-s clamp-t transparent +45.0 diff --git a/data/ball/atom/electron b/data/ball/atom/electron index c347984..8288950 100644 --- a/data/ball/atom/electron +++ b/data/ball/atom/electron @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -162 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t transparent two-sided +45.0 diff --git a/data/ball/atom/neutron b/data/ball/atom/neutron index 70162cd..2e1214e 100644 --- a/data/ball/atom/neutron +++ b/data/ball/atom/neutron @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -34 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t transparent +45.0 diff --git a/data/ball/atom/proton b/data/ball/atom/proton index 70162cd..2e1214e 100644 --- a/data/ball/atom/proton +++ b/data/ball/atom/proton @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -34 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t transparent +45.0 diff --git a/data/ball/basic-ball/basic-ball b/data/ball/basic-ball/basic-ball index dbed868..1dbd027 100644 --- a/data/ball/basic-ball/basic-ball +++ b/data/ball/basic-ball/basic-ball @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -20.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +20.0 +transparent +45.0 diff --git a/data/ball/blinky/blinky b/data/ball/blinky/blinky index c18a9d1..88f285a 100644 --- a/data/ball/blinky/blinky +++ b/data/ball/blinky/blinky @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.750000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -60.000000 -2 -45.000000 +1.0 1.0 1.0 0.75 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +60.0 +transparent +45.0 diff --git a/data/ball/earth/earth-atmos b/data/ball/earth/earth-atmos index a6a22f3..0629167 100644 --- a/data/ball/earth/earth-atmos +++ b/data/ball/earth/earth-atmos @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +transparent +45.0 diff --git a/data/ball/earth/earth-cloud b/data/ball/earth/earth-cloud index 6eba1fc..9a47319 100644 --- a/data/ball/earth/earth-cloud +++ b/data/ball/earth/earth-cloud @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +transparent +45.0 diff --git a/data/ball/earth/earth-color b/data/ball/earth/earth-color index a6a22f3..0629167 100644 --- a/data/ball/earth/earth-color +++ b/data/ball/earth/earth-color @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +transparent +45.0 diff --git a/data/ball/earth/earth-ocean b/data/ball/earth/earth-ocean index 50bf29d..da42a4a 100644 --- a/data/ball/earth/earth-ocean +++ b/data/ball/earth/earth-ocean @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.800000 0.800000 0.800000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.8 0.8 0.8 1.0 +0.0 0.0 0.0 1.0 +20.0 +transparent +45.0 diff --git a/data/ball/eyeball/eyeball b/data/ball/eyeball/eyeball index 848933b..fb3e9b3 100644 --- a/data/ball/eyeball/eyeball +++ b/data/ball/eyeball/eyeball @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -128.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +128.0 +transparent +45.0 diff --git a/data/ball/lava/lava-glow b/data/ball/lava/lava-glow index c2e0c61..8e473ff 100644 --- a/data/ball/lava/lava-glow +++ b/data/ball/lava/lava-glow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -18 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive clamp-s clamp-t transparent +45.0 diff --git a/data/ball/lava/lava-inner b/data/ball/lava/lava-inner index 7c2b1b7..f53b6b7 100644 --- a/data/ball/lava/lava-inner +++ b/data/ball/lava/lava-inner @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +1.0 1.0 1.0 1.0 +0.0 +transparent +45.0 diff --git a/data/ball/lava/lava-solid b/data/ball/lava/lava-solid index 81ec4b8..3bcd68a 100644 --- a/data/ball/lava/lava-solid +++ b/data/ball/lava/lava-solid @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.400000 0.400000 0.400000 1.000000 -0.000000 0.000000 0.000000 1.000000 -60.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.4 0.4 0.4 1.0 +0.0 0.0 0.0 1.0 +60.0 +transparent +45.0 diff --git a/data/ball/magic-eightball/magic-eightball b/data/ball/magic-eightball/magic-eightball index dbed868..1dbd027 100644 --- a/data/ball/magic-eightball/magic-eightball +++ b/data/ball/magic-eightball/magic-eightball @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -20.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +20.0 +transparent +45.0 diff --git a/data/ball/reactor/reactor-surface b/data/ball/reactor/reactor-surface index 138a947..579c260 100644 --- a/data/ball/reactor/reactor-surface +++ b/data/ball/reactor/reactor-surface @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +20.0 +transparent +45.0 diff --git a/data/ball/reactor/sparkle1 b/data/ball/reactor/sparkle1 index 70162cd..2e1214e 100644 --- a/data/ball/reactor/sparkle1 +++ b/data/ball/reactor/sparkle1 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -34 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t transparent +45.0 diff --git a/data/ball/saturn/saturn-ring b/data/ball/saturn/saturn-ring index 8749c87..a075ce9 100644 --- a/data/ball/saturn/saturn-ring +++ b/data/ball/saturn/saturn-ring @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -60.000000 -130 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +60.0 +transparent two-sided +45.0 diff --git a/data/ball/saturn/saturn-surface b/data/ball/saturn/saturn-surface index 7401926..56cb278 100644 --- a/data/ball/saturn/saturn-surface +++ b/data/ball/saturn/saturn-surface @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 + +45.0 diff --git a/data/ball/snowglobe/snowglobe-atlas b/data/ball/snowglobe/snowglobe-atlas index 8d03692..e519048 100644 --- a/data/ball/snowglobe/snowglobe-atlas +++ b/data/ball/snowglobe/snowglobe-atlas @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 + +45.0 diff --git a/data/ball/snowglobe/snowglobe-star b/data/ball/snowglobe/snowglobe-star index a5d46e1..2015ea1 100644 --- a/data/ball/snowglobe/snowglobe-star +++ b/data/ball/snowglobe/snowglobe-star @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +10.0 +transparent +45.0 diff --git a/data/ball/snowglobe/snowglobe-surface b/data/ball/snowglobe/snowglobe-surface index 938f122..248ed0b 100644 --- a/data/ball/snowglobe/snowglobe-surface +++ b/data/ball/snowglobe/snowglobe-surface @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -40.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +40.0 +transparent +45.0 diff --git a/data/ball/sootsprite/sootsprite-body b/data/ball/sootsprite/sootsprite-body index 218786a..739d8e3 100644 --- a/data/ball/sootsprite/sootsprite-body +++ b/data/ball/sootsprite/sootsprite-body @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -34 -45.000000 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t transparent +45.0 diff --git a/data/ball/sootsprite/sootsprite-eye b/data/ball/sootsprite/sootsprite-eye index 218786a..739d8e3 100644 --- a/data/ball/sootsprite/sootsprite-eye +++ b/data/ball/sootsprite/sootsprite-eye @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -34 -45.000000 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t transparent +45.0 diff --git a/data/geom/back/back.map b/data/geom/back/back.map new file mode 100644 index 0000000..81c22be --- /dev/null +++ b/data/geom/back/back.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/back/back.obj" +} diff --git a/data/geom/back/back.obj b/data/geom/back/back.obj new file mode 100644 index 0000000..04584c6 --- /dev/null +++ b/data/geom/back/back.obj @@ -0,0 +1,2708 @@ +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 -0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v -0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v 0.000 1.000 -0.000 +v -0.000 0.981 -0.195 +v -0.038 0.981 -0.191 +v -0.075 0.981 -0.180 +v -0.108 0.981 -0.162 +v -0.138 0.981 -0.138 +v -0.162 0.981 -0.108 +v -0.180 0.981 -0.075 +v -0.191 0.981 -0.038 +v -0.195 0.981 -0.000 +v -0.191 0.981 0.038 +v -0.180 0.981 0.075 +v -0.162 0.981 0.108 +v -0.138 0.981 0.138 +v -0.108 0.981 0.162 +v -0.075 0.981 0.180 +v -0.038 0.981 0.191 +v -0.000 0.981 0.195 +v 0.038 0.981 0.191 +v 0.075 0.981 0.180 +v 0.108 0.981 0.162 +v 0.138 0.981 0.138 +v 0.162 0.981 0.108 +v 0.180 0.981 0.075 +v 0.191 0.981 0.038 +v 0.195 0.981 0.000 +v 0.191 0.981 -0.038 +v 0.180 0.981 -0.075 +v 0.162 0.981 -0.108 +v 0.138 0.981 -0.138 +v 0.108 0.981 -0.162 +v 0.075 0.981 -0.180 +v 0.038 0.981 -0.191 +v 0.000 0.981 -0.195 +v -0.000 0.924 -0.383 +v -0.075 0.924 -0.375 +v -0.146 0.924 -0.354 +v -0.213 0.924 -0.318 +v -0.271 0.924 -0.271 +v -0.318 0.924 -0.213 +v -0.354 0.924 -0.146 +v -0.375 0.924 -0.075 +v -0.383 0.924 -0.000 +v -0.375 0.924 0.075 +v -0.354 0.924 0.146 +v -0.318 0.924 0.213 +v -0.271 0.924 0.271 +v -0.213 0.924 0.318 +v -0.146 0.924 0.354 +v -0.075 0.924 0.375 +v -0.000 0.924 0.383 +v 0.075 0.924 0.375 +v 0.146 0.924 0.354 +v 0.213 0.924 0.318 +v 0.271 0.924 0.271 +v 0.318 0.924 0.213 +v 0.354 0.924 0.146 +v 0.375 0.924 0.075 +v 0.383 0.924 0.000 +v 0.375 0.924 -0.075 +v 0.354 0.924 -0.146 +v 0.318 0.924 -0.213 +v 0.271 0.924 -0.271 +v 0.213 0.924 -0.318 +v 0.146 0.924 -0.354 +v 0.075 0.924 -0.375 +v 0.000 0.924 -0.383 +v -0.000 0.831 -0.556 +v -0.108 0.831 -0.545 +v -0.213 0.831 -0.513 +v -0.309 0.831 -0.462 +v -0.393 0.831 -0.393 +v -0.462 0.831 -0.309 +v -0.513 0.831 -0.213 +v -0.545 0.831 -0.108 +v -0.556 0.831 -0.000 +v -0.545 0.831 0.108 +v -0.513 0.831 0.213 +v -0.462 0.831 0.309 +v -0.393 0.831 0.393 +v -0.309 0.831 0.462 +v -0.213 0.831 0.513 +v -0.108 0.831 0.545 +v -0.000 0.831 0.556 +v 0.108 0.831 0.545 +v 0.213 0.831 0.513 +v 0.309 0.831 0.462 +v 0.393 0.831 0.393 +v 0.462 0.831 0.309 +v 0.513 0.831 0.213 +v 0.545 0.831 0.108 +v 0.556 0.831 0.000 +v 0.545 0.831 -0.108 +v 0.513 0.831 -0.213 +v 0.462 0.831 -0.309 +v 0.393 0.831 -0.393 +v 0.309 0.831 -0.462 +v 0.213 0.831 -0.513 +v 0.108 0.831 -0.545 +v 0.000 0.831 -0.556 +v -0.000 0.707 -0.707 +v -0.138 0.707 -0.694 +v -0.271 0.707 -0.653 +v -0.393 0.707 -0.588 +v -0.500 0.707 -0.500 +v -0.588 0.707 -0.393 +v -0.653 0.707 -0.271 +v -0.694 0.707 -0.138 +v -0.707 0.707 -0.000 +v -0.694 0.707 0.138 +v -0.653 0.707 0.271 +v -0.588 0.707 0.393 +v -0.500 0.707 0.500 +v -0.393 0.707 0.588 +v -0.271 0.707 0.653 +v -0.138 0.707 0.694 +v -0.000 0.707 0.707 +v 0.138 0.707 0.694 +v 0.271 0.707 0.653 +v 0.393 0.707 0.588 +v 0.500 0.707 0.500 +v 0.588 0.707 0.393 +v 0.653 0.707 0.271 +v 0.694 0.707 0.138 +v 0.707 0.707 0.000 +v 0.694 0.707 -0.138 +v 0.653 0.707 -0.271 +v 0.588 0.707 -0.393 +v 0.500 0.707 -0.500 +v 0.393 0.707 -0.588 +v 0.271 0.707 -0.653 +v 0.138 0.707 -0.694 +v 0.000 0.707 -0.707 +v -0.000 0.556 -0.831 +v -0.162 0.556 -0.815 +v -0.318 0.556 -0.768 +v -0.462 0.556 -0.691 +v -0.588 0.556 -0.588 +v -0.691 0.556 -0.462 +v -0.768 0.556 -0.318 +v -0.815 0.556 -0.162 +v -0.831 0.556 -0.000 +v -0.815 0.556 0.162 +v -0.768 0.556 0.318 +v -0.691 0.556 0.462 +v -0.588 0.556 0.588 +v -0.462 0.556 0.691 +v -0.318 0.556 0.768 +v -0.162 0.556 0.815 +v -0.000 0.556 0.831 +v 0.162 0.556 0.815 +v 0.318 0.556 0.768 +v 0.462 0.556 0.691 +v 0.588 0.556 0.588 +v 0.691 0.556 0.462 +v 0.768 0.556 0.318 +v 0.815 0.556 0.162 +v 0.831 0.556 0.000 +v 0.815 0.556 -0.162 +v 0.768 0.556 -0.318 +v 0.691 0.556 -0.462 +v 0.588 0.556 -0.588 +v 0.462 0.556 -0.691 +v 0.318 0.556 -0.768 +v 0.162 0.556 -0.815 +v 0.000 0.556 -0.831 +v -0.000 0.383 -0.924 +v -0.180 0.383 -0.906 +v -0.354 0.383 -0.854 +v -0.513 0.383 -0.768 +v -0.653 0.383 -0.653 +v -0.768 0.383 -0.513 +v -0.854 0.383 -0.354 +v -0.906 0.383 -0.180 +v -0.924 0.383 -0.000 +v -0.906 0.383 0.180 +v -0.854 0.383 0.354 +v -0.768 0.383 0.513 +v -0.653 0.383 0.653 +v -0.513 0.383 0.768 +v -0.354 0.383 0.854 +v -0.180 0.383 0.906 +v -0.000 0.383 0.924 +v 0.180 0.383 0.906 +v 0.354 0.383 0.854 +v 0.513 0.383 0.768 +v 0.653 0.383 0.653 +v 0.768 0.383 0.513 +v 0.854 0.383 0.354 +v 0.906 0.383 0.180 +v 0.924 0.383 0.000 +v 0.906 0.383 -0.180 +v 0.854 0.383 -0.354 +v 0.768 0.383 -0.513 +v 0.653 0.383 -0.653 +v 0.513 0.383 -0.768 +v 0.354 0.383 -0.854 +v 0.180 0.383 -0.906 +v 0.000 0.383 -0.924 +v -0.000 0.195 -0.981 +v -0.191 0.195 -0.962 +v -0.375 0.195 -0.906 +v -0.545 0.195 -0.815 +v -0.694 0.195 -0.694 +v -0.815 0.195 -0.545 +v -0.906 0.195 -0.375 +v -0.962 0.195 -0.191 +v -0.981 0.195 -0.000 +v -0.962 0.195 0.191 +v -0.906 0.195 0.375 +v -0.815 0.195 0.545 +v -0.694 0.195 0.694 +v -0.545 0.195 0.815 +v -0.375 0.195 0.906 +v -0.191 0.195 0.962 +v -0.000 0.195 0.981 +v 0.191 0.195 0.962 +v 0.375 0.195 0.906 +v 0.545 0.195 0.815 +v 0.694 0.195 0.694 +v 0.815 0.195 0.545 +v 0.906 0.195 0.375 +v 0.962 0.195 0.191 +v 0.981 0.195 0.000 +v 0.962 0.195 -0.191 +v 0.906 0.195 -0.375 +v 0.815 0.195 -0.545 +v 0.694 0.195 -0.694 +v 0.545 0.195 -0.815 +v 0.375 0.195 -0.906 +v 0.191 0.195 -0.962 +v 0.000 0.195 -0.981 +v -0.000 -0.000 -1.000 +v -0.195 -0.000 -0.981 +v -0.383 -0.000 -0.924 +v -0.556 -0.000 -0.831 +v -0.707 -0.000 -0.707 +v -0.831 -0.000 -0.556 +v -0.924 -0.000 -0.383 +v -0.981 -0.000 -0.195 +v -1.000 -0.000 -0.000 +v -0.981 -0.000 0.195 +v -0.924 -0.000 0.383 +v -0.831 -0.000 0.556 +v -0.707 -0.000 0.707 +v -0.556 -0.000 0.831 +v -0.383 -0.000 0.924 +v -0.195 -0.000 0.981 +v -0.000 -0.000 1.000 +v 0.195 -0.000 0.981 +v 0.383 -0.000 0.924 +v 0.556 -0.000 0.831 +v 0.707 -0.000 0.707 +v 0.831 -0.000 0.556 +v 0.924 -0.000 0.383 +v 0.981 -0.000 0.195 +v 1.000 -0.000 0.000 +v 0.981 -0.000 -0.195 +v 0.924 -0.000 -0.383 +v 0.831 -0.000 -0.556 +v 0.707 -0.000 -0.707 +v 0.556 -0.000 -0.831 +v 0.383 -0.000 -0.924 +v 0.195 -0.000 -0.981 +v 0.000 -0.000 -1.000 +v -0.000 -0.195 -0.981 +v -0.191 -0.195 -0.962 +v -0.375 -0.195 -0.906 +v -0.545 -0.195 -0.815 +v -0.694 -0.195 -0.694 +v -0.815 -0.195 -0.545 +v -0.906 -0.195 -0.375 +v -0.962 -0.195 -0.191 +v -0.981 -0.195 -0.000 +v -0.962 -0.195 0.191 +v -0.906 -0.195 0.375 +v -0.815 -0.195 0.545 +v -0.694 -0.195 0.694 +v -0.545 -0.195 0.815 +v -0.375 -0.195 0.906 +v -0.191 -0.195 0.962 +v -0.000 -0.195 0.981 +v 0.191 -0.195 0.962 +v 0.375 -0.195 0.906 +v 0.545 -0.195 0.815 +v 0.694 -0.195 0.694 +v 0.815 -0.195 0.545 +v 0.906 -0.195 0.375 +v 0.962 -0.195 0.191 +v 0.981 -0.195 0.000 +v 0.962 -0.195 -0.191 +v 0.906 -0.195 -0.375 +v 0.815 -0.195 -0.545 +v 0.694 -0.195 -0.694 +v 0.545 -0.195 -0.815 +v 0.375 -0.195 -0.906 +v 0.191 -0.195 -0.962 +v 0.000 -0.195 -0.981 +v -0.000 -0.383 -0.924 +v -0.180 -0.383 -0.906 +v -0.354 -0.383 -0.854 +v -0.513 -0.383 -0.768 +v -0.653 -0.383 -0.653 +v -0.768 -0.383 -0.513 +v -0.854 -0.383 -0.354 +v -0.906 -0.383 -0.180 +v -0.924 -0.383 -0.000 +v -0.906 -0.383 0.180 +v -0.854 -0.383 0.354 +v -0.768 -0.383 0.513 +v -0.653 -0.383 0.653 +v -0.513 -0.383 0.768 +v -0.354 -0.383 0.854 +v -0.180 -0.383 0.906 +v -0.000 -0.383 0.924 +v 0.180 -0.383 0.906 +v 0.354 -0.383 0.854 +v 0.513 -0.383 0.768 +v 0.653 -0.383 0.653 +v 0.768 -0.383 0.513 +v 0.854 -0.383 0.354 +v 0.906 -0.383 0.180 +v 0.924 -0.383 0.000 +v 0.906 -0.383 -0.180 +v 0.854 -0.383 -0.354 +v 0.768 -0.383 -0.513 +v 0.653 -0.383 -0.653 +v 0.513 -0.383 -0.768 +v 0.354 -0.383 -0.854 +v 0.180 -0.383 -0.906 +v 0.000 -0.383 -0.924 +v -0.000 -0.556 -0.831 +v -0.162 -0.556 -0.815 +v -0.318 -0.556 -0.768 +v -0.462 -0.556 -0.691 +v -0.588 -0.556 -0.588 +v -0.691 -0.556 -0.462 +v -0.768 -0.556 -0.318 +v -0.815 -0.556 -0.162 +v -0.831 -0.556 -0.000 +v -0.815 -0.556 0.162 +v -0.768 -0.556 0.318 +v -0.691 -0.556 0.462 +v -0.588 -0.556 0.588 +v -0.462 -0.556 0.691 +v -0.318 -0.556 0.768 +v -0.162 -0.556 0.815 +v -0.000 -0.556 0.831 +v 0.162 -0.556 0.815 +v 0.318 -0.556 0.768 +v 0.462 -0.556 0.691 +v 0.588 -0.556 0.588 +v 0.691 -0.556 0.462 +v 0.768 -0.556 0.318 +v 0.815 -0.556 0.162 +v 0.831 -0.556 0.000 +v 0.815 -0.556 -0.162 +v 0.768 -0.556 -0.318 +v 0.691 -0.556 -0.462 +v 0.588 -0.556 -0.588 +v 0.462 -0.556 -0.691 +v 0.318 -0.556 -0.768 +v 0.162 -0.556 -0.815 +v 0.000 -0.556 -0.831 +v -0.000 -0.707 -0.707 +v -0.138 -0.707 -0.694 +v -0.271 -0.707 -0.653 +v -0.393 -0.707 -0.588 +v -0.500 -0.707 -0.500 +v -0.588 -0.707 -0.393 +v -0.653 -0.707 -0.271 +v -0.694 -0.707 -0.138 +v -0.707 -0.707 -0.000 +v -0.694 -0.707 0.138 +v -0.653 -0.707 0.271 +v -0.588 -0.707 0.393 +v -0.500 -0.707 0.500 +v -0.393 -0.707 0.588 +v -0.271 -0.707 0.653 +v -0.138 -0.707 0.694 +v -0.000 -0.707 0.707 +v 0.138 -0.707 0.694 +v 0.271 -0.707 0.653 +v 0.393 -0.707 0.588 +v 0.500 -0.707 0.500 +v 0.588 -0.707 0.393 +v 0.653 -0.707 0.271 +v 0.694 -0.707 0.138 +v 0.707 -0.707 0.000 +v 0.694 -0.707 -0.138 +v 0.653 -0.707 -0.271 +v 0.588 -0.707 -0.393 +v 0.500 -0.707 -0.500 +v 0.393 -0.707 -0.588 +v 0.271 -0.707 -0.653 +v 0.138 -0.707 -0.694 +v 0.000 -0.707 -0.707 +v -0.000 -0.831 -0.556 +v -0.108 -0.831 -0.545 +v -0.213 -0.831 -0.513 +v -0.309 -0.831 -0.462 +v -0.393 -0.831 -0.393 +v -0.462 -0.831 -0.309 +v -0.513 -0.831 -0.213 +v -0.545 -0.831 -0.108 +v -0.556 -0.831 -0.000 +v -0.545 -0.831 0.108 +v -0.513 -0.831 0.213 +v -0.462 -0.831 0.309 +v -0.393 -0.831 0.393 +v -0.309 -0.831 0.462 +v -0.213 -0.831 0.513 +v -0.108 -0.831 0.545 +v -0.000 -0.831 0.556 +v 0.108 -0.831 0.545 +v 0.213 -0.831 0.513 +v 0.309 -0.831 0.462 +v 0.393 -0.831 0.393 +v 0.462 -0.831 0.309 +v 0.513 -0.831 0.213 +v 0.545 -0.831 0.108 +v 0.556 -0.831 0.000 +v 0.545 -0.831 -0.108 +v 0.513 -0.831 -0.213 +v 0.462 -0.831 -0.309 +v 0.393 -0.831 -0.393 +v 0.309 -0.831 -0.462 +v 0.213 -0.831 -0.513 +v 0.108 -0.831 -0.545 +v 0.000 -0.831 -0.556 +v -0.000 -0.924 -0.383 +v -0.075 -0.924 -0.375 +v -0.146 -0.924 -0.354 +v -0.213 -0.924 -0.318 +v -0.271 -0.924 -0.271 +v -0.318 -0.924 -0.213 +v -0.354 -0.924 -0.146 +v -0.375 -0.924 -0.075 +v -0.383 -0.924 -0.000 +v -0.375 -0.924 0.075 +v -0.354 -0.924 0.146 +v -0.318 -0.924 0.213 +v -0.271 -0.924 0.271 +v -0.213 -0.924 0.318 +v -0.146 -0.924 0.354 +v -0.075 -0.924 0.375 +v -0.000 -0.924 0.383 +v 0.075 -0.924 0.375 +v 0.146 -0.924 0.354 +v 0.213 -0.924 0.318 +v 0.271 -0.924 0.271 +v 0.318 -0.924 0.213 +v 0.354 -0.924 0.146 +v 0.375 -0.924 0.075 +v 0.383 -0.924 0.000 +v 0.375 -0.924 -0.075 +v 0.354 -0.924 -0.146 +v 0.318 -0.924 -0.213 +v 0.271 -0.924 -0.271 +v 0.213 -0.924 -0.318 +v 0.146 -0.924 -0.354 +v 0.075 -0.924 -0.375 +v 0.000 -0.924 -0.383 +v -0.000 -0.981 -0.195 +v -0.038 -0.981 -0.191 +v -0.075 -0.981 -0.180 +v -0.108 -0.981 -0.162 +v -0.138 -0.981 -0.138 +v -0.162 -0.981 -0.108 +v -0.180 -0.981 -0.075 +v -0.191 -0.981 -0.038 +v -0.195 -0.981 -0.000 +v -0.191 -0.981 0.038 +v -0.180 -0.981 0.075 +v -0.162 -0.981 0.108 +v -0.138 -0.981 0.138 +v -0.108 -0.981 0.162 +v -0.075 -0.981 0.180 +v -0.038 -0.981 0.191 +v -0.000 -0.981 0.195 +v 0.038 -0.981 0.191 +v 0.075 -0.981 0.180 +v 0.108 -0.981 0.162 +v 0.138 -0.981 0.138 +v 0.162 -0.981 0.108 +v 0.180 -0.981 0.075 +v 0.191 -0.981 0.038 +v 0.195 -0.981 0.000 +v 0.191 -0.981 -0.038 +v 0.180 -0.981 -0.075 +v 0.162 -0.981 -0.108 +v 0.138 -0.981 -0.138 +v 0.108 -0.981 -0.162 +v 0.075 -0.981 -0.180 +v 0.038 -0.981 -0.191 +v 0.000 -0.981 -0.195 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 -0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v -0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +v 0.000 -1.000 -0.000 +vt 0.000 1.000 +vt 0.031 1.000 +vt 0.062 1.000 +vt 0.094 1.000 +vt 0.125 1.000 +vt 0.156 1.000 +vt 0.188 1.000 +vt 0.219 1.000 +vt 0.250 1.000 +vt 0.281 1.000 +vt 0.312 1.000 +vt 0.344 1.000 +vt 0.375 1.000 +vt 0.406 1.000 +vt 0.438 1.000 +vt 0.469 1.000 +vt 0.500 1.000 +vt 0.531 1.000 +vt 0.562 1.000 +vt 0.594 1.000 +vt 0.625 1.000 +vt 0.656 1.000 +vt 0.688 1.000 +vt 0.719 1.000 +vt 0.750 1.000 +vt 0.781 1.000 +vt 0.812 1.000 +vt 0.844 1.000 +vt 0.875 1.000 +vt 0.906 1.000 +vt 0.938 1.000 +vt 0.969 1.000 +vt 1.000 1.000 +vt 0.000 0.938 +vt 0.031 0.938 +vt 0.062 0.938 +vt 0.094 0.938 +vt 0.125 0.938 +vt 0.156 0.938 +vt 0.188 0.938 +vt 0.219 0.938 +vt 0.250 0.938 +vt 0.281 0.938 +vt 0.312 0.938 +vt 0.344 0.938 +vt 0.375 0.938 +vt 0.406 0.938 +vt 0.438 0.938 +vt 0.469 0.938 +vt 0.500 0.938 +vt 0.531 0.938 +vt 0.562 0.938 +vt 0.594 0.938 +vt 0.625 0.938 +vt 0.656 0.938 +vt 0.688 0.938 +vt 0.719 0.938 +vt 0.750 0.938 +vt 0.781 0.938 +vt 0.812 0.938 +vt 0.844 0.938 +vt 0.875 0.938 +vt 0.906 0.938 +vt 0.938 0.938 +vt 0.969 0.938 +vt 1.000 0.938 +vt 0.000 0.875 +vt 0.031 0.875 +vt 0.062 0.875 +vt 0.094 0.875 +vt 0.125 0.875 +vt 0.156 0.875 +vt 0.188 0.875 +vt 0.219 0.875 +vt 0.250 0.875 +vt 0.281 0.875 +vt 0.312 0.875 +vt 0.344 0.875 +vt 0.375 0.875 +vt 0.406 0.875 +vt 0.438 0.875 +vt 0.469 0.875 +vt 0.500 0.875 +vt 0.531 0.875 +vt 0.562 0.875 +vt 0.594 0.875 +vt 0.625 0.875 +vt 0.656 0.875 +vt 0.688 0.875 +vt 0.719 0.875 +vt 0.750 0.875 +vt 0.781 0.875 +vt 0.812 0.875 +vt 0.844 0.875 +vt 0.875 0.875 +vt 0.906 0.875 +vt 0.938 0.875 +vt 0.969 0.875 +vt 1.000 0.875 +vt 0.000 0.812 +vt 0.031 0.812 +vt 0.062 0.812 +vt 0.094 0.812 +vt 0.125 0.812 +vt 0.156 0.812 +vt 0.188 0.812 +vt 0.219 0.812 +vt 0.250 0.812 +vt 0.281 0.812 +vt 0.312 0.812 +vt 0.344 0.812 +vt 0.375 0.812 +vt 0.406 0.812 +vt 0.438 0.812 +vt 0.469 0.812 +vt 0.500 0.812 +vt 0.531 0.812 +vt 0.562 0.812 +vt 0.594 0.812 +vt 0.625 0.812 +vt 0.656 0.812 +vt 0.688 0.812 +vt 0.719 0.812 +vt 0.750 0.812 +vt 0.781 0.812 +vt 0.812 0.812 +vt 0.844 0.812 +vt 0.875 0.812 +vt 0.906 0.812 +vt 0.938 0.812 +vt 0.969 0.812 +vt 1.000 0.812 +vt 0.000 0.750 +vt 0.031 0.750 +vt 0.062 0.750 +vt 0.094 0.750 +vt 0.125 0.750 +vt 0.156 0.750 +vt 0.188 0.750 +vt 0.219 0.750 +vt 0.250 0.750 +vt 0.281 0.750 +vt 0.312 0.750 +vt 0.344 0.750 +vt 0.375 0.750 +vt 0.406 0.750 +vt 0.438 0.750 +vt 0.469 0.750 +vt 0.500 0.750 +vt 0.531 0.750 +vt 0.562 0.750 +vt 0.594 0.750 +vt 0.625 0.750 +vt 0.656 0.750 +vt 0.688 0.750 +vt 0.719 0.750 +vt 0.750 0.750 +vt 0.781 0.750 +vt 0.812 0.750 +vt 0.844 0.750 +vt 0.875 0.750 +vt 0.906 0.750 +vt 0.938 0.750 +vt 0.969 0.750 +vt 1.000 0.750 +vt 0.000 0.688 +vt 0.031 0.688 +vt 0.062 0.688 +vt 0.094 0.688 +vt 0.125 0.688 +vt 0.156 0.688 +vt 0.188 0.688 +vt 0.219 0.688 +vt 0.250 0.688 +vt 0.281 0.688 +vt 0.312 0.688 +vt 0.344 0.688 +vt 0.375 0.688 +vt 0.406 0.688 +vt 0.438 0.688 +vt 0.469 0.688 +vt 0.500 0.688 +vt 0.531 0.688 +vt 0.562 0.688 +vt 0.594 0.688 +vt 0.625 0.688 +vt 0.656 0.688 +vt 0.688 0.688 +vt 0.719 0.688 +vt 0.750 0.688 +vt 0.781 0.688 +vt 0.812 0.688 +vt 0.844 0.688 +vt 0.875 0.688 +vt 0.906 0.688 +vt 0.938 0.688 +vt 0.969 0.688 +vt 1.000 0.688 +vt 0.000 0.625 +vt 0.031 0.625 +vt 0.062 0.625 +vt 0.094 0.625 +vt 0.125 0.625 +vt 0.156 0.625 +vt 0.188 0.625 +vt 0.219 0.625 +vt 0.250 0.625 +vt 0.281 0.625 +vt 0.312 0.625 +vt 0.344 0.625 +vt 0.375 0.625 +vt 0.406 0.625 +vt 0.438 0.625 +vt 0.469 0.625 +vt 0.500 0.625 +vt 0.531 0.625 +vt 0.562 0.625 +vt 0.594 0.625 +vt 0.625 0.625 +vt 0.656 0.625 +vt 0.688 0.625 +vt 0.719 0.625 +vt 0.750 0.625 +vt 0.781 0.625 +vt 0.812 0.625 +vt 0.844 0.625 +vt 0.875 0.625 +vt 0.906 0.625 +vt 0.938 0.625 +vt 0.969 0.625 +vt 1.000 0.625 +vt 0.000 0.562 +vt 0.031 0.562 +vt 0.062 0.562 +vt 0.094 0.562 +vt 0.125 0.562 +vt 0.156 0.562 +vt 0.188 0.562 +vt 0.219 0.562 +vt 0.250 0.562 +vt 0.281 0.562 +vt 0.312 0.562 +vt 0.344 0.562 +vt 0.375 0.562 +vt 0.406 0.562 +vt 0.438 0.562 +vt 0.469 0.562 +vt 0.500 0.562 +vt 0.531 0.562 +vt 0.562 0.562 +vt 0.594 0.562 +vt 0.625 0.562 +vt 0.656 0.562 +vt 0.688 0.562 +vt 0.719 0.562 +vt 0.750 0.562 +vt 0.781 0.562 +vt 0.812 0.562 +vt 0.844 0.562 +vt 0.875 0.562 +vt 0.906 0.562 +vt 0.938 0.562 +vt 0.969 0.562 +vt 1.000 0.562 +vt 0.000 0.500 +vt 0.031 0.500 +vt 0.062 0.500 +vt 0.094 0.500 +vt 0.125 0.500 +vt 0.156 0.500 +vt 0.188 0.500 +vt 0.219 0.500 +vt 0.250 0.500 +vt 0.281 0.500 +vt 0.312 0.500 +vt 0.344 0.500 +vt 0.375 0.500 +vt 0.406 0.500 +vt 0.438 0.500 +vt 0.469 0.500 +vt 0.500 0.500 +vt 0.531 0.500 +vt 0.562 0.500 +vt 0.594 0.500 +vt 0.625 0.500 +vt 0.656 0.500 +vt 0.688 0.500 +vt 0.719 0.500 +vt 0.750 0.500 +vt 0.781 0.500 +vt 0.812 0.500 +vt 0.844 0.500 +vt 0.875 0.500 +vt 0.906 0.500 +vt 0.938 0.500 +vt 0.969 0.500 +vt 1.000 0.500 +vt 0.000 0.438 +vt 0.031 0.438 +vt 0.062 0.438 +vt 0.094 0.438 +vt 0.125 0.438 +vt 0.156 0.438 +vt 0.188 0.438 +vt 0.219 0.438 +vt 0.250 0.438 +vt 0.281 0.438 +vt 0.312 0.438 +vt 0.344 0.438 +vt 0.375 0.438 +vt 0.406 0.438 +vt 0.438 0.438 +vt 0.469 0.438 +vt 0.500 0.438 +vt 0.531 0.438 +vt 0.562 0.438 +vt 0.594 0.438 +vt 0.625 0.438 +vt 0.656 0.438 +vt 0.688 0.438 +vt 0.719 0.438 +vt 0.750 0.438 +vt 0.781 0.438 +vt 0.812 0.438 +vt 0.844 0.438 +vt 0.875 0.438 +vt 0.906 0.438 +vt 0.938 0.438 +vt 0.969 0.438 +vt 1.000 0.438 +vt 0.000 0.375 +vt 0.031 0.375 +vt 0.062 0.375 +vt 0.094 0.375 +vt 0.125 0.375 +vt 0.156 0.375 +vt 0.188 0.375 +vt 0.219 0.375 +vt 0.250 0.375 +vt 0.281 0.375 +vt 0.312 0.375 +vt 0.344 0.375 +vt 0.375 0.375 +vt 0.406 0.375 +vt 0.438 0.375 +vt 0.469 0.375 +vt 0.500 0.375 +vt 0.531 0.375 +vt 0.562 0.375 +vt 0.594 0.375 +vt 0.625 0.375 +vt 0.656 0.375 +vt 0.688 0.375 +vt 0.719 0.375 +vt 0.750 0.375 +vt 0.781 0.375 +vt 0.812 0.375 +vt 0.844 0.375 +vt 0.875 0.375 +vt 0.906 0.375 +vt 0.938 0.375 +vt 0.969 0.375 +vt 1.000 0.375 +vt 0.000 0.312 +vt 0.031 0.312 +vt 0.062 0.312 +vt 0.094 0.312 +vt 0.125 0.312 +vt 0.156 0.312 +vt 0.188 0.312 +vt 0.219 0.312 +vt 0.250 0.312 +vt 0.281 0.312 +vt 0.312 0.312 +vt 0.344 0.312 +vt 0.375 0.312 +vt 0.406 0.312 +vt 0.438 0.312 +vt 0.469 0.312 +vt 0.500 0.312 +vt 0.531 0.312 +vt 0.562 0.312 +vt 0.594 0.312 +vt 0.625 0.312 +vt 0.656 0.312 +vt 0.688 0.312 +vt 0.719 0.312 +vt 0.750 0.312 +vt 0.781 0.312 +vt 0.812 0.312 +vt 0.844 0.312 +vt 0.875 0.312 +vt 0.906 0.312 +vt 0.938 0.312 +vt 0.969 0.312 +vt 1.000 0.312 +vt 0.000 0.250 +vt 0.031 0.250 +vt 0.062 0.250 +vt 0.094 0.250 +vt 0.125 0.250 +vt 0.156 0.250 +vt 0.188 0.250 +vt 0.219 0.250 +vt 0.250 0.250 +vt 0.281 0.250 +vt 0.312 0.250 +vt 0.344 0.250 +vt 0.375 0.250 +vt 0.406 0.250 +vt 0.438 0.250 +vt 0.469 0.250 +vt 0.500 0.250 +vt 0.531 0.250 +vt 0.562 0.250 +vt 0.594 0.250 +vt 0.625 0.250 +vt 0.656 0.250 +vt 0.688 0.250 +vt 0.719 0.250 +vt 0.750 0.250 +vt 0.781 0.250 +vt 0.812 0.250 +vt 0.844 0.250 +vt 0.875 0.250 +vt 0.906 0.250 +vt 0.938 0.250 +vt 0.969 0.250 +vt 1.000 0.250 +vt 0.000 0.188 +vt 0.031 0.188 +vt 0.062 0.188 +vt 0.094 0.188 +vt 0.125 0.188 +vt 0.156 0.188 +vt 0.188 0.188 +vt 0.219 0.188 +vt 0.250 0.188 +vt 0.281 0.188 +vt 0.312 0.188 +vt 0.344 0.188 +vt 0.375 0.188 +vt 0.406 0.188 +vt 0.438 0.188 +vt 0.469 0.188 +vt 0.500 0.188 +vt 0.531 0.188 +vt 0.562 0.188 +vt 0.594 0.188 +vt 0.625 0.188 +vt 0.656 0.188 +vt 0.688 0.188 +vt 0.719 0.188 +vt 0.750 0.188 +vt 0.781 0.188 +vt 0.812 0.188 +vt 0.844 0.188 +vt 0.875 0.188 +vt 0.906 0.188 +vt 0.938 0.188 +vt 0.969 0.188 +vt 1.000 0.188 +vt 0.000 0.125 +vt 0.031 0.125 +vt 0.062 0.125 +vt 0.094 0.125 +vt 0.125 0.125 +vt 0.156 0.125 +vt 0.188 0.125 +vt 0.219 0.125 +vt 0.250 0.125 +vt 0.281 0.125 +vt 0.312 0.125 +vt 0.344 0.125 +vt 0.375 0.125 +vt 0.406 0.125 +vt 0.438 0.125 +vt 0.469 0.125 +vt 0.500 0.125 +vt 0.531 0.125 +vt 0.562 0.125 +vt 0.594 0.125 +vt 0.625 0.125 +vt 0.656 0.125 +vt 0.688 0.125 +vt 0.719 0.125 +vt 0.750 0.125 +vt 0.781 0.125 +vt 0.812 0.125 +vt 0.844 0.125 +vt 0.875 0.125 +vt 0.906 0.125 +vt 0.938 0.125 +vt 0.969 0.125 +vt 1.000 0.125 +vt 0.000 0.062 +vt 0.031 0.062 +vt 0.062 0.062 +vt 0.094 0.062 +vt 0.125 0.062 +vt 0.156 0.062 +vt 0.188 0.062 +vt 0.219 0.062 +vt 0.250 0.062 +vt 0.281 0.062 +vt 0.312 0.062 +vt 0.344 0.062 +vt 0.375 0.062 +vt 0.406 0.062 +vt 0.438 0.062 +vt 0.469 0.062 +vt 0.500 0.062 +vt 0.531 0.062 +vt 0.562 0.062 +vt 0.594 0.062 +vt 0.625 0.062 +vt 0.656 0.062 +vt 0.688 0.062 +vt 0.719 0.062 +vt 0.750 0.062 +vt 0.781 0.062 +vt 0.812 0.062 +vt 0.844 0.062 +vt 0.875 0.062 +vt 0.906 0.062 +vt 0.938 0.062 +vt 0.969 0.062 +vt 1.000 0.062 +vt 0.000 0.000 +vt 0.031 0.000 +vt 0.062 0.000 +vt 0.094 0.000 +vt 0.125 0.000 +vt 0.156 0.000 +vt 0.188 0.000 +vt 0.219 0.000 +vt 0.250 0.000 +vt 0.281 0.000 +vt 0.312 0.000 +vt 0.344 0.000 +vt 0.375 0.000 +vt 0.406 0.000 +vt 0.438 0.000 +vt 0.469 0.000 +vt 0.500 0.000 +vt 0.531 0.000 +vt 0.562 0.000 +vt 0.594 0.000 +vt 0.625 0.000 +vt 0.656 0.000 +vt 0.688 0.000 +vt 0.719 0.000 +vt 0.750 0.000 +vt 0.781 0.000 +vt 0.812 0.000 +vt 0.844 0.000 +vt 0.875 0.000 +vt 0.906 0.000 +vt 0.938 0.000 +vt 0.969 0.000 +vt 1.000 0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 -0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn -0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn 0.000 1.000 -0.000 +vn -0.000 0.981 -0.195 +vn -0.038 0.981 -0.191 +vn -0.075 0.981 -0.180 +vn -0.108 0.981 -0.162 +vn -0.138 0.981 -0.138 +vn -0.162 0.981 -0.108 +vn -0.180 0.981 -0.075 +vn -0.191 0.981 -0.038 +vn -0.195 0.981 -0.000 +vn -0.191 0.981 0.038 +vn -0.180 0.981 0.075 +vn -0.162 0.981 0.108 +vn -0.138 0.981 0.138 +vn -0.108 0.981 0.162 +vn -0.075 0.981 0.180 +vn -0.038 0.981 0.191 +vn -0.000 0.981 0.195 +vn 0.038 0.981 0.191 +vn 0.075 0.981 0.180 +vn 0.108 0.981 0.162 +vn 0.138 0.981 0.138 +vn 0.162 0.981 0.108 +vn 0.180 0.981 0.075 +vn 0.191 0.981 0.038 +vn 0.195 0.981 0.000 +vn 0.191 0.981 -0.038 +vn 0.180 0.981 -0.075 +vn 0.162 0.981 -0.108 +vn 0.138 0.981 -0.138 +vn 0.108 0.981 -0.162 +vn 0.075 0.981 -0.180 +vn 0.038 0.981 -0.191 +vn 0.000 0.981 -0.195 +vn -0.000 0.924 -0.383 +vn -0.075 0.924 -0.375 +vn -0.146 0.924 -0.354 +vn -0.213 0.924 -0.318 +vn -0.271 0.924 -0.271 +vn -0.318 0.924 -0.213 +vn -0.354 0.924 -0.146 +vn -0.375 0.924 -0.075 +vn -0.383 0.924 -0.000 +vn -0.375 0.924 0.075 +vn -0.354 0.924 0.146 +vn -0.318 0.924 0.213 +vn -0.271 0.924 0.271 +vn -0.213 0.924 0.318 +vn -0.146 0.924 0.354 +vn -0.075 0.924 0.375 +vn -0.000 0.924 0.383 +vn 0.075 0.924 0.375 +vn 0.146 0.924 0.354 +vn 0.213 0.924 0.318 +vn 0.271 0.924 0.271 +vn 0.318 0.924 0.213 +vn 0.354 0.924 0.146 +vn 0.375 0.924 0.075 +vn 0.383 0.924 0.000 +vn 0.375 0.924 -0.075 +vn 0.354 0.924 -0.146 +vn 0.318 0.924 -0.213 +vn 0.271 0.924 -0.271 +vn 0.213 0.924 -0.318 +vn 0.146 0.924 -0.354 +vn 0.075 0.924 -0.375 +vn 0.000 0.924 -0.383 +vn -0.000 0.831 -0.556 +vn -0.108 0.831 -0.545 +vn -0.213 0.831 -0.513 +vn -0.309 0.831 -0.462 +vn -0.393 0.831 -0.393 +vn -0.462 0.831 -0.309 +vn -0.513 0.831 -0.213 +vn -0.545 0.831 -0.108 +vn -0.556 0.831 -0.000 +vn -0.545 0.831 0.108 +vn -0.513 0.831 0.213 +vn -0.462 0.831 0.309 +vn -0.393 0.831 0.393 +vn -0.309 0.831 0.462 +vn -0.213 0.831 0.513 +vn -0.108 0.831 0.545 +vn -0.000 0.831 0.556 +vn 0.108 0.831 0.545 +vn 0.213 0.831 0.513 +vn 0.309 0.831 0.462 +vn 0.393 0.831 0.393 +vn 0.462 0.831 0.309 +vn 0.513 0.831 0.213 +vn 0.545 0.831 0.108 +vn 0.556 0.831 0.000 +vn 0.545 0.831 -0.108 +vn 0.513 0.831 -0.213 +vn 0.462 0.831 -0.309 +vn 0.393 0.831 -0.393 +vn 0.309 0.831 -0.462 +vn 0.213 0.831 -0.513 +vn 0.108 0.831 -0.545 +vn 0.000 0.831 -0.556 +vn -0.000 0.707 -0.707 +vn -0.138 0.707 -0.694 +vn -0.271 0.707 -0.653 +vn -0.393 0.707 -0.588 +vn -0.500 0.707 -0.500 +vn -0.588 0.707 -0.393 +vn -0.653 0.707 -0.271 +vn -0.694 0.707 -0.138 +vn -0.707 0.707 -0.000 +vn -0.694 0.707 0.138 +vn -0.653 0.707 0.271 +vn -0.588 0.707 0.393 +vn -0.500 0.707 0.500 +vn -0.393 0.707 0.588 +vn -0.271 0.707 0.653 +vn -0.138 0.707 0.694 +vn -0.000 0.707 0.707 +vn 0.138 0.707 0.694 +vn 0.271 0.707 0.653 +vn 0.393 0.707 0.588 +vn 0.500 0.707 0.500 +vn 0.588 0.707 0.393 +vn 0.653 0.707 0.271 +vn 0.694 0.707 0.138 +vn 0.707 0.707 0.000 +vn 0.694 0.707 -0.138 +vn 0.653 0.707 -0.271 +vn 0.588 0.707 -0.393 +vn 0.500 0.707 -0.500 +vn 0.393 0.707 -0.588 +vn 0.271 0.707 -0.653 +vn 0.138 0.707 -0.694 +vn 0.000 0.707 -0.707 +vn -0.000 0.556 -0.831 +vn -0.162 0.556 -0.815 +vn -0.318 0.556 -0.768 +vn -0.462 0.556 -0.691 +vn -0.588 0.556 -0.588 +vn -0.691 0.556 -0.462 +vn -0.768 0.556 -0.318 +vn -0.815 0.556 -0.162 +vn -0.831 0.556 -0.000 +vn -0.815 0.556 0.162 +vn -0.768 0.556 0.318 +vn -0.691 0.556 0.462 +vn -0.588 0.556 0.588 +vn -0.462 0.556 0.691 +vn -0.318 0.556 0.768 +vn -0.162 0.556 0.815 +vn -0.000 0.556 0.831 +vn 0.162 0.556 0.815 +vn 0.318 0.556 0.768 +vn 0.462 0.556 0.691 +vn 0.588 0.556 0.588 +vn 0.691 0.556 0.462 +vn 0.768 0.556 0.318 +vn 0.815 0.556 0.162 +vn 0.831 0.556 0.000 +vn 0.815 0.556 -0.162 +vn 0.768 0.556 -0.318 +vn 0.691 0.556 -0.462 +vn 0.588 0.556 -0.588 +vn 0.462 0.556 -0.691 +vn 0.318 0.556 -0.768 +vn 0.162 0.556 -0.815 +vn 0.000 0.556 -0.831 +vn -0.000 0.383 -0.924 +vn -0.180 0.383 -0.906 +vn -0.354 0.383 -0.854 +vn -0.513 0.383 -0.768 +vn -0.653 0.383 -0.653 +vn -0.768 0.383 -0.513 +vn -0.854 0.383 -0.354 +vn -0.906 0.383 -0.180 +vn -0.924 0.383 -0.000 +vn -0.906 0.383 0.180 +vn -0.854 0.383 0.354 +vn -0.768 0.383 0.513 +vn -0.653 0.383 0.653 +vn -0.513 0.383 0.768 +vn -0.354 0.383 0.854 +vn -0.180 0.383 0.906 +vn -0.000 0.383 0.924 +vn 0.180 0.383 0.906 +vn 0.354 0.383 0.854 +vn 0.513 0.383 0.768 +vn 0.653 0.383 0.653 +vn 0.768 0.383 0.513 +vn 0.854 0.383 0.354 +vn 0.906 0.383 0.180 +vn 0.924 0.383 0.000 +vn 0.906 0.383 -0.180 +vn 0.854 0.383 -0.354 +vn 0.768 0.383 -0.513 +vn 0.653 0.383 -0.653 +vn 0.513 0.383 -0.768 +vn 0.354 0.383 -0.854 +vn 0.180 0.383 -0.906 +vn 0.000 0.383 -0.924 +vn -0.000 0.195 -0.981 +vn -0.191 0.195 -0.962 +vn -0.375 0.195 -0.906 +vn -0.545 0.195 -0.815 +vn -0.694 0.195 -0.694 +vn -0.815 0.195 -0.545 +vn -0.906 0.195 -0.375 +vn -0.962 0.195 -0.191 +vn -0.981 0.195 -0.000 +vn -0.962 0.195 0.191 +vn -0.906 0.195 0.375 +vn -0.815 0.195 0.545 +vn -0.694 0.195 0.694 +vn -0.545 0.195 0.815 +vn -0.375 0.195 0.906 +vn -0.191 0.195 0.962 +vn -0.000 0.195 0.981 +vn 0.191 0.195 0.962 +vn 0.375 0.195 0.906 +vn 0.545 0.195 0.815 +vn 0.694 0.195 0.694 +vn 0.815 0.195 0.545 +vn 0.906 0.195 0.375 +vn 0.962 0.195 0.191 +vn 0.981 0.195 0.000 +vn 0.962 0.195 -0.191 +vn 0.906 0.195 -0.375 +vn 0.815 0.195 -0.545 +vn 0.694 0.195 -0.694 +vn 0.545 0.195 -0.815 +vn 0.375 0.195 -0.906 +vn 0.191 0.195 -0.962 +vn 0.000 0.195 -0.981 +vn -0.000 -0.000 -1.000 +vn -0.195 -0.000 -0.981 +vn -0.383 -0.000 -0.924 +vn -0.556 -0.000 -0.831 +vn -0.707 -0.000 -0.707 +vn -0.831 -0.000 -0.556 +vn -0.924 -0.000 -0.383 +vn -0.981 -0.000 -0.195 +vn -1.000 -0.000 -0.000 +vn -0.981 -0.000 0.195 +vn -0.924 -0.000 0.383 +vn -0.831 -0.000 0.556 +vn -0.707 -0.000 0.707 +vn -0.556 -0.000 0.831 +vn -0.383 -0.000 0.924 +vn -0.195 -0.000 0.981 +vn -0.000 -0.000 1.000 +vn 0.195 -0.000 0.981 +vn 0.383 -0.000 0.924 +vn 0.556 -0.000 0.831 +vn 0.707 -0.000 0.707 +vn 0.831 -0.000 0.556 +vn 0.924 -0.000 0.383 +vn 0.981 -0.000 0.195 +vn 1.000 -0.000 0.000 +vn 0.981 -0.000 -0.195 +vn 0.924 -0.000 -0.383 +vn 0.831 -0.000 -0.556 +vn 0.707 -0.000 -0.707 +vn 0.556 -0.000 -0.831 +vn 0.383 -0.000 -0.924 +vn 0.195 -0.000 -0.981 +vn 0.000 -0.000 -1.000 +vn -0.000 -0.195 -0.981 +vn -0.191 -0.195 -0.962 +vn -0.375 -0.195 -0.906 +vn -0.545 -0.195 -0.815 +vn -0.694 -0.195 -0.694 +vn -0.815 -0.195 -0.545 +vn -0.906 -0.195 -0.375 +vn -0.962 -0.195 -0.191 +vn -0.981 -0.195 -0.000 +vn -0.962 -0.195 0.191 +vn -0.906 -0.195 0.375 +vn -0.815 -0.195 0.545 +vn -0.694 -0.195 0.694 +vn -0.545 -0.195 0.815 +vn -0.375 -0.195 0.906 +vn -0.191 -0.195 0.962 +vn -0.000 -0.195 0.981 +vn 0.191 -0.195 0.962 +vn 0.375 -0.195 0.906 +vn 0.545 -0.195 0.815 +vn 0.694 -0.195 0.694 +vn 0.815 -0.195 0.545 +vn 0.906 -0.195 0.375 +vn 0.962 -0.195 0.191 +vn 0.981 -0.195 0.000 +vn 0.962 -0.195 -0.191 +vn 0.906 -0.195 -0.375 +vn 0.815 -0.195 -0.545 +vn 0.694 -0.195 -0.694 +vn 0.545 -0.195 -0.815 +vn 0.375 -0.195 -0.906 +vn 0.191 -0.195 -0.962 +vn 0.000 -0.195 -0.981 +vn -0.000 -0.383 -0.924 +vn -0.180 -0.383 -0.906 +vn -0.354 -0.383 -0.854 +vn -0.513 -0.383 -0.768 +vn -0.653 -0.383 -0.653 +vn -0.768 -0.383 -0.513 +vn -0.854 -0.383 -0.354 +vn -0.906 -0.383 -0.180 +vn -0.924 -0.383 -0.000 +vn -0.906 -0.383 0.180 +vn -0.854 -0.383 0.354 +vn -0.768 -0.383 0.513 +vn -0.653 -0.383 0.653 +vn -0.513 -0.383 0.768 +vn -0.354 -0.383 0.854 +vn -0.180 -0.383 0.906 +vn -0.000 -0.383 0.924 +vn 0.180 -0.383 0.906 +vn 0.354 -0.383 0.854 +vn 0.513 -0.383 0.768 +vn 0.653 -0.383 0.653 +vn 0.768 -0.383 0.513 +vn 0.854 -0.383 0.354 +vn 0.906 -0.383 0.180 +vn 0.924 -0.383 0.000 +vn 0.906 -0.383 -0.180 +vn 0.854 -0.383 -0.354 +vn 0.768 -0.383 -0.513 +vn 0.653 -0.383 -0.653 +vn 0.513 -0.383 -0.768 +vn 0.354 -0.383 -0.854 +vn 0.180 -0.383 -0.906 +vn 0.000 -0.383 -0.924 +vn -0.000 -0.556 -0.831 +vn -0.162 -0.556 -0.815 +vn -0.318 -0.556 -0.768 +vn -0.462 -0.556 -0.691 +vn -0.588 -0.556 -0.588 +vn -0.691 -0.556 -0.462 +vn -0.768 -0.556 -0.318 +vn -0.815 -0.556 -0.162 +vn -0.831 -0.556 -0.000 +vn -0.815 -0.556 0.162 +vn -0.768 -0.556 0.318 +vn -0.691 -0.556 0.462 +vn -0.588 -0.556 0.588 +vn -0.462 -0.556 0.691 +vn -0.318 -0.556 0.768 +vn -0.162 -0.556 0.815 +vn -0.000 -0.556 0.831 +vn 0.162 -0.556 0.815 +vn 0.318 -0.556 0.768 +vn 0.462 -0.556 0.691 +vn 0.588 -0.556 0.588 +vn 0.691 -0.556 0.462 +vn 0.768 -0.556 0.318 +vn 0.815 -0.556 0.162 +vn 0.831 -0.556 0.000 +vn 0.815 -0.556 -0.162 +vn 0.768 -0.556 -0.318 +vn 0.691 -0.556 -0.462 +vn 0.588 -0.556 -0.588 +vn 0.462 -0.556 -0.691 +vn 0.318 -0.556 -0.768 +vn 0.162 -0.556 -0.815 +vn 0.000 -0.556 -0.831 +vn -0.000 -0.707 -0.707 +vn -0.138 -0.707 -0.694 +vn -0.271 -0.707 -0.653 +vn -0.393 -0.707 -0.588 +vn -0.500 -0.707 -0.500 +vn -0.588 -0.707 -0.393 +vn -0.653 -0.707 -0.271 +vn -0.694 -0.707 -0.138 +vn -0.707 -0.707 -0.000 +vn -0.694 -0.707 0.138 +vn -0.653 -0.707 0.271 +vn -0.588 -0.707 0.393 +vn -0.500 -0.707 0.500 +vn -0.393 -0.707 0.588 +vn -0.271 -0.707 0.653 +vn -0.138 -0.707 0.694 +vn -0.000 -0.707 0.707 +vn 0.138 -0.707 0.694 +vn 0.271 -0.707 0.653 +vn 0.393 -0.707 0.588 +vn 0.500 -0.707 0.500 +vn 0.588 -0.707 0.393 +vn 0.653 -0.707 0.271 +vn 0.694 -0.707 0.138 +vn 0.707 -0.707 0.000 +vn 0.694 -0.707 -0.138 +vn 0.653 -0.707 -0.271 +vn 0.588 -0.707 -0.393 +vn 0.500 -0.707 -0.500 +vn 0.393 -0.707 -0.588 +vn 0.271 -0.707 -0.653 +vn 0.138 -0.707 -0.694 +vn 0.000 -0.707 -0.707 +vn -0.000 -0.831 -0.556 +vn -0.108 -0.831 -0.545 +vn -0.213 -0.831 -0.513 +vn -0.309 -0.831 -0.462 +vn -0.393 -0.831 -0.393 +vn -0.462 -0.831 -0.309 +vn -0.513 -0.831 -0.213 +vn -0.545 -0.831 -0.108 +vn -0.556 -0.831 -0.000 +vn -0.545 -0.831 0.108 +vn -0.513 -0.831 0.213 +vn -0.462 -0.831 0.309 +vn -0.393 -0.831 0.393 +vn -0.309 -0.831 0.462 +vn -0.213 -0.831 0.513 +vn -0.108 -0.831 0.545 +vn -0.000 -0.831 0.556 +vn 0.108 -0.831 0.545 +vn 0.213 -0.831 0.513 +vn 0.309 -0.831 0.462 +vn 0.393 -0.831 0.393 +vn 0.462 -0.831 0.309 +vn 0.513 -0.831 0.213 +vn 0.545 -0.831 0.108 +vn 0.556 -0.831 0.000 +vn 0.545 -0.831 -0.108 +vn 0.513 -0.831 -0.213 +vn 0.462 -0.831 -0.309 +vn 0.393 -0.831 -0.393 +vn 0.309 -0.831 -0.462 +vn 0.213 -0.831 -0.513 +vn 0.108 -0.831 -0.545 +vn 0.000 -0.831 -0.556 +vn -0.000 -0.924 -0.383 +vn -0.075 -0.924 -0.375 +vn -0.146 -0.924 -0.354 +vn -0.213 -0.924 -0.318 +vn -0.271 -0.924 -0.271 +vn -0.318 -0.924 -0.213 +vn -0.354 -0.924 -0.146 +vn -0.375 -0.924 -0.075 +vn -0.383 -0.924 -0.000 +vn -0.375 -0.924 0.075 +vn -0.354 -0.924 0.146 +vn -0.318 -0.924 0.213 +vn -0.271 -0.924 0.271 +vn -0.213 -0.924 0.318 +vn -0.146 -0.924 0.354 +vn -0.075 -0.924 0.375 +vn -0.000 -0.924 0.383 +vn 0.075 -0.924 0.375 +vn 0.146 -0.924 0.354 +vn 0.213 -0.924 0.318 +vn 0.271 -0.924 0.271 +vn 0.318 -0.924 0.213 +vn 0.354 -0.924 0.146 +vn 0.375 -0.924 0.075 +vn 0.383 -0.924 0.000 +vn 0.375 -0.924 -0.075 +vn 0.354 -0.924 -0.146 +vn 0.318 -0.924 -0.213 +vn 0.271 -0.924 -0.271 +vn 0.213 -0.924 -0.318 +vn 0.146 -0.924 -0.354 +vn 0.075 -0.924 -0.375 +vn 0.000 -0.924 -0.383 +vn -0.000 -0.981 -0.195 +vn -0.038 -0.981 -0.191 +vn -0.075 -0.981 -0.180 +vn -0.108 -0.981 -0.162 +vn -0.138 -0.981 -0.138 +vn -0.162 -0.981 -0.108 +vn -0.180 -0.981 -0.075 +vn -0.191 -0.981 -0.038 +vn -0.195 -0.981 -0.000 +vn -0.191 -0.981 0.038 +vn -0.180 -0.981 0.075 +vn -0.162 -0.981 0.108 +vn -0.138 -0.981 0.138 +vn -0.108 -0.981 0.162 +vn -0.075 -0.981 0.180 +vn -0.038 -0.981 0.191 +vn -0.000 -0.981 0.195 +vn 0.038 -0.981 0.191 +vn 0.075 -0.981 0.180 +vn 0.108 -0.981 0.162 +vn 0.138 -0.981 0.138 +vn 0.162 -0.981 0.108 +vn 0.180 -0.981 0.075 +vn 0.191 -0.981 0.038 +vn 0.195 -0.981 0.000 +vn 0.191 -0.981 -0.038 +vn 0.180 -0.981 -0.075 +vn 0.162 -0.981 -0.108 +vn 0.138 -0.981 -0.138 +vn 0.108 -0.981 -0.162 +vn 0.075 -0.981 -0.180 +vn 0.038 -0.981 -0.191 +vn 0.000 -0.981 -0.195 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 -0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn -0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +vn 0.000 -1.000 -0.000 +usemtl default +f 1/1/1 2/2/2 35/35/35 +f 35/35/35 34/34/34 1/1/1 +f 34/34/34 35/35/35 68/68/68 +f 68/68/68 67/67/67 34/34/34 +f 67/67/67 68/68/68 101/101/101 +f 101/101/101 100/100/100 67/67/67 +f 100/100/100 101/101/101 134/134/134 +f 134/134/134 133/133/133 100/100/100 +f 133/133/133 134/134/134 167/167/167 +f 167/167/167 166/166/166 133/133/133 +f 166/166/166 167/167/167 200/200/200 +f 200/200/200 199/199/199 166/166/166 +f 199/199/199 200/200/200 233/233/233 +f 233/233/233 232/232/232 199/199/199 +f 232/232/232 233/233/233 266/266/266 +f 266/266/266 265/265/265 232/232/232 +f 265/265/265 266/266/266 299/299/299 +f 299/299/299 298/298/298 265/265/265 +f 298/298/298 299/299/299 332/332/332 +f 332/332/332 331/331/331 298/298/298 +f 331/331/331 332/332/332 365/365/365 +f 365/365/365 364/364/364 331/331/331 +f 364/364/364 365/365/365 398/398/398 +f 398/398/398 397/397/397 364/364/364 +f 397/397/397 398/398/398 431/431/431 +f 431/431/431 430/430/430 397/397/397 +f 430/430/430 431/431/431 464/464/464 +f 464/464/464 463/463/463 430/430/430 +f 463/463/463 464/464/464 497/497/497 +f 497/497/497 496/496/496 463/463/463 +f 496/496/496 497/497/497 530/530/530 +f 530/530/530 529/529/529 496/496/496 +f 531/531/531 530/530/530 497/497/497 +f 497/497/497 498/498/498 531/531/531 +f 498/498/498 497/497/497 464/464/464 +f 532/532/532 531/531/531 498/498/498 +f 498/498/498 499/499/499 532/532/532 +f 533/533/533 532/532/532 499/499/499 +f 499/499/499 500/500/500 533/533/533 +f 534/534/534 533/533/533 500/500/500 +f 500/500/500 501/501/501 534/534/534 +f 535/535/535 534/534/534 501/501/501 +f 501/501/501 502/502/502 535/535/535 +f 536/536/536 535/535/535 502/502/502 +f 502/502/502 503/503/503 536/536/536 +f 537/537/537 536/536/536 503/503/503 +f 503/503/503 504/504/504 537/537/537 +f 538/538/538 537/537/537 504/504/504 +f 504/504/504 505/505/505 538/538/538 +f 539/539/539 538/538/538 505/505/505 +f 505/505/505 506/506/506 539/539/539 +f 540/540/540 539/539/539 506/506/506 +f 506/506/506 507/507/507 540/540/540 +f 541/541/541 540/540/540 507/507/507 +f 507/507/507 508/508/508 541/541/541 +f 542/542/542 541/541/541 508/508/508 +f 508/508/508 509/509/509 542/542/542 +f 543/543/543 542/542/542 509/509/509 +f 509/509/509 510/510/510 543/543/543 +f 544/544/544 543/543/543 510/510/510 +f 510/510/510 511/511/511 544/544/544 +f 545/545/545 544/544/544 511/511/511 +f 511/511/511 512/512/512 545/545/545 +f 546/546/546 545/545/545 512/512/512 +f 512/512/512 513/513/513 546/546/546 +f 547/547/547 546/546/546 513/513/513 +f 513/513/513 514/514/514 547/547/547 +f 548/548/548 547/547/547 514/514/514 +f 514/514/514 515/515/515 548/548/548 +f 549/549/549 548/548/548 515/515/515 +f 515/515/515 516/516/516 549/549/549 +f 550/550/550 549/549/549 516/516/516 +f 516/516/516 517/517/517 550/550/550 +f 551/551/551 550/550/550 517/517/517 +f 517/517/517 518/518/518 551/551/551 +f 552/552/552 551/551/551 518/518/518 +f 518/518/518 519/519/519 552/552/552 +f 553/553/553 552/552/552 519/519/519 +f 519/519/519 520/520/520 553/553/553 +f 554/554/554 553/553/553 520/520/520 +f 520/520/520 521/521/521 554/554/554 +f 555/555/555 554/554/554 521/521/521 +f 521/521/521 522/522/522 555/555/555 +f 556/556/556 555/555/555 522/522/522 +f 522/522/522 523/523/523 556/556/556 +f 557/557/557 556/556/556 523/523/523 +f 523/523/523 524/524/524 557/557/557 +f 558/558/558 557/557/557 524/524/524 +f 524/524/524 525/525/525 558/558/558 +f 559/559/559 558/558/558 525/525/525 +f 525/525/525 526/526/526 559/559/559 +f 560/560/560 559/559/559 526/526/526 +f 526/526/526 527/527/527 560/560/560 +f 561/561/561 560/560/560 527/527/527 +f 527/527/527 528/528/528 561/561/561 +f 528/528/528 527/527/527 494/494/494 +f 494/494/494 495/495/495 528/528/528 +f 495/495/495 494/494/494 461/461/461 +f 461/461/461 462/462/462 495/495/495 +f 462/462/462 461/461/461 428/428/428 +f 428/428/428 429/429/429 462/462/462 +f 429/429/429 428/428/428 395/395/395 +f 395/395/395 396/396/396 429/429/429 +f 396/396/396 395/395/395 362/362/362 +f 362/362/362 363/363/363 396/396/396 +f 363/363/363 362/362/362 329/329/329 +f 329/329/329 330/330/330 363/363/363 +f 330/330/330 329/329/329 296/296/296 +f 296/296/296 297/297/297 330/330/330 +f 297/297/297 296/296/296 263/263/263 +f 263/263/263 264/264/264 297/297/297 +f 264/264/264 263/263/263 230/230/230 +f 230/230/230 231/231/231 264/264/264 +f 231/231/231 230/230/230 197/197/197 +f 197/197/197 198/198/198 231/231/231 +f 198/198/198 197/197/197 164/164/164 +f 164/164/164 165/165/165 198/198/198 +f 165/165/165 164/164/164 131/131/131 +f 131/131/131 132/132/132 165/165/165 +f 132/132/132 131/131/131 98/98/98 +f 98/98/98 99/99/99 132/132/132 +f 99/99/99 98/98/98 65/65/65 +f 65/65/65 66/66/66 99/99/99 +f 66/66/66 65/65/65 32/32/32 +f 32/32/32 33/33/33 66/66/66 +f 31/31/31 32/32/32 65/65/65 +f 65/65/65 64/64/64 31/31/31 +f 64/64/64 65/65/65 98/98/98 +f 30/30/30 31/31/31 64/64/64 +f 64/64/64 63/63/63 30/30/30 +f 29/29/29 30/30/30 63/63/63 +f 63/63/63 62/62/62 29/29/29 +f 28/28/28 29/29/29 62/62/62 +f 62/62/62 61/61/61 28/28/28 +f 27/27/27 28/28/28 61/61/61 +f 61/61/61 60/60/60 27/27/27 +f 26/26/26 27/27/27 60/60/60 +f 60/60/60 59/59/59 26/26/26 +f 25/25/25 26/26/26 59/59/59 +f 59/59/59 58/58/58 25/25/25 +f 24/24/24 25/25/25 58/58/58 +f 58/58/58 57/57/57 24/24/24 +f 23/23/23 24/24/24 57/57/57 +f 57/57/57 56/56/56 23/23/23 +f 22/22/22 23/23/23 56/56/56 +f 56/56/56 55/55/55 22/22/22 +f 21/21/21 22/22/22 55/55/55 +f 55/55/55 54/54/54 21/21/21 +f 20/20/20 21/21/21 54/54/54 +f 54/54/54 53/53/53 20/20/20 +f 19/19/19 20/20/20 53/53/53 +f 53/53/53 52/52/52 19/19/19 +f 18/18/18 19/19/19 52/52/52 +f 52/52/52 51/51/51 18/18/18 +f 17/17/17 18/18/18 51/51/51 +f 51/51/51 50/50/50 17/17/17 +f 16/16/16 17/17/17 50/50/50 +f 50/50/50 49/49/49 16/16/16 +f 15/15/15 16/16/16 49/49/49 +f 49/49/49 48/48/48 15/15/15 +f 14/14/14 15/15/15 48/48/48 +f 48/48/48 47/47/47 14/14/14 +f 13/13/13 14/14/14 47/47/47 +f 47/47/47 46/46/46 13/13/13 +f 12/12/12 13/13/13 46/46/46 +f 46/46/46 45/45/45 12/12/12 +f 11/11/11 12/12/12 45/45/45 +f 45/45/45 44/44/44 11/11/11 +f 10/10/10 11/11/11 44/44/44 +f 44/44/44 43/43/43 10/10/10 +f 9/9/9 10/10/10 43/43/43 +f 43/43/43 42/42/42 9/9/9 +f 8/8/8 9/9/9 42/42/42 +f 42/42/42 41/41/41 8/8/8 +f 7/7/7 8/8/8 41/41/41 +f 41/41/41 40/40/40 7/7/7 +f 6/6/6 7/7/7 40/40/40 +f 40/40/40 39/39/39 6/6/6 +f 5/5/5 6/6/6 39/39/39 +f 39/39/39 38/38/38 5/5/5 +f 4/4/4 5/5/5 38/38/38 +f 38/38/38 37/37/37 4/4/4 +f 3/3/3 4/4/4 37/37/37 +f 37/37/37 36/36/36 3/3/3 +f 2/2/2 3/3/3 36/36/36 +f 36/36/36 35/35/35 2/2/2 +f 35/35/35 36/36/36 69/69/69 +f 69/69/69 68/68/68 35/35/35 +f 68/68/68 69/69/69 102/102/102 +f 102/102/102 101/101/101 68/68/68 +f 101/101/101 102/102/102 135/135/135 +f 135/135/135 134/134/134 101/101/101 +f 134/134/134 135/135/135 168/168/168 +f 168/168/168 167/167/167 134/134/134 +f 167/167/167 168/168/168 201/201/201 +f 201/201/201 200/200/200 167/167/167 +f 200/200/200 201/201/201 234/234/234 +f 234/234/234 233/233/233 200/200/200 +f 233/233/233 234/234/234 267/267/267 +f 267/267/267 266/266/266 233/233/233 +f 266/266/266 267/267/267 300/300/300 +f 300/300/300 299/299/299 266/266/266 +f 299/299/299 300/300/300 333/333/333 +f 333/333/333 332/332/332 299/299/299 +f 332/332/332 333/333/333 366/366/366 +f 366/366/366 365/365/365 332/332/332 +f 365/365/365 366/366/366 399/399/399 +f 399/399/399 398/398/398 365/365/365 +f 398/398/398 399/399/399 432/432/432 +f 432/432/432 431/431/431 398/398/398 +f 431/431/431 432/432/432 465/465/465 +f 465/465/465 464/464/464 431/431/431 +f 464/464/464 465/465/465 498/498/498 +f 499/499/499 498/498/498 465/465/465 +f 465/465/465 466/466/466 499/499/499 +f 466/466/466 465/465/465 432/432/432 +f 500/500/500 499/499/499 466/466/466 +f 466/466/466 467/467/467 500/500/500 +f 501/501/501 500/500/500 467/467/467 +f 467/467/467 468/468/468 501/501/501 +f 502/502/502 501/501/501 468/468/468 +f 468/468/468 469/469/469 502/502/502 +f 503/503/503 502/502/502 469/469/469 +f 469/469/469 470/470/470 503/503/503 +f 504/504/504 503/503/503 470/470/470 +f 470/470/470 471/471/471 504/504/504 +f 505/505/505 504/504/504 471/471/471 +f 471/471/471 472/472/472 505/505/505 +f 506/506/506 505/505/505 472/472/472 +f 472/472/472 473/473/473 506/506/506 +f 507/507/507 506/506/506 473/473/473 +f 473/473/473 474/474/474 507/507/507 +f 508/508/508 507/507/507 474/474/474 +f 474/474/474 475/475/475 508/508/508 +f 509/509/509 508/508/508 475/475/475 +f 475/475/475 476/476/476 509/509/509 +f 510/510/510 509/509/509 476/476/476 +f 476/476/476 477/477/477 510/510/510 +f 511/511/511 510/510/510 477/477/477 +f 477/477/477 478/478/478 511/511/511 +f 512/512/512 511/511/511 478/478/478 +f 478/478/478 479/479/479 512/512/512 +f 513/513/513 512/512/512 479/479/479 +f 479/479/479 480/480/480 513/513/513 +f 514/514/514 513/513/513 480/480/480 +f 480/480/480 481/481/481 514/514/514 +f 515/515/515 514/514/514 481/481/481 +f 481/481/481 482/482/482 515/515/515 +f 516/516/516 515/515/515 482/482/482 +f 482/482/482 483/483/483 516/516/516 +f 517/517/517 516/516/516 483/483/483 +f 483/483/483 484/484/484 517/517/517 +f 518/518/518 517/517/517 484/484/484 +f 484/484/484 485/485/485 518/518/518 +f 519/519/519 518/518/518 485/485/485 +f 485/485/485 486/486/486 519/519/519 +f 520/520/520 519/519/519 486/486/486 +f 486/486/486 487/487/487 520/520/520 +f 521/521/521 520/520/520 487/487/487 +f 487/487/487 488/488/488 521/521/521 +f 522/522/522 521/521/521 488/488/488 +f 488/488/488 489/489/489 522/522/522 +f 523/523/523 522/522/522 489/489/489 +f 489/489/489 490/490/490 523/523/523 +f 524/524/524 523/523/523 490/490/490 +f 490/490/490 491/491/491 524/524/524 +f 525/525/525 524/524/524 491/491/491 +f 491/491/491 492/492/492 525/525/525 +f 526/526/526 525/525/525 492/492/492 +f 492/492/492 493/493/493 526/526/526 +f 527/527/527 526/526/526 493/493/493 +f 493/493/493 494/494/494 527/527/527 +f 494/494/494 493/493/493 460/460/460 +f 460/460/460 461/461/461 494/494/494 +f 461/461/461 460/460/460 427/427/427 +f 427/427/427 428/428/428 461/461/461 +f 428/428/428 427/427/427 394/394/394 +f 394/394/394 395/395/395 428/428/428 +f 395/395/395 394/394/394 361/361/361 +f 361/361/361 362/362/362 395/395/395 +f 362/362/362 361/361/361 328/328/328 +f 328/328/328 329/329/329 362/362/362 +f 329/329/329 328/328/328 295/295/295 +f 295/295/295 296/296/296 329/329/329 +f 296/296/296 295/295/295 262/262/262 +f 262/262/262 263/263/263 296/296/296 +f 263/263/263 262/262/262 229/229/229 +f 229/229/229 230/230/230 263/263/263 +f 230/230/230 229/229/229 196/196/196 +f 196/196/196 197/197/197 230/230/230 +f 197/197/197 196/196/196 163/163/163 +f 163/163/163 164/164/164 197/197/197 +f 164/164/164 163/163/163 130/130/130 +f 130/130/130 131/131/131 164/164/164 +f 131/131/131 130/130/130 97/97/97 +f 97/97/97 98/98/98 131/131/131 +f 98/98/98 97/97/97 64/64/64 +f 63/63/63 64/64/64 97/97/97 +f 97/97/97 96/96/96 63/63/63 +f 96/96/96 97/97/97 130/130/130 +f 62/62/62 63/63/63 96/96/96 +f 96/96/96 95/95/95 62/62/62 +f 61/61/61 62/62/62 95/95/95 +f 95/95/95 94/94/94 61/61/61 +f 60/60/60 61/61/61 94/94/94 +f 94/94/94 93/93/93 60/60/60 +f 59/59/59 60/60/60 93/93/93 +f 93/93/93 92/92/92 59/59/59 +f 58/58/58 59/59/59 92/92/92 +f 92/92/92 91/91/91 58/58/58 +f 57/57/57 58/58/58 91/91/91 +f 91/91/91 90/90/90 57/57/57 +f 56/56/56 57/57/57 90/90/90 +f 90/90/90 89/89/89 56/56/56 +f 55/55/55 56/56/56 89/89/89 +f 89/89/89 88/88/88 55/55/55 +f 54/54/54 55/55/55 88/88/88 +f 88/88/88 87/87/87 54/54/54 +f 53/53/53 54/54/54 87/87/87 +f 87/87/87 86/86/86 53/53/53 +f 52/52/52 53/53/53 86/86/86 +f 86/86/86 85/85/85 52/52/52 +f 51/51/51 52/52/52 85/85/85 +f 85/85/85 84/84/84 51/51/51 +f 50/50/50 51/51/51 84/84/84 +f 84/84/84 83/83/83 50/50/50 +f 49/49/49 50/50/50 83/83/83 +f 83/83/83 82/82/82 49/49/49 +f 48/48/48 49/49/49 82/82/82 +f 82/82/82 81/81/81 48/48/48 +f 47/47/47 48/48/48 81/81/81 +f 81/81/81 80/80/80 47/47/47 +f 46/46/46 47/47/47 80/80/80 +f 80/80/80 79/79/79 46/46/46 +f 45/45/45 46/46/46 79/79/79 +f 79/79/79 78/78/78 45/45/45 +f 44/44/44 45/45/45 78/78/78 +f 78/78/78 77/77/77 44/44/44 +f 43/43/43 44/44/44 77/77/77 +f 77/77/77 76/76/76 43/43/43 +f 42/42/42 43/43/43 76/76/76 +f 76/76/76 75/75/75 42/42/42 +f 41/41/41 42/42/42 75/75/75 +f 75/75/75 74/74/74 41/41/41 +f 40/40/40 41/41/41 74/74/74 +f 74/74/74 73/73/73 40/40/40 +f 39/39/39 40/40/40 73/73/73 +f 73/73/73 72/72/72 39/39/39 +f 38/38/38 39/39/39 72/72/72 +f 72/72/72 71/71/71 38/38/38 +f 37/37/37 38/38/38 71/71/71 +f 71/71/71 70/70/70 37/37/37 +f 36/36/36 37/37/37 70/70/70 +f 70/70/70 69/69/69 36/36/36 +f 69/69/69 70/70/70 103/103/103 +f 103/103/103 102/102/102 69/69/69 +f 102/102/102 103/103/103 136/136/136 +f 136/136/136 135/135/135 102/102/102 +f 135/135/135 136/136/136 169/169/169 +f 169/169/169 168/168/168 135/135/135 +f 168/168/168 169/169/169 202/202/202 +f 202/202/202 201/201/201 168/168/168 +f 201/201/201 202/202/202 235/235/235 +f 235/235/235 234/234/234 201/201/201 +f 234/234/234 235/235/235 268/268/268 +f 268/268/268 267/267/267 234/234/234 +f 267/267/267 268/268/268 301/301/301 +f 301/301/301 300/300/300 267/267/267 +f 300/300/300 301/301/301 334/334/334 +f 334/334/334 333/333/333 300/300/300 +f 333/333/333 334/334/334 367/367/367 +f 367/367/367 366/366/366 333/333/333 +f 366/366/366 367/367/367 400/400/400 +f 400/400/400 399/399/399 366/366/366 +f 399/399/399 400/400/400 433/433/433 +f 433/433/433 432/432/432 399/399/399 +f 432/432/432 433/433/433 466/466/466 +f 467/467/467 466/466/466 433/433/433 +f 433/433/433 434/434/434 467/467/467 +f 434/434/434 433/433/433 400/400/400 +f 468/468/468 467/467/467 434/434/434 +f 434/434/434 435/435/435 468/468/468 +f 469/469/469 468/468/468 435/435/435 +f 435/435/435 436/436/436 469/469/469 +f 470/470/470 469/469/469 436/436/436 +f 436/436/436 437/437/437 470/470/470 +f 471/471/471 470/470/470 437/437/437 +f 437/437/437 438/438/438 471/471/471 +f 472/472/472 471/471/471 438/438/438 +f 438/438/438 439/439/439 472/472/472 +f 473/473/473 472/472/472 439/439/439 +f 439/439/439 440/440/440 473/473/473 +f 474/474/474 473/473/473 440/440/440 +f 440/440/440 441/441/441 474/474/474 +f 475/475/475 474/474/474 441/441/441 +f 441/441/441 442/442/442 475/475/475 +f 476/476/476 475/475/475 442/442/442 +f 442/442/442 443/443/443 476/476/476 +f 477/477/477 476/476/476 443/443/443 +f 443/443/443 444/444/444 477/477/477 +f 478/478/478 477/477/477 444/444/444 +f 444/444/444 445/445/445 478/478/478 +f 479/479/479 478/478/478 445/445/445 +f 445/445/445 446/446/446 479/479/479 +f 480/480/480 479/479/479 446/446/446 +f 446/446/446 447/447/447 480/480/480 +f 481/481/481 480/480/480 447/447/447 +f 447/447/447 448/448/448 481/481/481 +f 482/482/482 481/481/481 448/448/448 +f 448/448/448 449/449/449 482/482/482 +f 483/483/483 482/482/482 449/449/449 +f 449/449/449 450/450/450 483/483/483 +f 484/484/484 483/483/483 450/450/450 +f 450/450/450 451/451/451 484/484/484 +f 485/485/485 484/484/484 451/451/451 +f 451/451/451 452/452/452 485/485/485 +f 486/486/486 485/485/485 452/452/452 +f 452/452/452 453/453/453 486/486/486 +f 487/487/487 486/486/486 453/453/453 +f 453/453/453 454/454/454 487/487/487 +f 488/488/488 487/487/487 454/454/454 +f 454/454/454 455/455/455 488/488/488 +f 489/489/489 488/488/488 455/455/455 +f 455/455/455 456/456/456 489/489/489 +f 490/490/490 489/489/489 456/456/456 +f 456/456/456 457/457/457 490/490/490 +f 491/491/491 490/490/490 457/457/457 +f 457/457/457 458/458/458 491/491/491 +f 492/492/492 491/491/491 458/458/458 +f 458/458/458 459/459/459 492/492/492 +f 493/493/493 492/492/492 459/459/459 +f 459/459/459 460/460/460 493/493/493 +f 460/460/460 459/459/459 426/426/426 +f 426/426/426 427/427/427 460/460/460 +f 427/427/427 426/426/426 393/393/393 +f 393/393/393 394/394/394 427/427/427 +f 394/394/394 393/393/393 360/360/360 +f 360/360/360 361/361/361 394/394/394 +f 361/361/361 360/360/360 327/327/327 +f 327/327/327 328/328/328 361/361/361 +f 328/328/328 327/327/327 294/294/294 +f 294/294/294 295/295/295 328/328/328 +f 295/295/295 294/294/294 261/261/261 +f 261/261/261 262/262/262 295/295/295 +f 262/262/262 261/261/261 228/228/228 +f 228/228/228 229/229/229 262/262/262 +f 229/229/229 228/228/228 195/195/195 +f 195/195/195 196/196/196 229/229/229 +f 196/196/196 195/195/195 162/162/162 +f 162/162/162 163/163/163 196/196/196 +f 163/163/163 162/162/162 129/129/129 +f 129/129/129 130/130/130 163/163/163 +f 130/130/130 129/129/129 96/96/96 +f 95/95/95 96/96/96 129/129/129 +f 129/129/129 128/128/128 95/95/95 +f 128/128/128 129/129/129 162/162/162 +f 94/94/94 95/95/95 128/128/128 +f 128/128/128 127/127/127 94/94/94 +f 93/93/93 94/94/94 127/127/127 +f 127/127/127 126/126/126 93/93/93 +f 92/92/92 93/93/93 126/126/126 +f 126/126/126 125/125/125 92/92/92 +f 91/91/91 92/92/92 125/125/125 +f 125/125/125 124/124/124 91/91/91 +f 90/90/90 91/91/91 124/124/124 +f 124/124/124 123/123/123 90/90/90 +f 89/89/89 90/90/90 123/123/123 +f 123/123/123 122/122/122 89/89/89 +f 88/88/88 89/89/89 122/122/122 +f 122/122/122 121/121/121 88/88/88 +f 87/87/87 88/88/88 121/121/121 +f 121/121/121 120/120/120 87/87/87 +f 86/86/86 87/87/87 120/120/120 +f 120/120/120 119/119/119 86/86/86 +f 85/85/85 86/86/86 119/119/119 +f 119/119/119 118/118/118 85/85/85 +f 84/84/84 85/85/85 118/118/118 +f 118/118/118 117/117/117 84/84/84 +f 83/83/83 84/84/84 117/117/117 +f 117/117/117 116/116/116 83/83/83 +f 82/82/82 83/83/83 116/116/116 +f 116/116/116 115/115/115 82/82/82 +f 81/81/81 82/82/82 115/115/115 +f 115/115/115 114/114/114 81/81/81 +f 80/80/80 81/81/81 114/114/114 +f 114/114/114 113/113/113 80/80/80 +f 79/79/79 80/80/80 113/113/113 +f 113/113/113 112/112/112 79/79/79 +f 78/78/78 79/79/79 112/112/112 +f 112/112/112 111/111/111 78/78/78 +f 77/77/77 78/78/78 111/111/111 +f 111/111/111 110/110/110 77/77/77 +f 76/76/76 77/77/77 110/110/110 +f 110/110/110 109/109/109 76/76/76 +f 75/75/75 76/76/76 109/109/109 +f 109/109/109 108/108/108 75/75/75 +f 74/74/74 75/75/75 108/108/108 +f 108/108/108 107/107/107 74/74/74 +f 73/73/73 74/74/74 107/107/107 +f 107/107/107 106/106/106 73/73/73 +f 72/72/72 73/73/73 106/106/106 +f 106/106/106 105/105/105 72/72/72 +f 71/71/71 72/72/72 105/105/105 +f 105/105/105 104/104/104 71/71/71 +f 70/70/70 71/71/71 104/104/104 +f 104/104/104 103/103/103 70/70/70 +f 103/103/103 104/104/104 137/137/137 +f 137/137/137 136/136/136 103/103/103 +f 136/136/136 137/137/137 170/170/170 +f 170/170/170 169/169/169 136/136/136 +f 169/169/169 170/170/170 203/203/203 +f 203/203/203 202/202/202 169/169/169 +f 202/202/202 203/203/203 236/236/236 +f 236/236/236 235/235/235 202/202/202 +f 235/235/235 236/236/236 269/269/269 +f 269/269/269 268/268/268 235/235/235 +f 268/268/268 269/269/269 302/302/302 +f 302/302/302 301/301/301 268/268/268 +f 301/301/301 302/302/302 335/335/335 +f 335/335/335 334/334/334 301/301/301 +f 334/334/334 335/335/335 368/368/368 +f 368/368/368 367/367/367 334/334/334 +f 367/367/367 368/368/368 401/401/401 +f 401/401/401 400/400/400 367/367/367 +f 400/400/400 401/401/401 434/434/434 +f 435/435/435 434/434/434 401/401/401 +f 401/401/401 402/402/402 435/435/435 +f 402/402/402 401/401/401 368/368/368 +f 436/436/436 435/435/435 402/402/402 +f 402/402/402 403/403/403 436/436/436 +f 437/437/437 436/436/436 403/403/403 +f 403/403/403 404/404/404 437/437/437 +f 438/438/438 437/437/437 404/404/404 +f 404/404/404 405/405/405 438/438/438 +f 439/439/439 438/438/438 405/405/405 +f 405/405/405 406/406/406 439/439/439 +f 440/440/440 439/439/439 406/406/406 +f 406/406/406 407/407/407 440/440/440 +f 441/441/441 440/440/440 407/407/407 +f 407/407/407 408/408/408 441/441/441 +f 442/442/442 441/441/441 408/408/408 +f 408/408/408 409/409/409 442/442/442 +f 443/443/443 442/442/442 409/409/409 +f 409/409/409 410/410/410 443/443/443 +f 444/444/444 443/443/443 410/410/410 +f 410/410/410 411/411/411 444/444/444 +f 445/445/445 444/444/444 411/411/411 +f 411/411/411 412/412/412 445/445/445 +f 446/446/446 445/445/445 412/412/412 +f 412/412/412 413/413/413 446/446/446 +f 447/447/447 446/446/446 413/413/413 +f 413/413/413 414/414/414 447/447/447 +f 448/448/448 447/447/447 414/414/414 +f 414/414/414 415/415/415 448/448/448 +f 449/449/449 448/448/448 415/415/415 +f 415/415/415 416/416/416 449/449/449 +f 450/450/450 449/449/449 416/416/416 +f 416/416/416 417/417/417 450/450/450 +f 451/451/451 450/450/450 417/417/417 +f 417/417/417 418/418/418 451/451/451 +f 452/452/452 451/451/451 418/418/418 +f 418/418/418 419/419/419 452/452/452 +f 453/453/453 452/452/452 419/419/419 +f 419/419/419 420/420/420 453/453/453 +f 454/454/454 453/453/453 420/420/420 +f 420/420/420 421/421/421 454/454/454 +f 455/455/455 454/454/454 421/421/421 +f 421/421/421 422/422/422 455/455/455 +f 456/456/456 455/455/455 422/422/422 +f 422/422/422 423/423/423 456/456/456 +f 457/457/457 456/456/456 423/423/423 +f 423/423/423 424/424/424 457/457/457 +f 458/458/458 457/457/457 424/424/424 +f 424/424/424 425/425/425 458/458/458 +f 459/459/459 458/458/458 425/425/425 +f 425/425/425 426/426/426 459/459/459 +f 426/426/426 425/425/425 392/392/392 +f 392/392/392 393/393/393 426/426/426 +f 393/393/393 392/392/392 359/359/359 +f 359/359/359 360/360/360 393/393/393 +f 360/360/360 359/359/359 326/326/326 +f 326/326/326 327/327/327 360/360/360 +f 327/327/327 326/326/326 293/293/293 +f 293/293/293 294/294/294 327/327/327 +f 294/294/294 293/293/293 260/260/260 +f 260/260/260 261/261/261 294/294/294 +f 261/261/261 260/260/260 227/227/227 +f 227/227/227 228/228/228 261/261/261 +f 228/228/228 227/227/227 194/194/194 +f 194/194/194 195/195/195 228/228/228 +f 195/195/195 194/194/194 161/161/161 +f 161/161/161 162/162/162 195/195/195 +f 162/162/162 161/161/161 128/128/128 +f 127/127/127 128/128/128 161/161/161 +f 161/161/161 160/160/160 127/127/127 +f 160/160/160 161/161/161 194/194/194 +f 126/126/126 127/127/127 160/160/160 +f 160/160/160 159/159/159 126/126/126 +f 125/125/125 126/126/126 159/159/159 +f 159/159/159 158/158/158 125/125/125 +f 124/124/124 125/125/125 158/158/158 +f 158/158/158 157/157/157 124/124/124 +f 123/123/123 124/124/124 157/157/157 +f 157/157/157 156/156/156 123/123/123 +f 122/122/122 123/123/123 156/156/156 +f 156/156/156 155/155/155 122/122/122 +f 121/121/121 122/122/122 155/155/155 +f 155/155/155 154/154/154 121/121/121 +f 120/120/120 121/121/121 154/154/154 +f 154/154/154 153/153/153 120/120/120 +f 119/119/119 120/120/120 153/153/153 +f 153/153/153 152/152/152 119/119/119 +f 118/118/118 119/119/119 152/152/152 +f 152/152/152 151/151/151 118/118/118 +f 117/117/117 118/118/118 151/151/151 +f 151/151/151 150/150/150 117/117/117 +f 116/116/116 117/117/117 150/150/150 +f 150/150/150 149/149/149 116/116/116 +f 115/115/115 116/116/116 149/149/149 +f 149/149/149 148/148/148 115/115/115 +f 114/114/114 115/115/115 148/148/148 +f 148/148/148 147/147/147 114/114/114 +f 113/113/113 114/114/114 147/147/147 +f 147/147/147 146/146/146 113/113/113 +f 112/112/112 113/113/113 146/146/146 +f 146/146/146 145/145/145 112/112/112 +f 111/111/111 112/112/112 145/145/145 +f 145/145/145 144/144/144 111/111/111 +f 110/110/110 111/111/111 144/144/144 +f 144/144/144 143/143/143 110/110/110 +f 109/109/109 110/110/110 143/143/143 +f 143/143/143 142/142/142 109/109/109 +f 108/108/108 109/109/109 142/142/142 +f 142/142/142 141/141/141 108/108/108 +f 107/107/107 108/108/108 141/141/141 +f 141/141/141 140/140/140 107/107/107 +f 106/106/106 107/107/107 140/140/140 +f 140/140/140 139/139/139 106/106/106 +f 105/105/105 106/106/106 139/139/139 +f 139/139/139 138/138/138 105/105/105 +f 104/104/104 105/105/105 138/138/138 +f 138/138/138 137/137/137 104/104/104 +f 137/137/137 138/138/138 171/171/171 +f 171/171/171 170/170/170 137/137/137 +f 170/170/170 171/171/171 204/204/204 +f 204/204/204 203/203/203 170/170/170 +f 203/203/203 204/204/204 237/237/237 +f 237/237/237 236/236/236 203/203/203 +f 236/236/236 237/237/237 270/270/270 +f 270/270/270 269/269/269 236/236/236 +f 269/269/269 270/270/270 303/303/303 +f 303/303/303 302/302/302 269/269/269 +f 302/302/302 303/303/303 336/336/336 +f 336/336/336 335/335/335 302/302/302 +f 335/335/335 336/336/336 369/369/369 +f 369/369/369 368/368/368 335/335/335 +f 368/368/368 369/369/369 402/402/402 +f 403/403/403 402/402/402 369/369/369 +f 369/369/369 370/370/370 403/403/403 +f 370/370/370 369/369/369 336/336/336 +f 404/404/404 403/403/403 370/370/370 +f 370/370/370 371/371/371 404/404/404 +f 405/405/405 404/404/404 371/371/371 +f 371/371/371 372/372/372 405/405/405 +f 406/406/406 405/405/405 372/372/372 +f 372/372/372 373/373/373 406/406/406 +f 407/407/407 406/406/406 373/373/373 +f 373/373/373 374/374/374 407/407/407 +f 408/408/408 407/407/407 374/374/374 +f 374/374/374 375/375/375 408/408/408 +f 409/409/409 408/408/408 375/375/375 +f 375/375/375 376/376/376 409/409/409 +f 410/410/410 409/409/409 376/376/376 +f 376/376/376 377/377/377 410/410/410 +f 411/411/411 410/410/410 377/377/377 +f 377/377/377 378/378/378 411/411/411 +f 412/412/412 411/411/411 378/378/378 +f 378/378/378 379/379/379 412/412/412 +f 413/413/413 412/412/412 379/379/379 +f 379/379/379 380/380/380 413/413/413 +f 414/414/414 413/413/413 380/380/380 +f 380/380/380 381/381/381 414/414/414 +f 415/415/415 414/414/414 381/381/381 +f 381/381/381 382/382/382 415/415/415 +f 416/416/416 415/415/415 382/382/382 +f 382/382/382 383/383/383 416/416/416 +f 417/417/417 416/416/416 383/383/383 +f 383/383/383 384/384/384 417/417/417 +f 418/418/418 417/417/417 384/384/384 +f 384/384/384 385/385/385 418/418/418 +f 419/419/419 418/418/418 385/385/385 +f 385/385/385 386/386/386 419/419/419 +f 420/420/420 419/419/419 386/386/386 +f 386/386/386 387/387/387 420/420/420 +f 421/421/421 420/420/420 387/387/387 +f 387/387/387 388/388/388 421/421/421 +f 422/422/422 421/421/421 388/388/388 +f 388/388/388 389/389/389 422/422/422 +f 423/423/423 422/422/422 389/389/389 +f 389/389/389 390/390/390 423/423/423 +f 424/424/424 423/423/423 390/390/390 +f 390/390/390 391/391/391 424/424/424 +f 425/425/425 424/424/424 391/391/391 +f 391/391/391 392/392/392 425/425/425 +f 392/392/392 391/391/391 358/358/358 +f 358/358/358 359/359/359 392/392/392 +f 359/359/359 358/358/358 325/325/325 +f 325/325/325 326/326/326 359/359/359 +f 326/326/326 325/325/325 292/292/292 +f 292/292/292 293/293/293 326/326/326 +f 293/293/293 292/292/292 259/259/259 +f 259/259/259 260/260/260 293/293/293 +f 260/260/260 259/259/259 226/226/226 +f 226/226/226 227/227/227 260/260/260 +f 227/227/227 226/226/226 193/193/193 +f 193/193/193 194/194/194 227/227/227 +f 194/194/194 193/193/193 160/160/160 +f 159/159/159 160/160/160 193/193/193 +f 193/193/193 192/192/192 159/159/159 +f 192/192/192 193/193/193 226/226/226 +f 158/158/158 159/159/159 192/192/192 +f 192/192/192 191/191/191 158/158/158 +f 157/157/157 158/158/158 191/191/191 +f 191/191/191 190/190/190 157/157/157 +f 156/156/156 157/157/157 190/190/190 +f 190/190/190 189/189/189 156/156/156 +f 155/155/155 156/156/156 189/189/189 +f 189/189/189 188/188/188 155/155/155 +f 154/154/154 155/155/155 188/188/188 +f 188/188/188 187/187/187 154/154/154 +f 153/153/153 154/154/154 187/187/187 +f 187/187/187 186/186/186 153/153/153 +f 152/152/152 153/153/153 186/186/186 +f 186/186/186 185/185/185 152/152/152 +f 151/151/151 152/152/152 185/185/185 +f 185/185/185 184/184/184 151/151/151 +f 150/150/150 151/151/151 184/184/184 +f 184/184/184 183/183/183 150/150/150 +f 149/149/149 150/150/150 183/183/183 +f 183/183/183 182/182/182 149/149/149 +f 148/148/148 149/149/149 182/182/182 +f 182/182/182 181/181/181 148/148/148 +f 147/147/147 148/148/148 181/181/181 +f 181/181/181 180/180/180 147/147/147 +f 146/146/146 147/147/147 180/180/180 +f 180/180/180 179/179/179 146/146/146 +f 145/145/145 146/146/146 179/179/179 +f 179/179/179 178/178/178 145/145/145 +f 144/144/144 145/145/145 178/178/178 +f 178/178/178 177/177/177 144/144/144 +f 143/143/143 144/144/144 177/177/177 +f 177/177/177 176/176/176 143/143/143 +f 142/142/142 143/143/143 176/176/176 +f 176/176/176 175/175/175 142/142/142 +f 141/141/141 142/142/142 175/175/175 +f 175/175/175 174/174/174 141/141/141 +f 140/140/140 141/141/141 174/174/174 +f 174/174/174 173/173/173 140/140/140 +f 139/139/139 140/140/140 173/173/173 +f 173/173/173 172/172/172 139/139/139 +f 138/138/138 139/139/139 172/172/172 +f 172/172/172 171/171/171 138/138/138 +f 171/171/171 172/172/172 205/205/205 +f 205/205/205 204/204/204 171/171/171 +f 204/204/204 205/205/205 238/238/238 +f 238/238/238 237/237/237 204/204/204 +f 237/237/237 238/238/238 271/271/271 +f 271/271/271 270/270/270 237/237/237 +f 270/270/270 271/271/271 304/304/304 +f 304/304/304 303/303/303 270/270/270 +f 303/303/303 304/304/304 337/337/337 +f 337/337/337 336/336/336 303/303/303 +f 336/336/336 337/337/337 370/370/370 +f 371/371/371 370/370/370 337/337/337 +f 337/337/337 338/338/338 371/371/371 +f 338/338/338 337/337/337 304/304/304 +f 372/372/372 371/371/371 338/338/338 +f 338/338/338 339/339/339 372/372/372 +f 373/373/373 372/372/372 339/339/339 +f 339/339/339 340/340/340 373/373/373 +f 374/374/374 373/373/373 340/340/340 +f 340/340/340 341/341/341 374/374/374 +f 375/375/375 374/374/374 341/341/341 +f 341/341/341 342/342/342 375/375/375 +f 376/376/376 375/375/375 342/342/342 +f 342/342/342 343/343/343 376/376/376 +f 377/377/377 376/376/376 343/343/343 +f 343/343/343 344/344/344 377/377/377 +f 378/378/378 377/377/377 344/344/344 +f 344/344/344 345/345/345 378/378/378 +f 379/379/379 378/378/378 345/345/345 +f 345/345/345 346/346/346 379/379/379 +f 380/380/380 379/379/379 346/346/346 +f 346/346/346 347/347/347 380/380/380 +f 381/381/381 380/380/380 347/347/347 +f 347/347/347 348/348/348 381/381/381 +f 382/382/382 381/381/381 348/348/348 +f 348/348/348 349/349/349 382/382/382 +f 383/383/383 382/382/382 349/349/349 +f 349/349/349 350/350/350 383/383/383 +f 384/384/384 383/383/383 350/350/350 +f 350/350/350 351/351/351 384/384/384 +f 385/385/385 384/384/384 351/351/351 +f 351/351/351 352/352/352 385/385/385 +f 386/386/386 385/385/385 352/352/352 +f 352/352/352 353/353/353 386/386/386 +f 387/387/387 386/386/386 353/353/353 +f 353/353/353 354/354/354 387/387/387 +f 388/388/388 387/387/387 354/354/354 +f 354/354/354 355/355/355 388/388/388 +f 389/389/389 388/388/388 355/355/355 +f 355/355/355 356/356/356 389/389/389 +f 390/390/390 389/389/389 356/356/356 +f 356/356/356 357/357/357 390/390/390 +f 391/391/391 390/390/390 357/357/357 +f 357/357/357 358/358/358 391/391/391 +f 358/358/358 357/357/357 324/324/324 +f 324/324/324 325/325/325 358/358/358 +f 325/325/325 324/324/324 291/291/291 +f 291/291/291 292/292/292 325/325/325 +f 292/292/292 291/291/291 258/258/258 +f 258/258/258 259/259/259 292/292/292 +f 259/259/259 258/258/258 225/225/225 +f 225/225/225 226/226/226 259/259/259 +f 226/226/226 225/225/225 192/192/192 +f 191/191/191 192/192/192 225/225/225 +f 225/225/225 224/224/224 191/191/191 +f 224/224/224 225/225/225 258/258/258 +f 190/190/190 191/191/191 224/224/224 +f 224/224/224 223/223/223 190/190/190 +f 189/189/189 190/190/190 223/223/223 +f 223/223/223 222/222/222 189/189/189 +f 188/188/188 189/189/189 222/222/222 +f 222/222/222 221/221/221 188/188/188 +f 187/187/187 188/188/188 221/221/221 +f 221/221/221 220/220/220 187/187/187 +f 186/186/186 187/187/187 220/220/220 +f 220/220/220 219/219/219 186/186/186 +f 185/185/185 186/186/186 219/219/219 +f 219/219/219 218/218/218 185/185/185 +f 184/184/184 185/185/185 218/218/218 +f 218/218/218 217/217/217 184/184/184 +f 183/183/183 184/184/184 217/217/217 +f 217/217/217 216/216/216 183/183/183 +f 182/182/182 183/183/183 216/216/216 +f 216/216/216 215/215/215 182/182/182 +f 181/181/181 182/182/182 215/215/215 +f 215/215/215 214/214/214 181/181/181 +f 180/180/180 181/181/181 214/214/214 +f 214/214/214 213/213/213 180/180/180 +f 179/179/179 180/180/180 213/213/213 +f 213/213/213 212/212/212 179/179/179 +f 178/178/178 179/179/179 212/212/212 +f 212/212/212 211/211/211 178/178/178 +f 177/177/177 178/178/178 211/211/211 +f 211/211/211 210/210/210 177/177/177 +f 176/176/176 177/177/177 210/210/210 +f 210/210/210 209/209/209 176/176/176 +f 175/175/175 176/176/176 209/209/209 +f 209/209/209 208/208/208 175/175/175 +f 174/174/174 175/175/175 208/208/208 +f 208/208/208 207/207/207 174/174/174 +f 173/173/173 174/174/174 207/207/207 +f 207/207/207 206/206/206 173/173/173 +f 172/172/172 173/173/173 206/206/206 +f 206/206/206 205/205/205 172/172/172 +f 205/205/205 206/206/206 239/239/239 +f 239/239/239 238/238/238 205/205/205 +f 238/238/238 239/239/239 272/272/272 +f 272/272/272 271/271/271 238/238/238 +f 271/271/271 272/272/272 305/305/305 +f 305/305/305 304/304/304 271/271/271 +f 304/304/304 305/305/305 338/338/338 +f 339/339/339 338/338/338 305/305/305 +f 305/305/305 306/306/306 339/339/339 +f 306/306/306 305/305/305 272/272/272 +f 340/340/340 339/339/339 306/306/306 +f 306/306/306 307/307/307 340/340/340 +f 341/341/341 340/340/340 307/307/307 +f 307/307/307 308/308/308 341/341/341 +f 342/342/342 341/341/341 308/308/308 +f 308/308/308 309/309/309 342/342/342 +f 343/343/343 342/342/342 309/309/309 +f 309/309/309 310/310/310 343/343/343 +f 344/344/344 343/343/343 310/310/310 +f 310/310/310 311/311/311 344/344/344 +f 345/345/345 344/344/344 311/311/311 +f 311/311/311 312/312/312 345/345/345 +f 346/346/346 345/345/345 312/312/312 +f 312/312/312 313/313/313 346/346/346 +f 347/347/347 346/346/346 313/313/313 +f 313/313/313 314/314/314 347/347/347 +f 348/348/348 347/347/347 314/314/314 +f 314/314/314 315/315/315 348/348/348 +f 349/349/349 348/348/348 315/315/315 +f 315/315/315 316/316/316 349/349/349 +f 350/350/350 349/349/349 316/316/316 +f 316/316/316 317/317/317 350/350/350 +f 351/351/351 350/350/350 317/317/317 +f 317/317/317 318/318/318 351/351/351 +f 352/352/352 351/351/351 318/318/318 +f 318/318/318 319/319/319 352/352/352 +f 353/353/353 352/352/352 319/319/319 +f 319/319/319 320/320/320 353/353/353 +f 354/354/354 353/353/353 320/320/320 +f 320/320/320 321/321/321 354/354/354 +f 355/355/355 354/354/354 321/321/321 +f 321/321/321 322/322/322 355/355/355 +f 356/356/356 355/355/355 322/322/322 +f 322/322/322 323/323/323 356/356/356 +f 357/357/357 356/356/356 323/323/323 +f 323/323/323 324/324/324 357/357/357 +f 324/324/324 323/323/323 290/290/290 +f 290/290/290 291/291/291 324/324/324 +f 291/291/291 290/290/290 257/257/257 +f 257/257/257 258/258/258 291/291/291 +f 258/258/258 257/257/257 224/224/224 +f 223/223/223 224/224/224 257/257/257 +f 257/257/257 256/256/256 223/223/223 +f 256/256/256 257/257/257 290/290/290 +f 222/222/222 223/223/223 256/256/256 +f 256/256/256 255/255/255 222/222/222 +f 221/221/221 222/222/222 255/255/255 +f 255/255/255 254/254/254 221/221/221 +f 220/220/220 221/221/221 254/254/254 +f 254/254/254 253/253/253 220/220/220 +f 219/219/219 220/220/220 253/253/253 +f 253/253/253 252/252/252 219/219/219 +f 218/218/218 219/219/219 252/252/252 +f 252/252/252 251/251/251 218/218/218 +f 217/217/217 218/218/218 251/251/251 +f 251/251/251 250/250/250 217/217/217 +f 216/216/216 217/217/217 250/250/250 +f 250/250/250 249/249/249 216/216/216 +f 215/215/215 216/216/216 249/249/249 +f 249/249/249 248/248/248 215/215/215 +f 214/214/214 215/215/215 248/248/248 +f 248/248/248 247/247/247 214/214/214 +f 213/213/213 214/214/214 247/247/247 +f 247/247/247 246/246/246 213/213/213 +f 212/212/212 213/213/213 246/246/246 +f 246/246/246 245/245/245 212/212/212 +f 211/211/211 212/212/212 245/245/245 +f 245/245/245 244/244/244 211/211/211 +f 210/210/210 211/211/211 244/244/244 +f 244/244/244 243/243/243 210/210/210 +f 209/209/209 210/210/210 243/243/243 +f 243/243/243 242/242/242 209/209/209 +f 208/208/208 209/209/209 242/242/242 +f 242/242/242 241/241/241 208/208/208 +f 207/207/207 208/208/208 241/241/241 +f 241/241/241 240/240/240 207/207/207 +f 206/206/206 207/207/207 240/240/240 +f 240/240/240 239/239/239 206/206/206 +f 239/239/239 240/240/240 273/273/273 +f 273/273/273 272/272/272 239/239/239 +f 272/272/272 273/273/273 306/306/306 +f 307/307/307 306/306/306 273/273/273 +f 273/273/273 274/274/274 307/307/307 +f 274/274/274 273/273/273 240/240/240 +f 240/240/240 241/241/241 274/274/274 +f 308/308/308 307/307/307 274/274/274 +f 274/274/274 275/275/275 308/308/308 +f 275/275/275 274/274/274 241/241/241 +f 241/241/241 242/242/242 275/275/275 +f 309/309/309 308/308/308 275/275/275 +f 275/275/275 276/276/276 309/309/309 +f 276/276/276 275/275/275 242/242/242 +f 242/242/242 243/243/243 276/276/276 +f 310/310/310 309/309/309 276/276/276 +f 276/276/276 277/277/277 310/310/310 +f 277/277/277 276/276/276 243/243/243 +f 311/311/311 310/310/310 277/277/277 +f 277/277/277 278/278/278 311/311/311 +f 278/278/278 277/277/277 244/244/244 +f 312/312/312 311/311/311 278/278/278 +f 278/278/278 279/279/279 312/312/312 +f 279/279/279 278/278/278 245/245/245 +f 313/313/313 312/312/312 279/279/279 +f 279/279/279 280/280/280 313/313/313 +f 314/314/314 313/313/313 280/280/280 +f 280/280/280 279/279/279 246/246/246 +f 245/245/245 246/246/246 279/279/279 +f 244/244/244 245/245/245 278/278/278 +f 246/246/246 247/247/247 280/280/280 +f 281/281/281 280/280/280 247/247/247 +f 280/280/280 281/281/281 314/314/314 +f 247/247/247 248/248/248 281/281/281 +f 282/282/282 281/281/281 248/248/248 +f 248/248/248 249/249/249 282/282/282 +f 281/281/281 282/282/282 315/315/315 +f 315/315/315 314/314/314 281/281/281 +f 316/316/316 315/315/315 282/282/282 +f 282/282/282 283/283/283 316/316/316 +f 283/283/283 282/282/282 249/249/249 +f 317/317/317 316/316/316 283/283/283 +f 249/249/249 250/250/250 283/283/283 +f 284/284/284 283/283/283 250/250/250 +f 283/283/283 284/284/284 317/317/317 +f 250/250/250 251/251/251 284/284/284 +f 318/318/318 317/317/317 284/284/284 +f 284/284/284 285/285/285 318/318/318 +f 285/285/285 284/284/284 251/251/251 +f 319/319/319 318/318/318 285/285/285 +f 251/251/251 252/252/252 285/285/285 +f 286/286/286 285/285/285 252/252/252 +f 285/285/285 286/286/286 319/319/319 +f 252/252/252 253/253/253 286/286/286 +f 320/320/320 319/319/319 286/286/286 +f 286/286/286 287/287/287 320/320/320 +f 287/287/287 286/286/286 253/253/253 +f 321/321/321 320/320/320 287/287/287 +f 253/253/253 254/254/254 287/287/287 +f 288/288/288 287/287/287 254/254/254 +f 287/287/287 288/288/288 321/321/321 +f 254/254/254 255/255/255 288/288/288 +f 322/322/322 321/321/321 288/288/288 +f 288/288/288 289/289/289 322/322/322 +f 289/289/289 288/288/288 255/255/255 +f 323/323/323 322/322/322 289/289/289 +f 289/289/289 290/290/290 323/323/323 +f 290/290/290 289/289/289 256/256/256 +f 255/255/255 256/256/256 289/289/289 +f 243/243/243 244/244/244 277/277/277 diff --git a/data/geom/beam/beam b/data/geom/beam/beam new file mode 100644 index 0000000..d9d7181 --- /dev/null +++ b/data/geom/beam/beam @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-t +45.0 diff --git a/data/geom/beam/beam.map b/data/geom/beam/beam.map new file mode 100644 index 0000000..739657f --- /dev/null +++ b/data/geom/beam/beam.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/beam/beam.obj" +} diff --git a/data/geom/beam/beam.mtl b/data/geom/beam/beam.mtl new file mode 100644 index 0000000..d0d08e6 --- /dev/null +++ b/data/geom/beam/beam.mtl @@ -0,0 +1,20 @@ +# Exported from Wings 3D 1.4.1 +newmtl default +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + +newmtl geom/beam/beam +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 +map_Kd beam.png + diff --git a/data/geom/beam/beam.obj b/data/geom/beam/beam.obj new file mode 100644 index 0000000..a5bae1e --- /dev/null +++ b/data/geom/beam/beam.obj @@ -0,0 +1,521 @@ +# Exported from Wings 3D 1.4.1 +mtllib beam.mtl +o cylinder1 +#128 vertices, 128 faces +v 1.00000000 1.00000000 3.6768006e-17 +v 0.99518473 1.00000000 9.8017140e-2 +v 0.98078528 1.00000000 0.19509032 +v 0.95694034 1.00000000 0.29028468 +v 0.92387953 1.00000000 0.38268343 +v 0.88192126 1.00000000 0.47139674 +v 0.83146961 1.00000000 0.55557023 +v 0.77301045 1.00000000 0.63439328 +v 0.70710678 1.00000000 0.70710678 +v 0.63439328 1.00000000 0.77301045 +v 0.55557023 1.00000000 0.83146961 +v 0.47139674 1.00000000 0.88192126 +v 0.38268343 1.00000000 0.92387953 +v 0.29028468 1.00000000 0.95694034 +v 0.19509032 1.00000000 0.98078528 +v 9.8017140e-2 1.00000000 0.99518473 +v 9.5926809e-17 1.00000000 1.00000000 +v -9.8017140e-2 1.00000000 0.99518473 +v -0.19509032 1.00000000 0.98078528 +v -0.29028468 1.00000000 0.95694034 +v -0.38268343 1.00000000 0.92387953 +v -0.47139674 1.00000000 0.88192126 +v -0.55557023 1.00000000 0.83146961 +v -0.63439328 1.00000000 0.77301045 +v -0.70710678 1.00000000 0.70710678 +v -0.77301045 1.00000000 0.63439328 +v -0.83146961 1.00000000 0.55557023 +v -0.88192126 1.00000000 0.47139674 +v -0.92387953 1.00000000 0.38268343 +v -0.95694034 1.00000000 0.29028468 +v -0.98078528 1.00000000 0.19509032 +v -0.99518473 1.00000000 9.8017140e-2 +v -1.00000000 1.00000000 1.5923269e-16 +v -0.99518473 1.00000000 -9.8017140e-2 +v -0.98078528 1.00000000 -0.19509032 +v -0.95694034 1.00000000 -0.29028468 +v -0.92387953 1.00000000 -0.38268343 +v -0.88192126 1.00000000 -0.47139674 +v -0.83146961 1.00000000 -0.55557023 +v -0.77301045 1.00000000 -0.63439328 +v -0.70710678 1.00000000 -0.70710678 +v -0.63439328 1.00000000 -0.77301045 +v -0.55557023 1.00000000 -0.83146961 +v -0.47139674 1.00000000 -0.88192126 +v -0.38268343 1.00000000 -0.92387953 +v -0.29028468 1.00000000 -0.95694034 +v -0.19509032 1.00000000 -0.98078528 +v -9.8017140e-2 1.00000000 -0.99518473 +v -1.4900255e-16 1.00000000 -1.00000000 +v 9.8017140e-2 1.00000000 -0.99518473 +v 0.19509032 1.00000000 -0.98078528 +v 0.29028468 1.00000000 -0.95694034 +v 0.38268343 1.00000000 -0.92387953 +v 0.47139674 1.00000000 -0.88192126 +v 0.55557023 1.00000000 -0.83146961 +v 0.63439328 1.00000000 -0.77301045 +v 0.70710678 1.00000000 -0.70710678 +v 0.77301045 1.00000000 -0.63439328 +v 0.83146961 1.00000000 -0.55557023 +v 0.88192126 1.00000000 -0.47139674 +v 0.92387953 1.00000000 -0.38268343 +v 0.95694034 1.00000000 -0.29028468 +v 0.98078528 1.00000000 -0.19509032 +v 0.99518473 1.00000000 -9.8017140e-2 +v 1.00000000 0.0000000e+0 4.7704896e-17 +v 0.99518473 0.0000000e+0 9.8017140e-2 +v 0.98078528 0.0000000e+0 0.19509032 +v 0.95694034 0.0000000e+0 0.29028468 +v 0.92387953 0.0000000e+0 0.38268343 +v 0.88192126 0.0000000e+0 0.47139674 +v 0.83146961 0.0000000e+0 0.55557023 +v 0.77301045 0.0000000e+0 0.63439328 +v 0.70710678 0.0000000e+0 0.70710678 +v 0.63439328 0.0000000e+0 0.77301045 +v 0.55557023 0.0000000e+0 0.83146961 +v 0.47139674 0.0000000e+0 0.88192126 +v 0.38268343 0.0000000e+0 0.92387953 +v 0.29028468 0.0000000e+0 0.95694034 +v 0.19509032 0.0000000e+0 0.98078528 +v 9.8017140e-2 0.0000000e+0 0.99518473 +v 7.8579575e-17 0.0000000e+0 1.00000000 +v -9.8017140e-2 0.0000000e+0 0.99518473 +v -0.19509032 0.0000000e+0 0.98078528 +v -0.29028468 0.0000000e+0 0.95694034 +v -0.38268343 0.0000000e+0 0.92387953 +v -0.47139674 0.0000000e+0 0.88192126 +v -0.55557023 0.0000000e+0 0.83146961 +v -0.63439328 0.0000000e+0 0.77301045 +v -0.70710678 0.0000000e+0 0.70710678 +v -0.77301045 0.0000000e+0 0.63439328 +v -0.83146961 0.0000000e+0 0.55557023 +v -0.88192126 0.0000000e+0 0.47139674 +v -0.92387953 0.0000000e+0 0.38268343 +v -0.95694034 0.0000000e+0 0.29028468 +v -0.98078528 0.0000000e+0 0.19509032 +v -0.99518473 0.0000000e+0 9.8017140e-2 +v -1.00000000 0.0000000e+0 1.7016958e-16 +v -0.99518473 0.0000000e+0 -9.8017140e-2 +v -0.98078528 0.0000000e+0 -0.19509032 +v -0.95694034 0.0000000e+0 -0.29028468 +v -0.92387953 0.0000000e+0 -0.38268343 +v -0.88192126 0.0000000e+0 -0.47139674 +v -0.83146961 0.0000000e+0 -0.55557023 +v -0.77301045 0.0000000e+0 -0.63439328 +v -0.70710678 0.0000000e+0 -0.70710678 +v -0.63439328 0.0000000e+0 -0.77301045 +v -0.55557023 0.0000000e+0 -0.83146961 +v -0.47139674 0.0000000e+0 -0.88192126 +v -0.38268343 0.0000000e+0 -0.92387953 +v -0.29028468 0.0000000e+0 -0.95694034 +v -0.19509032 0.0000000e+0 -0.98078528 +v -9.8017140e-2 0.0000000e+0 -0.99518473 +v -1.6634979e-16 0.0000000e+0 -1.00000000 +v 9.8017140e-2 0.0000000e+0 -0.99518473 +v 0.19509032 0.0000000e+0 -0.98078528 +v 0.29028468 0.0000000e+0 -0.95694034 +v 0.38268343 0.0000000e+0 -0.92387953 +v 0.47139674 0.0000000e+0 -0.88192126 +v 0.55557023 0.0000000e+0 -0.83146961 +v 0.63439328 0.0000000e+0 -0.77301045 +v 0.70710678 0.0000000e+0 -0.70710678 +v 0.77301045 0.0000000e+0 -0.63439328 +v 0.83146961 0.0000000e+0 -0.55557023 +v 0.88192126 0.0000000e+0 -0.47139674 +v 0.92387953 0.0000000e+0 -0.38268343 +v 0.95694034 0.0000000e+0 -0.29028468 +v 0.98078528 0.0000000e+0 -0.19509032 +v 0.99518473 0.0000000e+0 -9.8017140e-2 +vt 0.0000000e+0 1.1272913e-14 +vt 3.4972025e-15 1.00000000 +vt 1.5625000e-2 1.00000000 +vt 1.5625000e-2 2.1616101e-14 +vt 3.1250000e-2 6.1013189e-15 +vt 3.1250000e-2 1.00000000 +vt 4.6875000e-2 1.00000000 +vt 4.6875000e-2 2.3533659e-14 +vt 6.2500000e-2 9.0648167e-15 +vt 6.2500000e-2 1.00000000 +vt 7.8125000e-2 1.00000000 +vt 7.8125000e-2 1.9872867e-14 +vt 9.3750000e-2 9.0648167e-15 +vt 9.3750000e-2 1.00000000 +vt 0.10937500 1.00000000 +vt 0.10937500 2.1499886e-14 +vt 0.12500000 5.3459175e-15 +vt 0.12500000 1.00000000 +vt 0.14062500 2.1209347e-14 +vt 0.14062500 1.00000000 +vt 0.15625000 7.4377983e-15 +vt 0.15625000 1.00000000 +vt 0.17187500 2.0453945e-14 +vt 0.17187500 1.00000000 +vt 0.18750000 9.1810323e-15 +vt 0.18750000 1.00000000 +vt 0.20312500 1.6618831e-14 +vt 0.20312500 1.00000000 +vt 0.21875000 8.3094153e-15 +vt 0.21875000 1.00000000 +vt 0.23437500 1.5398567e-14 +vt 0.23437500 1.00000000 +vt 0.25000000 1.2144530e-14 +vt 0.25000000 1.00000000 +vt 0.26562500 1.00000000 +vt 0.26562500 1.2609392e-14 +vt 0.28125000 9.6458947e-15 +vt 0.28125000 1.00000000 +vt 0.29687500 1.5979645e-14 +vt 0.29687500 1.00000000 +vt 0.31250000 8.0188763e-15 +vt 0.31250000 1.00000000 +vt 0.32812500 1.00000000 +vt 0.32812500 1.4817489e-14 +vt 0.34375000 1.1272913e-14 +vt 0.34375000 1.00000000 +vt 0.35937500 1.2725608e-14 +vt 0.35937500 1.00000000 +vt 0.37500000 7.8445529e-15 +vt 0.37500000 1.00000000 +vt 0.39062500 1.3481009e-14 +vt 0.39062500 1.00000000 +vt 0.40625000 7.5540139e-15 +vt 0.40625000 1.00000000 +vt 0.42187500 1.00000000 +vt 0.42187500 1.1563452e-14 +vt 0.43750000 1.1853991e-14 +vt 0.43750000 1.00000000 +vt 0.45312500 1.00000000 +vt 0.45312500 7.8445529e-15 +vt 0.46875000 9.9364337e-15 +vt 0.46875000 1.00000000 +vt 0.48437500 1.00000000 +vt 0.48437500 1.0401296e-14 +vt 0.50000000 8.5999543e-15 +vt 0.50000000 1.00000000 +vt 0.51562500 6.7986125e-15 +vt 0.51562500 1.00000000 +vt 0.53125000 1.0982374e-14 +vt 0.53125000 1.00000000 +vt 0.54687500 4.5905161e-15 +vt 0.54687500 1.00000000 +vt 0.56250000 7.7283373e-15 +vt 0.56250000 1.00000000 +vt 0.57812500 6.1013189e-15 +vt 0.57812500 1.00000000 +vt 0.59375000 6.5080735e-15 +vt 0.59375000 1.00000000 +vt 0.60937500 5.3459175e-15 +vt 0.60937500 1.00000000 +vt 0.62500000 1.00000000 +vt 0.62500000 8.4256309e-15 +vt 0.64062500 3.5445758e-15 +vt 0.64062500 1.00000000 +vt 0.65625000 1.0691835e-14 +vt 0.65625000 1.00000000 +vt 0.67187500 1.00000000 +vt 0.67187500 2.0918808e-15 +vt 0.68750000 1.0052649e-14 +vt 0.68750000 1.00000000 +vt 0.70312500 1.00000000 +vt 0.70312500 3.1378212e-15 +vt 0.71875000 1.0517512e-14 +vt 0.71875000 1.00000000 +vt 0.73437500 1.00000000 +vt 0.73437500 5.3459175e-15 +vt 0.75000000 1.2725608e-14 +vt 0.75000000 1.00000000 +vt 0.76562500 1.00000000 +vt 0.76562500 3.1378212e-15 +vt 0.78125000 1.0226973e-14 +vt 0.78125000 1.00000000 +vt 0.79687500 1.00000000 +vt 0.79687500 3.7188992e-15 +vt 0.81250000 9.7621103e-15 +vt 0.81250000 1.00000000 +vt 0.82812500 1.00000000 +vt 0.82812500 4.8810551e-15 +vt 0.84375000 1.1563452e-14 +vt 0.84375000 1.00000000 +vt 0.85937500 1.00000000 +vt 0.85937500 3.1378212e-15 +vt 0.87500000 8.8904933e-15 +vt 0.87500000 1.00000000 +vt 0.89062500 1.00000000 +vt 0.89062500 1.8013418e-15 +vt 0.90625000 1.2144530e-14 +vt 0.90625000 1.00000000 +vt 0.92187500 1.00000000 +vt 0.92187500 0.0000000e+0 +vt 0.93750000 1.0691835e-14 +vt 0.93750000 1.00000000 +vt 0.95312500 1.00000000 +vt 0.95312500 1.5108028e-15 +vt 0.96875000 1.1853991e-14 +vt 0.96875000 1.00000000 +vt 0.98437500 1.00000000 +vt 0.98437500 3.1378212e-15 +vt 1.00000000 1.1272913e-14 +vt 1.00000000 1.00000000 +vn 1.00000000 -7.4044900e-32 -1.3894524e-17 +vn 0.99518473 7.0792658e-17 9.8017140e-2 +vn 0.98078528 0.0000000e+0 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 -4.4245411e-18 0.95694034 +vn 0.19509032 -1.3273623e-17 0.98078528 +vn 9.8017140e-2 -2.6270713e-18 0.99518473 +vn 1.1358774e-15 -2.7653382e-19 1.00000000 +vn -9.8017140e-2 2.4888044e-18 0.99518473 +vn -0.19509032 4.4245411e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 0.0000000e+0 0.19509032 +vn -0.99518473 -1.4461895e-34 9.8017140e-2 +vn -1.00000000 0.0000000e+0 5.6967550e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 0.0000000e+0 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 4.4245411e-18 -0.98078528 +vn -9.8017140e-2 2.6270713e-18 -0.99518473 +vn 0.0000000e+0 2.7653382e-19 -1.00000000 +vn 9.8017140e-2 -2.4888044e-18 -0.99518473 +vn 0.19509032 -4.4245411e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 0.0000000e+0 -0.19509032 +vn 0.99518473 -7.0792658e-17 -9.8017140e-2 +vn 1.00000000 -3.7022450e-32 -1.3894524e-17 +vn 0.99518473 3.8565052e-34 9.8017140e-2 +vn 0.98078528 -3.4088600e-19 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 0.0000000e+0 0.95694034 +vn 0.19509032 -6.6368117e-18 0.98078528 +vn 9.8017140e-2 -2.7653382e-19 0.99518473 +vn 5.7141231e-16 -1.3826691e-19 1.00000000 +vn -9.8017140e-2 2.7653382e-19 0.99518473 +vn -0.19509032 2.2122706e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 -3.4088600e-19 0.19509032 +vn -0.99518473 -2.8923789e-34 9.8017140e-2 +vn -1.00000000 7.7612168e-33 5.6446505e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 3.4088600e-19 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 2.2122706e-18 -0.98078528 +vn -9.8017140e-2 2.7653382e-19 -0.99518473 +vn 0.0000000e+0 1.3826691e-19 -1.00000000 +vn 9.8017140e-2 -2.7653382e-19 -0.99518473 +vn 0.19509032 -2.2122706e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 3.4088600e-19 -0.19509032 +vn 0.99518473 -4.2421557e-33 -9.8017140e-2 +g cylinder1_geom/beam/beam +usemtl geom/beam/beam +s 1 +f 1/34/1 65/33/65 64/35/64 +f 2/32/2 65/33/65 1/34/1 +f 2/32/2 67/29/67 66/31/66 +f 3/30/3 67/29/67 2/32/2 +f 4/28/4 67/29/67 3/30/3 +f 4/28/4 69/25/69 68/27/68 +f 5/26/5 69/25/69 4/28/4 +f 6/24/6 69/25/69 5/26/5 +f 6/24/6 71/21/71 70/23/70 +f 7/22/7 71/21/71 6/24/6 +f 8/20/8 71/21/71 7/22/7 +f 8/20/8 73/17/73 72/19/72 +f 9/18/9 73/17/73 8/20/8 +f 10/15/10 73/17/73 9/18/9 +f 10/15/10 75/13/75 74/16/74 +f 11/14/11 75/13/75 10/15/10 +f 12/11/12 75/13/75 11/14/11 +f 12/11/12 77/9/77 76/12/76 +f 13/10/13 77/9/77 12/11/12 +f 14/7/14 77/9/77 13/10/13 +f 14/7/14 79/5/79 78/8/78 +f 15/6/15 79/5/79 14/7/14 +f 16/3/16 79/5/79 15/6/15 +f 16/3/16 81/1/81 80/4/80 +f 17/2/17 81/1/81 16/3/16 +f 18/127/18 81/129/81 17/130/17 +f 18/127/18 83/125/83 82/128/82 +f 19/126/19 83/125/83 18/127/18 +f 20/123/20 83/125/83 19/126/19 +f 20/123/20 85/121/85 84/124/84 +f 21/122/21 85/121/85 20/123/20 +f 22/119/22 85/121/85 21/122/21 +f 22/119/22 87/117/87 86/120/86 +f 23/118/23 87/117/87 22/119/22 +f 24/115/24 87/117/87 23/118/23 +f 24/115/24 89/113/89 88/116/88 +f 25/114/25 89/113/89 24/115/24 +f 26/111/26 89/113/89 25/114/25 +f 26/111/26 91/109/91 90/112/90 +f 27/110/27 91/109/91 26/111/26 +f 28/107/28 91/109/91 27/110/27 +f 28/107/28 93/105/93 92/108/92 +f 29/106/29 93/105/93 28/107/28 +f 30/103/30 93/105/93 29/106/29 +f 30/103/30 95/101/95 94/104/94 +f 31/102/31 95/101/95 30/103/30 +f 32/99/32 95/101/95 31/102/31 +f 32/99/32 97/97/97 96/100/96 +f 33/98/33 97/97/97 32/99/32 +f 34/95/34 97/97/97 33/98/33 +f 34/95/34 99/93/99 98/96/98 +f 35/94/35 99/93/99 34/95/34 +f 36/91/36 99/93/99 35/94/35 +f 36/91/36 101/89/101 100/92/100 +f 37/90/37 101/89/101 36/91/36 +f 38/87/38 101/89/101 37/90/37 +f 38/87/38 103/85/103 102/88/102 +f 39/86/39 103/85/103 38/87/38 +f 40/84/40 103/85/103 39/86/39 +f 40/84/40 105/82/105 104/83/104 +f 41/81/41 105/82/105 40/84/40 +f 42/80/42 105/82/105 41/81/41 +f 42/80/42 107/77/107 106/79/106 +f 43/78/43 107/77/107 42/80/42 +f 44/76/44 107/77/107 43/78/43 +f 44/76/44 109/73/109 108/75/108 +f 45/74/45 109/73/109 44/76/44 +f 46/72/46 109/73/109 45/74/45 +f 46/72/46 111/69/111 110/71/110 +f 47/70/47 111/69/111 46/72/46 +f 48/68/48 111/69/111 47/70/47 +f 48/68/48 113/65/113 112/67/112 +f 49/66/49 113/65/113 48/68/48 +f 50/63/50 113/65/113 49/66/49 +f 50/63/50 115/61/115 114/64/114 +f 51/62/51 115/61/115 50/63/50 +f 52/59/52 115/61/115 51/62/51 +f 52/59/52 117/57/117 116/60/116 +f 53/58/53 117/57/117 52/59/52 +f 54/55/54 117/57/117 53/58/53 +f 54/55/54 119/53/119 118/56/118 +f 55/54/55 119/53/119 54/55/54 +f 56/52/56 119/53/119 55/54/55 +f 56/52/56 121/49/121 120/51/120 +f 57/50/57 121/49/121 56/52/56 +f 58/48/58 121/49/121 57/50/57 +f 58/48/58 123/45/123 122/47/122 +f 59/46/59 123/45/123 58/48/58 +f 60/43/60 123/45/123 59/46/59 +f 60/43/60 125/41/125 124/44/124 +f 61/42/61 125/41/125 60/43/60 +f 62/40/62 125/41/125 61/42/61 +f 62/40/62 127/37/127 126/39/126 +f 63/38/63 127/37/127 62/40/62 +f 64/35/64 65/33/65 128/36/128 +f 64/35/64 127/37/127 63/38/63 +f 66/31/66 65/33/65 2/32/2 +f 68/27/68 67/29/67 4/28/4 +f 70/23/70 69/25/69 6/24/6 +f 72/19/72 71/21/71 8/20/8 +f 74/16/74 73/17/73 10/15/10 +f 76/12/76 75/13/75 12/11/12 +f 78/8/78 77/9/77 14/7/14 +f 80/4/80 79/5/79 16/3/16 +f 82/128/82 81/129/81 18/127/18 +f 84/124/84 83/125/83 20/123/20 +f 86/120/86 85/121/85 22/119/22 +f 88/116/88 87/117/87 24/115/24 +f 90/112/90 89/113/89 26/111/26 +f 92/108/92 91/109/91 28/107/28 +f 94/104/94 93/105/93 30/103/30 +f 96/100/96 95/101/95 32/99/32 +f 98/96/98 97/97/97 34/95/34 +f 100/92/100 99/93/99 36/91/36 +f 102/88/102 101/89/101 38/87/38 +f 104/83/104 103/85/103 40/84/40 +f 106/79/106 105/82/105 42/80/42 +f 108/75/108 107/77/107 44/76/44 +f 110/71/110 109/73/109 46/72/46 +f 112/67/112 111/69/111 48/68/48 +f 114/64/114 113/65/113 50/63/50 +f 116/60/116 115/61/115 52/59/52 +f 118/56/118 117/57/117 54/55/54 +f 120/51/120 119/53/119 56/52/56 +f 122/47/122 121/49/121 58/48/58 +f 124/44/124 123/45/123 60/43/60 +f 126/39/126 125/41/125 62/40/62 +f 128/36/128 127/37/127 64/35/64 diff --git a/data/geom/beam/beam.png b/data/geom/beam/beam.png new file mode 100644 index 0000000..04bbb2b Binary files /dev/null and b/data/geom/beam/beam.png differ diff --git a/data/geom/beam/beam.wings b/data/geom/beam/beam.wings new file mode 100644 index 0000000..341b635 Binary files /dev/null and b/data/geom/beam/beam.wings differ diff --git a/data/geom/flag/flag.map b/data/geom/flag/flag.map new file mode 100644 index 0000000..74dc238 --- /dev/null +++ b/data/geom/flag/flag.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/flag/flag.obj" +} diff --git a/data/geom/flag/flag.mtl b/data/geom/flag/flag.mtl new file mode 100644 index 0000000..58b079a --- /dev/null +++ b/data/geom/flag/flag.mtl @@ -0,0 +1,19 @@ +# Exported from Wings 3D 1.4.1 +newmtl mtrl/red +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 0.0 0.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + +newmtl mtrl/white +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + diff --git a/data/geom/flag/flag.obj b/data/geom/flag/flag.obj new file mode 100644 index 0000000..f9e76bc --- /dev/null +++ b/data/geom/flag/flag.obj @@ -0,0 +1,476 @@ +# Exported from Wings 3D 1.4.1 +mtllib flag.mtl +o cylinder1 +#49 vertices, 94 faces +v 1.2500000e-2 3.00000000 4.7772658e-19 +v 1.1548494e-2 3.00000000 4.7835429e-3 +v 8.8388348e-3 3.00000000 8.8388348e-3 +v 4.7835429e-3 3.00000000 1.1548494e-2 +v 6.4627287e-21 3.00000000 1.2500000e-2 +v -4.7835429e-3 3.00000000 1.1548494e-2 +v -8.8388348e-3 3.00000000 8.8388348e-3 +v -1.1548494e-2 3.00000000 4.7835429e-3 +v -1.2500000e-2 3.00000000 2.0085351e-18 +v -1.1548494e-2 3.00000000 -4.7835429e-3 +v -8.8388348e-3 3.00000000 -8.8388348e-3 +v -4.7835429e-3 3.00000000 -1.1548494e-2 +v -3.0551543e-18 3.00000000 -1.2500000e-2 +v 4.7835429e-3 3.00000000 -1.1548494e-2 +v 8.8388348e-3 3.00000000 -8.8388348e-3 +v 1.1548494e-2 3.00000000 -4.7835429e-3 +v 1.2500000e-2 0.0000000e+0 4.7772658e-19 +v 1.1548494e-2 0.0000000e+0 4.7835429e-3 +v 8.8388348e-3 0.0000000e+0 8.8388348e-3 +v 4.7835429e-3 0.0000000e+0 1.1548494e-2 +v 6.4627287e-21 0.0000000e+0 1.2500000e-2 +v -4.7835429e-3 0.0000000e+0 1.1548494e-2 +v -8.8388348e-3 0.0000000e+0 8.8388348e-3 +v -1.1548494e-2 0.0000000e+0 4.7835429e-3 +v -1.2500000e-2 0.0000000e+0 2.0085351e-18 +v -1.1548494e-2 0.0000000e+0 -4.7835429e-3 +v -8.8388348e-3 0.0000000e+0 -8.8388348e-3 +v -4.7835429e-3 0.0000000e+0 -1.1548494e-2 +v -3.0551543e-18 0.0000000e+0 -1.2500000e-2 +v 4.7835429e-3 0.0000000e+0 -1.1548494e-2 +v 8.8388348e-3 0.0000000e+0 -8.8388348e-3 +v 1.1548494e-2 0.0000000e+0 -4.7835429e-3 +v 1.2500000e-2 2.50335000 4.7772658e-19 +v 1.1548494e-2 2.50335000 4.7835429e-3 +v 8.8388348e-3 2.50335000 8.8388348e-3 +v 4.7835429e-3 2.50335000 1.1548494e-2 +v 6.4627287e-21 2.50335000 1.2500000e-2 +v -4.7835429e-3 2.50335000 1.1548494e-2 +v -8.8388348e-3 2.50335000 8.8388348e-3 +v -1.1548494e-2 2.50335000 4.7835429e-3 +v -1.2500000e-2 2.50335000 2.0085351e-18 +v -1.1548494e-2 2.50335000 -4.7835429e-3 +v -8.8388348e-3 2.50335000 -8.8388348e-3 +v -4.7835429e-3 2.50335000 -1.1548494e-2 +v -3.0551543e-18 2.50335000 -1.2500000e-2 +v 4.7835429e-3 2.50335000 -1.1548494e-2 +v 8.8388348e-3 2.50335000 -8.8388348e-3 +v 1.1548494e-2 2.50335000 -4.7835429e-3 +v 0.81374768 2.75167500 -2.1684043e-19 +vt 0.0000000e+0 3.5125839e-5 +vt 2.9469936e-4 0.99993695 +vt 9.7432183e-4 2.8057961e-5 +vt 1.9486742e-3 2.3109579e-5 +vt 2.9229849e-3 1.8161670e-5 +vt 3.8971636e-3 0.0000000e+0 +vt 5.2035517e-3 1.00000000 +vt 6.7155612e-3 0.50006971 +vt 8.3413460e-3 0.50006923 +vt 9.9672776e-3 0.50005595 +vt 1.0113395e-2 0.99999645 +vt 1.1593168e-2 0.50004268 +vt 1.3219003e-2 0.50001661 +vt 1.5023197e-2 0.99999289 +vt 1.9933928e-2 1.00000000 +vt 1.9933928e-2 3.5125839e-5 +vt 2.0228628e-2 0.99993695 +vt 2.0908250e-2 2.8057961e-5 +vt 2.1882602e-2 2.3109579e-5 +vt 2.2856913e-2 1.8161670e-5 +vt 2.3831092e-2 0.0000000e+0 +vt 2.5137480e-2 1.00000000 +vt 2.6649490e-2 0.50006971 +vt 2.8275274e-2 0.50006923 +vt 2.9901206e-2 0.50005595 +vt 3.0047323e-2 0.99999645 +vt 3.1527096e-2 0.50004268 +vt 3.3152931e-2 0.50001661 +vt 3.4957125e-2 0.99999289 +vt 3.9867857e-2 3.5125839e-5 +vt 3.9867857e-2 1.00000000 +vt 4.0162556e-2 0.99993695 +vt 4.0842178e-2 2.8057961e-5 +vt 4.1816531e-2 2.3109579e-5 +vt 4.2790842e-2 1.8161670e-5 +vt 4.3765020e-2 0.0000000e+0 +vt 4.5071408e-2 1.00000000 +vt 4.6583418e-2 0.50006971 +vt 4.8209203e-2 0.50006923 +vt 4.9835134e-2 0.50005595 +vt 4.9981252e-2 0.99999645 +vt 5.1461024e-2 0.50004268 +vt 5.3086860e-2 0.50001661 +vt 5.4891053e-2 0.99999289 +vt 5.9801785e-2 0.49108183 +vt 5.9801785e-2 1.00000000 +vt 6.1104796e-2 3.0511289e-6 +vt 6.1597856e-2 0.98124397 +vt 6.2396127e-2 0.98124949 +vt 6.3016552e-2 2.1368669e-6 +vt 6.4307862e-2 0.98123786 +vt 6.4615121e-2 0.49110363 +vt 6.4619433e-2 0.49092702 +vt 6.4928317e-2 1.1898399e-6 +vt 6.6219572e-2 0.98122594 +vt 6.6840067e-2 0.0000000e+0 +vt 6.7017595e-2 0.98122168 +vt 6.8751758e-2 3.0511289e-6 +vt 6.9434428e-2 4.9461914e-3 +vt 6.9434428e-2 1.3678863e-2 +vt 6.9434428e-2 0.30800898 +vt 6.9434428e-2 0.49091130 +vt 6.9434428e-2 1.1785673e-2 +vt 6.9434428e-2 0.20989894 +vt 6.9810921e-2 6.8390404e-3 +vt 6.9810959e-2 3.0533500e-3 +vt 7.0883116e-2 8.4437276e-3 +vt 7.0883186e-2 1.4486844e-3 +vt 7.2487782e-2 9.5159538e-3 +vt 7.2487874e-2 3.7649046e-4 +vt 7.4380624e-2 9.8924824e-3 +vt 7.4380724e-2 0.0000000e+0 +vt 7.6273473e-2 9.5159902e-3 +vt 7.6273565e-2 3.7653025e-4 +vt 7.7878160e-2 8.4437949e-3 +vt 7.7878231e-2 1.4487579e-3 +vt 7.8950387e-2 6.8391284e-3 +vt 7.8950425e-2 3.0534460e-3 +vt 7.9309924e-2 4.9462908e-3 +vt 0.38637873 0.40611903 +vt 0.38637873 1.8617454e-2 +vt 0.38637873 0.11178890 +vt 0.38637873 0.20989894 +vt 0.38675466 1.6727537e-2 +vt 0.38675466 2.0507371e-2 +vt 0.38782521 1.5125343e-2 +vt 0.38782521 2.2109565e-2 +vt 0.38942741 1.4054791e-2 +vt 0.38942741 2.3180117e-2 +vt 0.39131732 1.3678863e-2 +vt 0.39131732 2.3556044e-2 +vt 0.39320724 1.4054791e-2 +vt 0.39320724 2.3180117e-2 +vt 0.39480943 1.5125343e-2 +vt 0.39480943 2.2109565e-2 +vt 0.39587999 1.6727537e-2 +vt 0.39587999 2.0507371e-2 +vt 0.39625591 1.8617454e-2 +vt 0.40085191 1.1785673e-2 +vt 0.40121099 9.8924824e-3 +vt 0.40121099 1.3678863e-2 +vt 0.41068323 4.9496270e-3 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 9.1972853e-17 0.0000000e+0 1.00000000 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -1.00000000 0.0000000e+0 1.4149670e-17 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn 7.0748349e-18 0.0000000e+0 -1.00000000 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.29603158 0.95517815 -2.5370834e-15 +vn 0.29603158 0.95517815 -2.5370834e-15 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 5.9629303e-3 0.0000000e+0 0.99998222 +vn 0.29551968 0.95352647 5.8782520e-2 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 7.7823184e-17 0.0000000e+0 1.00000000 +vn 7.7823184e-17 0.0000000e+0 1.00000000 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn 8.4898018e-17 0.0000000e+0 1.00000000 +vn 7.7823184e-17 0.0000000e+0 1.00000000 +vn 0.0000000e+0 1.00000000 2.6764936e-15 +vn 0.0000000e+0 1.00000000 2.6764936e-15 +vn 0.0000000e+0 1.00000000 2.6764936e-15 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -1.00000000 0.0000000e+0 -7.0748349e-18 +vn -1.00000000 0.0000000e+0 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn -1.00000000 0.0000000e+0 7.0748349e-18 +vn -1.00000000 0.0000000e+0 -7.0748349e-18 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 1.00000000 -1.6132136e-14 +vn 0.0000000e+0 1.00000000 -1.6132136e-14 +vn 0.0000000e+0 1.00000000 -1.6132136e-14 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn 0.0000000e+0 1.00000000 -3.7851336e-15 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -9.9047688e-17 0.0000000e+0 -1.00000000 +vn -9.9047688e-17 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn 0.0000000e+0 1.00000000 -6.3108872e-30 +vn -9.9047688e-17 0.0000000e+0 -1.00000000 +vn -9.9047688e-17 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 1.00000000 9.6705086e-15 +vn 0.0000000e+0 1.00000000 9.6705086e-15 +vn 0.0000000e+0 1.00000000 9.6705086e-15 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.29551968 0.95352647 -5.8782520e-2 +vn 5.9629303e-3 0.0000000e+0 -0.99998222 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 1.00000000 0.0000000e+0 -2.0517021e-16 +vn 1.00000000 0.0000000e+0 -2.0517021e-16 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 1.00000000 0.0000000e+0 -2.0517021e-16 +vn 1.00000000 0.0000000e+0 -2.0517021e-16 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 2.1224505e-17 0.0000000e+0 1.00000000 +vn 2.8299339e-17 0.0000000e+0 1.00000000 +vn 2.1224505e-17 0.0000000e+0 1.00000000 +vn 3.5374174e-17 0.0000000e+0 1.00000000 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.70710678 0.0000000e+0 0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -1.00000000 0.0000000e+0 0.0000000e+0 +vn -1.00000000 0.0000000e+0 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -1.00000000 0.0000000e+0 0.0000000e+0 +vn -1.00000000 0.0000000e+0 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -1.1319736e-16 0.0000000e+0 -1.00000000 +vn -1.2027219e-16 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn -1.1319736e-16 0.0000000e+0 -1.00000000 +vn -1.2027219e-16 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.0000000e+0 -1.00000000 0.0000000e+0 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.29603158 -0.95517815 2.2069150e-15 +vn 1.00000000 0.0000000e+0 -2.2639472e-16 +vn 1.00000000 0.0000000e+0 -2.2639472e-16 +vn 0.29603158 -0.95517815 2.2069150e-15 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 5.9629303e-3 0.0000000e+0 0.99998222 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 0.29551968 -0.95352647 5.8782520e-2 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 0.89653751 0.0000000e+0 0.44296783 +vn 0.29551968 -0.95352647 -5.8782520e-2 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 5.9629303e-3 0.0000000e+0 -0.99998222 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 0.89653751 0.0000000e+0 -0.44296783 +vn 0.29603158 -0.95517815 2.2069150e-15 +vn 5.9629303e-3 0.0000000e+0 0.99998222 +vn 0.29603158 0.95517815 -2.5370834e-15 +vn 0.29603158 0.95517815 -2.5370834e-15 +vn 5.9629303e-3 0.0000000e+0 -0.99998222 +vn 0.29603158 -0.95517815 2.2069150e-15 +g cylinder1_mtrl/red +usemtl mtrl/red +s 1 +f 16/80/100 49/61/218 48/83/210 +f 34/60/199 49/82/215 2/64/18 +s 2 +f 1/79/16 49/102/217 16/77/99 +f 2/78/19 49/102/216 1/79/15 +f 33/99/197 49/63/219 34/100/202 +f 48/101/206 49/63/214 33/99/194 +g cylinder1_mtrl/white +usemtl mtrl/white +s 1 +f 1/79/14 16/77/98 2/78/17 +f 2/78/20 16/77/102 3/76/25 +f 3/76/26 15/75/95 4/74/30 +f 4/74/31 14/73/88 5/72/37 +f 5/72/38 13/71/83 6/70/42 +f 6/70/43 12/69/76 7/68/49 +f 7/68/50 11/67/71 8/66/54 +f 8/66/55 10/65/64 9/59/60 +f 10/65/63 8/66/53 11/67/70 +f 11/67/69 7/68/48 12/69/75 +f 12/69/74 6/70/41 13/71/82 +f 13/71/81 5/72/36 14/73/87 +f 14/73/86 4/74/29 15/75/94 +f 15/75/93 3/76/24 16/77/101 +f 17/81/108 25/98/153 32/85/190 +f 18/84/113 24/96/145 17/81/106 +f 19/86/120 23/94/140 18/84/111 +f 20/88/124 22/92/133 19/86/118 +f 21/90/127 22/92/132 20/88/123 +f 23/94/139 19/86/119 22/92/134 +f 24/96/144 18/84/112 23/94/141 +f 25/98/152 17/81/107 24/96/146 +f 26/97/156 32/85/189 25/98/151 +f 27/95/163 31/87/184 26/97/157 +f 28/93/169 30/89/178 27/95/164 +f 29/91/174 30/89/177 28/93/168 +f 31/87/186 27/95/165 30/89/179 +f 32/85/191 26/97/158 31/87/185 +s 3 +f 3/52/27 34/49/205 2/45/21 +f 3/15/22 36/12/2 35/13/1 +f 4/14/33 36/12/2 3/15/28 +f 5/11/39 36/12/2 4/14/32 +f 5/11/34 38/9/4 37/10/3 +f 6/7/45 38/9/4 5/11/40 +f 7/2/51 38/9/4 6/7/44 +f 7/31/46 40/27/6 39/28/5 +f 8/29/57 40/27/6 7/31/52 +f 9/26/61 40/27/6 8/29/56 +f 9/26/58 42/24/8 41/25/7 +f 10/22/66 42/24/8 9/26/62 +f 11/17/72 42/24/8 10/22/65 +f 11/46/67 44/42/10 43/43/9 +f 12/44/78 44/42/10 11/46/73 +f 13/41/84 44/42/10 12/44/77 +f 13/41/79 46/39/12 45/40/11 +f 14/37/89 46/39/12 13/41/85 +f 15/32/97 46/39/12 14/37/90 +f 15/53/91 48/55/207 47/57/13 +f 16/62/103 48/55/211 15/53/96 +f 17/54/109 34/49/204 18/50/115 +f 17/54/104 48/55/208 33/51/195 +f 18/50/114 34/49/203 19/47/122 +f 19/47/117 34/49/200 35/48/1 +f 19/6/121 36/12/2 20/5/126 +f 20/5/125 36/12/2 21/4/131 +f 21/4/129 36/12/2 37/10/3 +f 21/4/130 38/9/4 22/3/136 +f 22/3/135 38/9/4 23/1/143 +f 23/1/138 38/9/4 39/8/5 +f 23/21/142 40/27/6 24/20/148 +f 24/20/147 40/27/6 25/19/155 +f 25/19/150 40/27/6 41/25/7 +f 25/19/154 42/24/8 26/18/160 +f 26/18/159 42/24/8 27/16/167 +f 27/16/162 42/24/8 43/23/9 +f 27/36/166 44/42/10 28/35/171 +f 28/35/170 44/42/10 29/34/176 +f 29/34/173 44/42/10 45/40/11 +f 29/34/175 46/39/12 30/33/181 +f 30/33/180 46/39/12 31/30/188 +f 31/30/183 46/39/12 47/38/13 +f 31/58/187 48/55/212 32/56/192 +f 32/56/193 48/55/213 17/54/110 +f 33/51/196 34/49/201 17/54/105 +f 35/48/1 34/49/198 3/52/23 +f 35/13/1 36/12/2 19/6/116 +f 37/10/3 36/12/2 5/11/35 +f 37/10/3 38/9/4 21/4/128 +f 39/8/5 38/9/4 7/2/47 +f 39/28/5 40/27/6 23/21/137 +f 41/25/7 40/27/6 9/26/59 +f 41/25/7 42/24/8 25/19/149 +f 43/23/9 42/24/8 11/17/68 +f 43/43/9 44/42/10 27/36/161 +f 45/40/11 44/42/10 13/41/80 +f 45/40/11 46/39/12 29/34/172 +f 47/38/13 46/39/12 15/32/92 +f 47/57/13 48/55/209 31/58/182 diff --git a/data/geom/flag/flag.wings b/data/geom/flag/flag.wings new file mode 100644 index 0000000..1c4ee23 Binary files /dev/null and b/data/geom/flag/flag.wings differ diff --git a/data/geom/goal/goal b/data/geom/goal/goal new file mode 100644 index 0000000..0379dd6 --- /dev/null +++ b/data/geom/goal/goal @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive transparent two-sided +45.0 diff --git a/data/geom/goal/goal.map b/data/geom/goal/goal.map new file mode 100644 index 0000000..c94e8a2 --- /dev/null +++ b/data/geom/goal/goal.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/goal/goal.obj" +} diff --git a/data/geom/goal/goal.mtl b/data/geom/goal/goal.mtl new file mode 100644 index 0000000..052b0b3 --- /dev/null +++ b/data/geom/goal/goal.mtl @@ -0,0 +1,20 @@ +# Exported from Wings 3D 1.4.1 +newmtl default +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + +newmtl geom/goal/goal +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 +map_Kd goal.png + diff --git a/data/geom/goal/goal.obj b/data/geom/goal/goal.obj new file mode 100644 index 0000000..4312787 --- /dev/null +++ b/data/geom/goal/goal.obj @@ -0,0 +1,521 @@ +# Exported from Wings 3D 1.4.1 +mtllib goal.mtl +o cylinder1 +#128 vertices, 128 faces +v 1.00000000 1.00000000 3.6768006e-17 +v 0.99518473 1.00000000 9.8017140e-2 +v 0.98078528 1.00000000 0.19509032 +v 0.95694034 1.00000000 0.29028468 +v 0.92387953 1.00000000 0.38268343 +v 0.88192126 1.00000000 0.47139674 +v 0.83146961 1.00000000 0.55557023 +v 0.77301045 1.00000000 0.63439328 +v 0.70710678 1.00000000 0.70710678 +v 0.63439328 1.00000000 0.77301045 +v 0.55557023 1.00000000 0.83146961 +v 0.47139674 1.00000000 0.88192126 +v 0.38268343 1.00000000 0.92387953 +v 0.29028468 1.00000000 0.95694034 +v 0.19509032 1.00000000 0.98078528 +v 9.8017140e-2 1.00000000 0.99518473 +v 9.5926809e-17 1.00000000 1.00000000 +v -9.8017140e-2 1.00000000 0.99518473 +v -0.19509032 1.00000000 0.98078528 +v -0.29028468 1.00000000 0.95694034 +v -0.38268343 1.00000000 0.92387953 +v -0.47139674 1.00000000 0.88192126 +v -0.55557023 1.00000000 0.83146961 +v -0.63439328 1.00000000 0.77301045 +v -0.70710678 1.00000000 0.70710678 +v -0.77301045 1.00000000 0.63439328 +v -0.83146961 1.00000000 0.55557023 +v -0.88192126 1.00000000 0.47139674 +v -0.92387953 1.00000000 0.38268343 +v -0.95694034 1.00000000 0.29028468 +v -0.98078528 1.00000000 0.19509032 +v -0.99518473 1.00000000 9.8017140e-2 +v -1.00000000 1.00000000 1.5923269e-16 +v -0.99518473 1.00000000 -9.8017140e-2 +v -0.98078528 1.00000000 -0.19509032 +v -0.95694034 1.00000000 -0.29028468 +v -0.92387953 1.00000000 -0.38268343 +v -0.88192126 1.00000000 -0.47139674 +v -0.83146961 1.00000000 -0.55557023 +v -0.77301045 1.00000000 -0.63439328 +v -0.70710678 1.00000000 -0.70710678 +v -0.63439328 1.00000000 -0.77301045 +v -0.55557023 1.00000000 -0.83146961 +v -0.47139674 1.00000000 -0.88192126 +v -0.38268343 1.00000000 -0.92387953 +v -0.29028468 1.00000000 -0.95694034 +v -0.19509032 1.00000000 -0.98078528 +v -9.8017140e-2 1.00000000 -0.99518473 +v -1.4900255e-16 1.00000000 -1.00000000 +v 9.8017140e-2 1.00000000 -0.99518473 +v 0.19509032 1.00000000 -0.98078528 +v 0.29028468 1.00000000 -0.95694034 +v 0.38268343 1.00000000 -0.92387953 +v 0.47139674 1.00000000 -0.88192126 +v 0.55557023 1.00000000 -0.83146961 +v 0.63439328 1.00000000 -0.77301045 +v 0.70710678 1.00000000 -0.70710678 +v 0.77301045 1.00000000 -0.63439328 +v 0.83146961 1.00000000 -0.55557023 +v 0.88192126 1.00000000 -0.47139674 +v 0.92387953 1.00000000 -0.38268343 +v 0.95694034 1.00000000 -0.29028468 +v 0.98078528 1.00000000 -0.19509032 +v 0.99518473 1.00000000 -9.8017140e-2 +v 1.00000000 0.0000000e+0 4.7704896e-17 +v 0.99518473 0.0000000e+0 9.8017140e-2 +v 0.98078528 0.0000000e+0 0.19509032 +v 0.95694034 0.0000000e+0 0.29028468 +v 0.92387953 0.0000000e+0 0.38268343 +v 0.88192126 0.0000000e+0 0.47139674 +v 0.83146961 0.0000000e+0 0.55557023 +v 0.77301045 0.0000000e+0 0.63439328 +v 0.70710678 0.0000000e+0 0.70710678 +v 0.63439328 0.0000000e+0 0.77301045 +v 0.55557023 0.0000000e+0 0.83146961 +v 0.47139674 0.0000000e+0 0.88192126 +v 0.38268343 0.0000000e+0 0.92387953 +v 0.29028468 0.0000000e+0 0.95694034 +v 0.19509032 0.0000000e+0 0.98078528 +v 9.8017140e-2 0.0000000e+0 0.99518473 +v 7.8579575e-17 0.0000000e+0 1.00000000 +v -9.8017140e-2 0.0000000e+0 0.99518473 +v -0.19509032 0.0000000e+0 0.98078528 +v -0.29028468 0.0000000e+0 0.95694034 +v -0.38268343 0.0000000e+0 0.92387953 +v -0.47139674 0.0000000e+0 0.88192126 +v -0.55557023 0.0000000e+0 0.83146961 +v -0.63439328 0.0000000e+0 0.77301045 +v -0.70710678 0.0000000e+0 0.70710678 +v -0.77301045 0.0000000e+0 0.63439328 +v -0.83146961 0.0000000e+0 0.55557023 +v -0.88192126 0.0000000e+0 0.47139674 +v -0.92387953 0.0000000e+0 0.38268343 +v -0.95694034 0.0000000e+0 0.29028468 +v -0.98078528 0.0000000e+0 0.19509032 +v -0.99518473 0.0000000e+0 9.8017140e-2 +v -1.00000000 0.0000000e+0 1.7016958e-16 +v -0.99518473 0.0000000e+0 -9.8017140e-2 +v -0.98078528 0.0000000e+0 -0.19509032 +v -0.95694034 0.0000000e+0 -0.29028468 +v -0.92387953 0.0000000e+0 -0.38268343 +v -0.88192126 0.0000000e+0 -0.47139674 +v -0.83146961 0.0000000e+0 -0.55557023 +v -0.77301045 0.0000000e+0 -0.63439328 +v -0.70710678 0.0000000e+0 -0.70710678 +v -0.63439328 0.0000000e+0 -0.77301045 +v -0.55557023 0.0000000e+0 -0.83146961 +v -0.47139674 0.0000000e+0 -0.88192126 +v -0.38268343 0.0000000e+0 -0.92387953 +v -0.29028468 0.0000000e+0 -0.95694034 +v -0.19509032 0.0000000e+0 -0.98078528 +v -9.8017140e-2 0.0000000e+0 -0.99518473 +v -1.6634979e-16 0.0000000e+0 -1.00000000 +v 9.8017140e-2 0.0000000e+0 -0.99518473 +v 0.19509032 0.0000000e+0 -0.98078528 +v 0.29028468 0.0000000e+0 -0.95694034 +v 0.38268343 0.0000000e+0 -0.92387953 +v 0.47139674 0.0000000e+0 -0.88192126 +v 0.55557023 0.0000000e+0 -0.83146961 +v 0.63439328 0.0000000e+0 -0.77301045 +v 0.70710678 0.0000000e+0 -0.70710678 +v 0.77301045 0.0000000e+0 -0.63439328 +v 0.83146961 0.0000000e+0 -0.55557023 +v 0.88192126 0.0000000e+0 -0.47139674 +v 0.92387953 0.0000000e+0 -0.38268343 +v 0.95694034 0.0000000e+0 -0.29028468 +v 0.98078528 0.0000000e+0 -0.19509032 +v 0.99518473 0.0000000e+0 -9.8017140e-2 +vt -1.1045018e-15 0.42500000 +vt 2.4482118e-15 0.57500000 +vt 1.5625000e-2 0.57500000 +vt 1.5625000e-2 0.42500000 +vt 3.1250000e-2 0.42500000 +vt 3.1250000e-2 0.57500000 +vt 4.6875000e-2 0.57500000 +vt 4.6875000e-2 0.42500000 +vt 6.2500000e-2 0.42500000 +vt 6.2500000e-2 0.57500000 +vt 7.8125000e-2 0.57500000 +vt 7.8125000e-2 0.42500000 +vt 9.3750000e-2 0.42500000 +vt 9.3750000e-2 0.57500000 +vt 0.10937500 0.57500000 +vt 0.10937500 0.42500000 +vt 0.12500000 0.42500000 +vt 0.12500000 0.57500000 +vt 0.14062500 0.42500000 +vt 0.14062500 0.57500000 +vt 0.15625000 0.42500000 +vt 0.15625000 0.57500000 +vt 0.17187500 0.42500000 +vt 0.17187500 0.57500000 +vt 0.18750000 0.42500000 +vt 0.18750000 0.57500000 +vt 0.20312500 0.42500000 +vt 0.20312500 0.57500000 +vt 0.21875000 0.42500000 +vt 0.21875000 0.57500000 +vt 0.23437500 0.42500000 +vt 0.23437500 0.57500000 +vt 0.25000000 0.42500000 +vt 0.25000000 0.57500000 +vt 0.26562500 0.57500000 +vt 0.26562500 0.42500000 +vt 0.28125000 0.42500000 +vt 0.28125000 0.57500000 +vt 0.29687500 0.42500000 +vt 0.29687500 0.57500000 +vt 0.31250000 0.42500000 +vt 0.31250000 0.57500000 +vt 0.32812500 0.57500000 +vt 0.32812500 0.42500000 +vt 0.34375000 0.42500000 +vt 0.34375000 0.57500000 +vt 0.35937500 0.42500000 +vt 0.35937500 0.57500000 +vt 0.37500000 0.42500000 +vt 0.37500000 0.57500000 +vt 0.39062500 0.42500000 +vt 0.39062500 0.57500000 +vt 0.40625000 0.42500000 +vt 0.40625000 0.57500000 +vt 0.42187500 0.42500000 +vt 0.42187500 0.57500000 +vt 0.43750000 0.42500000 +vt 0.43750000 0.57500000 +vt 0.45312500 0.57500000 +vt 0.45312500 0.42500000 +vt 0.46875000 0.42500000 +vt 0.46875000 0.57500000 +vt 0.48437500 0.57500000 +vt 0.48437500 0.42500000 +vt 0.50000000 0.42500000 +vt 0.50000000 0.57500000 +vt 0.51562500 0.42500000 +vt 0.51562500 0.57500000 +vt 0.53125000 0.42500000 +vt 0.53125000 0.57500000 +vt 0.54687500 0.42500000 +vt 0.54687500 0.57500000 +vt 0.56250000 0.42500000 +vt 0.56250000 0.57500000 +vt 0.57812500 0.42500000 +vt 0.57812500 0.57500000 +vt 0.59375000 0.42500000 +vt 0.59375000 0.57500000 +vt 0.60937500 0.42500000 +vt 0.60937500 0.57500000 +vt 0.62500000 0.42500000 +vt 0.62500000 0.57500000 +vt 0.64062500 0.42500000 +vt 0.64062500 0.57500000 +vt 0.65625000 0.42500000 +vt 0.65625000 0.57500000 +vt 0.67187500 0.57500000 +vt 0.67187500 0.42500000 +vt 0.68750000 0.42500000 +vt 0.68750000 0.57500000 +vt 0.70312500 0.57500000 +vt 0.70312500 0.42500000 +vt 0.71875000 0.42500000 +vt 0.71875000 0.57500000 +vt 0.73437500 0.57500000 +vt 0.73437500 0.42500000 +vt 0.75000000 0.42500000 +vt 0.75000000 0.57500000 +vt 0.76562500 0.57500000 +vt 0.76562500 0.42500000 +vt 0.78125000 0.42500000 +vt 0.78125000 0.57500000 +vt 0.79687500 0.57500000 +vt 0.79687500 0.42500000 +vt 0.81250000 0.42500000 +vt 0.81250000 0.57500000 +vt 0.82812500 0.57500000 +vt 0.82812500 0.42500000 +vt 0.84375000 0.42500000 +vt 0.84375000 0.57500000 +vt 0.85937500 0.57500000 +vt 0.85937500 0.42500000 +vt 0.87500000 0.42500000 +vt 0.87500000 0.57500000 +vt 0.89062500 0.57500000 +vt 0.89062500 0.42500000 +vt 0.90625000 0.42500000 +vt 0.90625000 0.57500000 +vt 0.92187500 0.57500000 +vt 0.92187500 0.42500000 +vt 0.93750000 0.42500000 +vt 0.93750000 0.57500000 +vt 0.95312500 0.57500000 +vt 0.95312500 0.42500000 +vt 0.96875000 0.42500000 +vt 0.96875000 0.57500000 +vt 0.98437500 0.57500000 +vt 0.98437500 0.42500000 +vt 1.00000000 0.42500000 +vt 1.00000000 0.57500000 +vn 1.00000000 -7.4044900e-32 -1.3894524e-17 +vn 0.99518473 7.0792658e-17 9.8017140e-2 +vn 0.98078528 0.0000000e+0 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 -4.4245411e-18 0.95694034 +vn 0.19509032 -1.3273623e-17 0.98078528 +vn 9.8017140e-2 -2.6270713e-18 0.99518473 +vn 1.1358774e-15 -2.7653382e-19 1.00000000 +vn -9.8017140e-2 2.4888044e-18 0.99518473 +vn -0.19509032 4.4245411e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 0.0000000e+0 0.19509032 +vn -0.99518473 -1.4461895e-34 9.8017140e-2 +vn -1.00000000 0.0000000e+0 5.6967550e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 0.0000000e+0 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 4.4245411e-18 -0.98078528 +vn -9.8017140e-2 2.6270713e-18 -0.99518473 +vn 0.0000000e+0 2.7653382e-19 -1.00000000 +vn 9.8017140e-2 -2.4888044e-18 -0.99518473 +vn 0.19509032 -4.4245411e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 0.0000000e+0 -0.19509032 +vn 0.99518473 -7.0792658e-17 -9.8017140e-2 +vn 1.00000000 -3.7022450e-32 -1.3894524e-17 +vn 0.99518473 3.8565052e-34 9.8017140e-2 +vn 0.98078528 -3.4088600e-19 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 0.0000000e+0 0.95694034 +vn 0.19509032 -6.6368117e-18 0.98078528 +vn 9.8017140e-2 -2.7653382e-19 0.99518473 +vn 5.7141231e-16 -1.3826691e-19 1.00000000 +vn -9.8017140e-2 2.7653382e-19 0.99518473 +vn -0.19509032 2.2122706e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 -3.4088600e-19 0.19509032 +vn -0.99518473 -2.8923789e-34 9.8017140e-2 +vn -1.00000000 7.7612168e-33 5.6446505e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 3.4088600e-19 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 2.2122706e-18 -0.98078528 +vn -9.8017140e-2 2.7653382e-19 -0.99518473 +vn 0.0000000e+0 1.3826691e-19 -1.00000000 +vn 9.8017140e-2 -2.7653382e-19 -0.99518473 +vn 0.19509032 -2.2122706e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 3.4088600e-19 -0.19509032 +vn 0.99518473 -4.2421557e-33 -9.8017140e-2 +g cylinder1_geom/goal/goal +usemtl geom/goal/goal +s 1 +f 1/34/1 65/33/65 64/35/64 +f 2/32/2 65/33/65 1/34/1 +f 2/32/2 67/29/67 66/31/66 +f 3/30/3 67/29/67 2/32/2 +f 4/28/4 67/29/67 3/30/3 +f 4/28/4 69/25/69 68/27/68 +f 5/26/5 69/25/69 4/28/4 +f 6/24/6 69/25/69 5/26/5 +f 6/24/6 71/21/71 70/23/70 +f 7/22/7 71/21/71 6/24/6 +f 8/20/8 71/21/71 7/22/7 +f 8/20/8 73/17/73 72/19/72 +f 9/18/9 73/17/73 8/20/8 +f 10/15/10 73/17/73 9/18/9 +f 10/15/10 75/13/75 74/16/74 +f 11/14/11 75/13/75 10/15/10 +f 12/11/12 75/13/75 11/14/11 +f 12/11/12 77/9/77 76/12/76 +f 13/10/13 77/9/77 12/11/12 +f 14/7/14 77/9/77 13/10/13 +f 14/7/14 79/5/79 78/8/78 +f 15/6/15 79/5/79 14/7/14 +f 16/3/16 79/5/79 15/6/15 +f 16/3/16 81/1/81 80/4/80 +f 17/2/17 81/1/81 16/3/16 +f 18/127/18 81/129/81 17/130/17 +f 18/127/18 83/125/83 82/128/82 +f 19/126/19 83/125/83 18/127/18 +f 20/123/20 83/125/83 19/126/19 +f 20/123/20 85/121/85 84/124/84 +f 21/122/21 85/121/85 20/123/20 +f 22/119/22 85/121/85 21/122/21 +f 22/119/22 87/117/87 86/120/86 +f 23/118/23 87/117/87 22/119/22 +f 24/115/24 87/117/87 23/118/23 +f 24/115/24 89/113/89 88/116/88 +f 25/114/25 89/113/89 24/115/24 +f 26/111/26 89/113/89 25/114/25 +f 26/111/26 91/109/91 90/112/90 +f 27/110/27 91/109/91 26/111/26 +f 28/107/28 91/109/91 27/110/27 +f 28/107/28 93/105/93 92/108/92 +f 29/106/29 93/105/93 28/107/28 +f 30/103/30 93/105/93 29/106/29 +f 30/103/30 95/101/95 94/104/94 +f 31/102/31 95/101/95 30/103/30 +f 32/99/32 95/101/95 31/102/31 +f 32/99/32 97/97/97 96/100/96 +f 33/98/33 97/97/97 32/99/32 +f 34/95/34 97/97/97 33/98/33 +f 34/95/34 99/93/99 98/96/98 +f 35/94/35 99/93/99 34/95/34 +f 36/91/36 99/93/99 35/94/35 +f 36/91/36 101/89/101 100/92/100 +f 37/90/37 101/89/101 36/91/36 +f 38/87/38 101/89/101 37/90/37 +f 38/87/38 103/85/103 102/88/102 +f 39/86/39 103/85/103 38/87/38 +f 40/84/40 103/85/103 39/86/39 +f 40/84/40 105/81/105 104/83/104 +f 41/82/41 105/81/105 40/84/40 +f 42/80/42 105/81/105 41/82/41 +f 42/80/42 107/77/107 106/79/106 +f 43/78/43 107/77/107 42/80/42 +f 44/76/44 107/77/107 43/78/43 +f 44/76/44 109/73/109 108/75/108 +f 45/74/45 109/73/109 44/76/44 +f 46/72/46 109/73/109 45/74/45 +f 46/72/46 111/69/111 110/71/110 +f 47/70/47 111/69/111 46/72/46 +f 48/68/48 111/69/111 47/70/47 +f 48/68/48 113/65/113 112/67/112 +f 49/66/49 113/65/113 48/68/48 +f 50/63/50 113/65/113 49/66/49 +f 50/63/50 115/61/115 114/64/114 +f 51/62/51 115/61/115 50/63/50 +f 52/59/52 115/61/115 51/62/51 +f 52/59/52 117/57/117 116/60/116 +f 53/58/53 117/57/117 52/59/52 +f 54/56/54 117/57/117 53/58/53 +f 54/56/54 119/53/119 118/55/118 +f 55/54/55 119/53/119 54/56/54 +f 56/52/56 119/53/119 55/54/55 +f 56/52/56 121/49/121 120/51/120 +f 57/50/57 121/49/121 56/52/56 +f 58/48/58 121/49/121 57/50/57 +f 58/48/58 123/45/123 122/47/122 +f 59/46/59 123/45/123 58/48/58 +f 60/43/60 123/45/123 59/46/59 +f 60/43/60 125/41/125 124/44/124 +f 61/42/61 125/41/125 60/43/60 +f 62/40/62 125/41/125 61/42/61 +f 62/40/62 127/37/127 126/39/126 +f 63/38/63 127/37/127 62/40/62 +f 64/35/64 65/33/65 128/36/128 +f 64/35/64 127/37/127 63/38/63 +f 66/31/66 65/33/65 2/32/2 +f 68/27/68 67/29/67 4/28/4 +f 70/23/70 69/25/69 6/24/6 +f 72/19/72 71/21/71 8/20/8 +f 74/16/74 73/17/73 10/15/10 +f 76/12/76 75/13/75 12/11/12 +f 78/8/78 77/9/77 14/7/14 +f 80/4/80 79/5/79 16/3/16 +f 82/128/82 81/129/81 18/127/18 +f 84/124/84 83/125/83 20/123/20 +f 86/120/86 85/121/85 22/119/22 +f 88/116/88 87/117/87 24/115/24 +f 90/112/90 89/113/89 26/111/26 +f 92/108/92 91/109/91 28/107/28 +f 94/104/94 93/105/93 30/103/30 +f 96/100/96 95/101/95 32/99/32 +f 98/96/98 97/97/97 34/95/34 +f 100/92/100 99/93/99 36/91/36 +f 102/88/102 101/89/101 38/87/38 +f 104/83/104 103/85/103 40/84/40 +f 106/79/106 105/81/105 42/80/42 +f 108/75/108 107/77/107 44/76/44 +f 110/71/110 109/73/109 46/72/46 +f 112/67/112 111/69/111 48/68/48 +f 114/64/114 113/65/113 50/63/50 +f 116/60/116 115/61/115 52/59/52 +f 118/55/118 117/57/117 54/56/54 +f 120/51/120 119/53/119 56/52/56 +f 122/47/122 121/49/121 58/48/58 +f 124/44/124 123/45/123 60/43/60 +f 126/39/126 125/41/125 62/40/62 +f 128/36/128 127/37/127 64/35/64 diff --git a/data/geom/goal/goal.png b/data/geom/goal/goal.png new file mode 100644 index 0000000..d55a665 Binary files /dev/null and b/data/geom/goal/goal.png differ diff --git a/data/geom/goal/goal.wings b/data/geom/goal/goal.wings new file mode 100644 index 0000000..3d4135f Binary files /dev/null and b/data/geom/goal/goal.wings differ diff --git a/data/geom/jump/jump b/data/geom/jump/jump new file mode 100644 index 0000000..740fa37 --- /dev/null +++ b/data/geom/jump/jump @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive clamp-t transparent two-sided +45.0 diff --git a/data/geom/jump/jump.map b/data/geom/jump/jump.map new file mode 100644 index 0000000..b7d3c2e --- /dev/null +++ b/data/geom/jump/jump.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/jump/jump.obj" +} diff --git a/data/geom/jump/jump.mtl b/data/geom/jump/jump.mtl new file mode 100644 index 0000000..d4a84f5 --- /dev/null +++ b/data/geom/jump/jump.mtl @@ -0,0 +1,20 @@ +# Exported from Wings 3D 1.4.1 +newmtl default +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + +newmtl geom/jump/jump +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 +map_Kd jump.png + diff --git a/data/geom/jump/jump.obj b/data/geom/jump/jump.obj new file mode 100644 index 0000000..87ee0ed --- /dev/null +++ b/data/geom/jump/jump.obj @@ -0,0 +1,521 @@ +# Exported from Wings 3D 1.4.1 +mtllib jump.mtl +o cylinder1 +#128 vertices, 128 faces +v 1.00000000 1.00000000 3.6768006e-17 +v 0.99518473 1.00000000 9.8017140e-2 +v 0.98078528 1.00000000 0.19509032 +v 0.95694034 1.00000000 0.29028468 +v 0.92387953 1.00000000 0.38268343 +v 0.88192126 1.00000000 0.47139674 +v 0.83146961 1.00000000 0.55557023 +v 0.77301045 1.00000000 0.63439328 +v 0.70710678 1.00000000 0.70710678 +v 0.63439328 1.00000000 0.77301045 +v 0.55557023 1.00000000 0.83146961 +v 0.47139674 1.00000000 0.88192126 +v 0.38268343 1.00000000 0.92387953 +v 0.29028468 1.00000000 0.95694034 +v 0.19509032 1.00000000 0.98078528 +v 9.8017140e-2 1.00000000 0.99518473 +v 9.5926809e-17 1.00000000 1.00000000 +v -9.8017140e-2 1.00000000 0.99518473 +v -0.19509032 1.00000000 0.98078528 +v -0.29028468 1.00000000 0.95694034 +v -0.38268343 1.00000000 0.92387953 +v -0.47139674 1.00000000 0.88192126 +v -0.55557023 1.00000000 0.83146961 +v -0.63439328 1.00000000 0.77301045 +v -0.70710678 1.00000000 0.70710678 +v -0.77301045 1.00000000 0.63439328 +v -0.83146961 1.00000000 0.55557023 +v -0.88192126 1.00000000 0.47139674 +v -0.92387953 1.00000000 0.38268343 +v -0.95694034 1.00000000 0.29028468 +v -0.98078528 1.00000000 0.19509032 +v -0.99518473 1.00000000 9.8017140e-2 +v -1.00000000 1.00000000 1.5923269e-16 +v -0.99518473 1.00000000 -9.8017140e-2 +v -0.98078528 1.00000000 -0.19509032 +v -0.95694034 1.00000000 -0.29028468 +v -0.92387953 1.00000000 -0.38268343 +v -0.88192126 1.00000000 -0.47139674 +v -0.83146961 1.00000000 -0.55557023 +v -0.77301045 1.00000000 -0.63439328 +v -0.70710678 1.00000000 -0.70710678 +v -0.63439328 1.00000000 -0.77301045 +v -0.55557023 1.00000000 -0.83146961 +v -0.47139674 1.00000000 -0.88192126 +v -0.38268343 1.00000000 -0.92387953 +v -0.29028468 1.00000000 -0.95694034 +v -0.19509032 1.00000000 -0.98078528 +v -9.8017140e-2 1.00000000 -0.99518473 +v -1.4900255e-16 1.00000000 -1.00000000 +v 9.8017140e-2 1.00000000 -0.99518473 +v 0.19509032 1.00000000 -0.98078528 +v 0.29028468 1.00000000 -0.95694034 +v 0.38268343 1.00000000 -0.92387953 +v 0.47139674 1.00000000 -0.88192126 +v 0.55557023 1.00000000 -0.83146961 +v 0.63439328 1.00000000 -0.77301045 +v 0.70710678 1.00000000 -0.70710678 +v 0.77301045 1.00000000 -0.63439328 +v 0.83146961 1.00000000 -0.55557023 +v 0.88192126 1.00000000 -0.47139674 +v 0.92387953 1.00000000 -0.38268343 +v 0.95694034 1.00000000 -0.29028468 +v 0.98078528 1.00000000 -0.19509032 +v 0.99518473 1.00000000 -9.8017140e-2 +v 1.00000000 0.0000000e+0 4.7704896e-17 +v 0.99518473 0.0000000e+0 9.8017140e-2 +v 0.98078528 0.0000000e+0 0.19509032 +v 0.95694034 0.0000000e+0 0.29028468 +v 0.92387953 0.0000000e+0 0.38268343 +v 0.88192126 0.0000000e+0 0.47139674 +v 0.83146961 0.0000000e+0 0.55557023 +v 0.77301045 0.0000000e+0 0.63439328 +v 0.70710678 0.0000000e+0 0.70710678 +v 0.63439328 0.0000000e+0 0.77301045 +v 0.55557023 0.0000000e+0 0.83146961 +v 0.47139674 0.0000000e+0 0.88192126 +v 0.38268343 0.0000000e+0 0.92387953 +v 0.29028468 0.0000000e+0 0.95694034 +v 0.19509032 0.0000000e+0 0.98078528 +v 9.8017140e-2 0.0000000e+0 0.99518473 +v 7.8579575e-17 0.0000000e+0 1.00000000 +v -9.8017140e-2 0.0000000e+0 0.99518473 +v -0.19509032 0.0000000e+0 0.98078528 +v -0.29028468 0.0000000e+0 0.95694034 +v -0.38268343 0.0000000e+0 0.92387953 +v -0.47139674 0.0000000e+0 0.88192126 +v -0.55557023 0.0000000e+0 0.83146961 +v -0.63439328 0.0000000e+0 0.77301045 +v -0.70710678 0.0000000e+0 0.70710678 +v -0.77301045 0.0000000e+0 0.63439328 +v -0.83146961 0.0000000e+0 0.55557023 +v -0.88192126 0.0000000e+0 0.47139674 +v -0.92387953 0.0000000e+0 0.38268343 +v -0.95694034 0.0000000e+0 0.29028468 +v -0.98078528 0.0000000e+0 0.19509032 +v -0.99518473 0.0000000e+0 9.8017140e-2 +v -1.00000000 0.0000000e+0 1.7016958e-16 +v -0.99518473 0.0000000e+0 -9.8017140e-2 +v -0.98078528 0.0000000e+0 -0.19509032 +v -0.95694034 0.0000000e+0 -0.29028468 +v -0.92387953 0.0000000e+0 -0.38268343 +v -0.88192126 0.0000000e+0 -0.47139674 +v -0.83146961 0.0000000e+0 -0.55557023 +v -0.77301045 0.0000000e+0 -0.63439328 +v -0.70710678 0.0000000e+0 -0.70710678 +v -0.63439328 0.0000000e+0 -0.77301045 +v -0.55557023 0.0000000e+0 -0.83146961 +v -0.47139674 0.0000000e+0 -0.88192126 +v -0.38268343 0.0000000e+0 -0.92387953 +v -0.29028468 0.0000000e+0 -0.95694034 +v -0.19509032 0.0000000e+0 -0.98078528 +v -9.8017140e-2 0.0000000e+0 -0.99518473 +v -1.6634979e-16 0.0000000e+0 -1.00000000 +v 9.8017140e-2 0.0000000e+0 -0.99518473 +v 0.19509032 0.0000000e+0 -0.98078528 +v 0.29028468 0.0000000e+0 -0.95694034 +v 0.38268343 0.0000000e+0 -0.92387953 +v 0.47139674 0.0000000e+0 -0.88192126 +v 0.55557023 0.0000000e+0 -0.83146961 +v 0.63439328 0.0000000e+0 -0.77301045 +v 0.70710678 0.0000000e+0 -0.70710678 +v 0.77301045 0.0000000e+0 -0.63439328 +v 0.83146961 0.0000000e+0 -0.55557023 +v 0.88192126 0.0000000e+0 -0.47139674 +v 0.92387953 0.0000000e+0 -0.38268343 +v 0.95694034 0.0000000e+0 -0.29028468 +v 0.98078528 0.0000000e+0 -0.19509032 +v 0.99518473 0.0000000e+0 -9.8017140e-2 +vt 0.45000000 1.1268764e-14 +vt 0.45000000 1.00000000 +vt 0.45156250 1.00000000 +vt 0.45156250 2.1593838e-14 +vt 0.45312500 6.1062266e-15 +vt 0.45312500 1.00000000 +vt 0.45468750 1.00000000 +vt 0.45468750 2.3536728e-14 +vt 0.45625000 9.0483177e-15 +vt 0.45625000 1.00000000 +vt 0.45781250 1.00000000 +vt 0.45781250 1.9872992e-14 +vt 0.45937500 9.0483177e-15 +vt 0.45937500 1.00000000 +vt 0.46093750 1.00000000 +vt 0.46093750 2.1482816e-14 +vt 0.46250000 5.3290705e-15 +vt 0.46250000 1.00000000 +vt 0.46406250 2.1205260e-14 +vt 0.46406250 1.00000000 +vt 0.46562500 7.4384943e-15 +vt 0.46562500 1.00000000 +vt 0.46718750 2.0428104e-14 +vt 0.46718750 1.00000000 +vt 0.46875000 9.1593400e-15 +vt 0.46875000 1.00000000 +vt 0.47031250 1.6597834e-14 +vt 0.47031250 1.00000000 +vt 0.47187500 8.3266727e-15 +vt 0.47187500 1.00000000 +vt 0.47343750 1.5376589e-14 +vt 0.47343750 1.00000000 +vt 0.47500000 1.2156942e-14 +vt 0.47500000 1.00000000 +vt 0.47656250 1.00000000 +vt 0.47656250 1.2601031e-14 +vt 0.47812500 9.6589403e-15 +vt 0.47812500 1.00000000 +vt 0.47968750 1.5987212e-14 +vt 0.47968750 1.00000000 +vt 0.48125000 7.9936058e-15 +vt 0.48125000 1.00000000 +vt 0.48281250 1.00000000 +vt 0.48281250 1.4821477e-14 +vt 0.48437500 1.1268764e-14 +vt 0.48437500 1.00000000 +vt 0.48593750 1.2712054e-14 +vt 0.48593750 1.00000000 +vt 0.48750000 7.8270723e-15 +vt 0.48750000 1.00000000 +vt 0.48906250 1.3489210e-14 +vt 0.48906250 1.00000000 +vt 0.49062500 7.5495166e-15 +vt 0.49062500 1.00000000 +vt 0.49218750 1.00000000 +vt 0.49218750 1.1546319e-14 +vt 0.49375000 1.1879386e-14 +vt 0.49375000 1.00000000 +vt 0.49531250 1.00000000 +vt 0.49531250 7.8270723e-15 +vt 0.49687500 9.9364961e-15 +vt 0.49687500 1.00000000 +vt 0.49843750 1.00000000 +vt 0.49843750 1.0380585e-14 +vt 0.50000000 8.6042284e-15 +vt 0.50000000 1.00000000 +vt 0.50156250 6.7723605e-15 +vt 0.50156250 1.00000000 +vt 0.50312500 1.0991208e-14 +vt 0.50312500 1.00000000 +vt 0.50468750 4.6074256e-15 +vt 0.50468750 1.00000000 +vt 0.50625000 7.7160500e-15 +vt 0.50625000 1.00000000 +vt 0.50781250 6.1062266e-15 +vt 0.50781250 1.00000000 +vt 0.50937500 6.4948047e-15 +vt 0.50937500 1.00000000 +vt 0.51093750 5.3290705e-15 +vt 0.51093750 1.00000000 +vt 0.51250000 1.00000000 +vt 0.51250000 8.4376950e-15 +vt 0.51406250 3.5527137e-15 +vt 0.51406250 1.00000000 +vt 0.51562500 1.0713652e-14 +vt 0.51562500 1.00000000 +vt 0.51718750 1.00000000 +vt 0.51718750 2.1094237e-15 +vt 0.51875000 1.0047518e-14 +vt 0.51875000 1.00000000 +vt 0.52031250 1.00000000 +vt 0.52031250 3.1641356e-15 +vt 0.52187500 1.0491608e-14 +vt 0.52187500 1.00000000 +vt 0.52343750 1.00000000 +vt 0.52343750 5.3290705e-15 +vt 0.52500000 1.2712054e-14 +vt 0.52500000 1.00000000 +vt 0.52656250 1.00000000 +vt 0.52656250 3.1641356e-15 +vt 0.52812500 1.0214052e-14 +vt 0.52812500 1.00000000 +vt 0.52968750 1.00000000 +vt 0.52968750 3.7192471e-15 +vt 0.53125000 9.7699626e-15 +vt 0.53125000 1.00000000 +vt 0.53281250 1.00000000 +vt 0.53281250 4.8849813e-15 +vt 0.53437500 1.1546319e-14 +vt 0.53437500 1.00000000 +vt 0.53593750 1.00000000 +vt 0.53593750 3.1641356e-15 +vt 0.53750000 8.8817842e-15 +vt 0.53750000 1.00000000 +vt 0.53906250 1.00000000 +vt 0.53906250 1.7763568e-15 +vt 0.54062500 1.2156942e-14 +vt 0.54062500 1.00000000 +vt 0.54218750 1.00000000 +vt 0.54218750 0.0000000e+0 +vt 0.54375000 1.0713652e-14 +vt 0.54375000 1.00000000 +vt 0.54531250 1.00000000 +vt 0.54531250 1.5543122e-15 +vt 0.54687500 1.1879386e-14 +vt 0.54687500 1.00000000 +vt 0.54843750 1.00000000 +vt 0.54843750 3.1641356e-15 +vt 0.55000000 1.1268764e-14 +vt 0.55000000 1.00000000 +vn 1.00000000 -7.4044900e-32 -1.3894524e-17 +vn 0.99518473 7.0792658e-17 9.8017140e-2 +vn 0.98078528 0.0000000e+0 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 -4.4245411e-18 0.95694034 +vn 0.19509032 -1.3273623e-17 0.98078528 +vn 9.8017140e-2 -2.6270713e-18 0.99518473 +vn 1.1358774e-15 -2.7653382e-19 1.00000000 +vn -9.8017140e-2 2.4888044e-18 0.99518473 +vn -0.19509032 4.4245411e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 0.0000000e+0 0.19509032 +vn -0.99518473 -1.4461895e-34 9.8017140e-2 +vn -1.00000000 0.0000000e+0 5.6967550e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 0.0000000e+0 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 4.4245411e-18 -0.98078528 +vn -9.8017140e-2 2.6270713e-18 -0.99518473 +vn 0.0000000e+0 2.7653382e-19 -1.00000000 +vn 9.8017140e-2 -2.4888044e-18 -0.99518473 +vn 0.19509032 -4.4245411e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 0.0000000e+0 -0.19509032 +vn 0.99518473 -7.0792658e-17 -9.8017140e-2 +vn 1.00000000 -3.7022450e-32 -1.3894524e-17 +vn 0.99518473 3.8565052e-34 9.8017140e-2 +vn 0.98078528 -3.4088600e-19 0.19509032 +vn 0.95694034 0.0000000e+0 0.29028468 +vn 0.92387953 0.0000000e+0 0.38268343 +vn 0.88192126 0.0000000e+0 0.47139674 +vn 0.83146961 0.0000000e+0 0.55557023 +vn 0.77301045 0.0000000e+0 0.63439328 +vn 0.70710678 0.0000000e+0 0.70710678 +vn 0.63439328 0.0000000e+0 0.77301045 +vn 0.55557023 0.0000000e+0 0.83146961 +vn 0.47139674 0.0000000e+0 0.88192126 +vn 0.38268343 0.0000000e+0 0.92387953 +vn 0.29028468 0.0000000e+0 0.95694034 +vn 0.19509032 -6.6368117e-18 0.98078528 +vn 9.8017140e-2 -2.7653382e-19 0.99518473 +vn 5.7141231e-16 -1.3826691e-19 1.00000000 +vn -9.8017140e-2 2.7653382e-19 0.99518473 +vn -0.19509032 2.2122706e-18 0.98078528 +vn -0.29028468 0.0000000e+0 0.95694034 +vn -0.38268343 0.0000000e+0 0.92387953 +vn -0.47139674 0.0000000e+0 0.88192126 +vn -0.55557023 0.0000000e+0 0.83146961 +vn -0.63439328 0.0000000e+0 0.77301045 +vn -0.70710678 0.0000000e+0 0.70710678 +vn -0.77301045 0.0000000e+0 0.63439328 +vn -0.83146961 0.0000000e+0 0.55557023 +vn -0.88192126 0.0000000e+0 0.47139674 +vn -0.92387953 0.0000000e+0 0.38268343 +vn -0.95694034 0.0000000e+0 0.29028468 +vn -0.98078528 -3.4088600e-19 0.19509032 +vn -0.99518473 -2.8923789e-34 9.8017140e-2 +vn -1.00000000 7.7612168e-33 5.6446505e-16 +vn -0.99518473 0.0000000e+0 -9.8017140e-2 +vn -0.98078528 3.4088600e-19 -0.19509032 +vn -0.95694034 0.0000000e+0 -0.29028468 +vn -0.92387953 0.0000000e+0 -0.38268343 +vn -0.88192126 0.0000000e+0 -0.47139674 +vn -0.83146961 0.0000000e+0 -0.55557023 +vn -0.77301045 0.0000000e+0 -0.63439328 +vn -0.70710678 0.0000000e+0 -0.70710678 +vn -0.63439328 0.0000000e+0 -0.77301045 +vn -0.55557023 0.0000000e+0 -0.83146961 +vn -0.47139674 0.0000000e+0 -0.88192126 +vn -0.38268343 0.0000000e+0 -0.92387953 +vn -0.29028468 0.0000000e+0 -0.95694034 +vn -0.19509032 2.2122706e-18 -0.98078528 +vn -9.8017140e-2 2.7653382e-19 -0.99518473 +vn 0.0000000e+0 1.3826691e-19 -1.00000000 +vn 9.8017140e-2 -2.7653382e-19 -0.99518473 +vn 0.19509032 -2.2122706e-18 -0.98078528 +vn 0.29028468 0.0000000e+0 -0.95694034 +vn 0.38268343 0.0000000e+0 -0.92387953 +vn 0.47139674 0.0000000e+0 -0.88192126 +vn 0.55557023 0.0000000e+0 -0.83146961 +vn 0.63439328 0.0000000e+0 -0.77301045 +vn 0.70710678 0.0000000e+0 -0.70710678 +vn 0.77301045 0.0000000e+0 -0.63439328 +vn 0.83146961 0.0000000e+0 -0.55557023 +vn 0.88192126 0.0000000e+0 -0.47139674 +vn 0.92387953 0.0000000e+0 -0.38268343 +vn 0.95694034 0.0000000e+0 -0.29028468 +vn 0.98078528 3.4088600e-19 -0.19509032 +vn 0.99518473 -4.2421557e-33 -9.8017140e-2 +g cylinder1_geom/jump/jump +usemtl geom/jump/jump +s 1 +f 1/34/1 65/33/65 64/35/64 +f 2/32/2 65/33/65 1/34/1 +f 2/32/2 67/29/67 66/31/66 +f 3/30/3 67/29/67 2/32/2 +f 4/28/4 67/29/67 3/30/3 +f 4/28/4 69/25/69 68/27/68 +f 5/26/5 69/25/69 4/28/4 +f 6/24/6 69/25/69 5/26/5 +f 6/24/6 71/21/71 70/23/70 +f 7/22/7 71/21/71 6/24/6 +f 8/20/8 71/21/71 7/22/7 +f 8/20/8 73/17/73 72/19/72 +f 9/18/9 73/17/73 8/20/8 +f 10/15/10 73/17/73 9/18/9 +f 10/15/10 75/13/75 74/16/74 +f 11/14/11 75/13/75 10/15/10 +f 12/11/12 75/13/75 11/14/11 +f 12/11/12 77/9/77 76/12/76 +f 13/10/13 77/9/77 12/11/12 +f 14/7/14 77/9/77 13/10/13 +f 14/7/14 79/5/79 78/8/78 +f 15/6/15 79/5/79 14/7/14 +f 16/3/16 79/5/79 15/6/15 +f 16/3/16 81/1/81 80/4/80 +f 17/2/17 81/1/81 16/3/16 +f 18/127/18 81/129/81 17/130/17 +f 18/127/18 83/125/83 82/128/82 +f 19/126/19 83/125/83 18/127/18 +f 20/123/20 83/125/83 19/126/19 +f 20/123/20 85/121/85 84/124/84 +f 21/122/21 85/121/85 20/123/20 +f 22/119/22 85/121/85 21/122/21 +f 22/119/22 87/117/87 86/120/86 +f 23/118/23 87/117/87 22/119/22 +f 24/115/24 87/117/87 23/118/23 +f 24/115/24 89/113/89 88/116/88 +f 25/114/25 89/113/89 24/115/24 +f 26/111/26 89/113/89 25/114/25 +f 26/111/26 91/109/91 90/112/90 +f 27/110/27 91/109/91 26/111/26 +f 28/107/28 91/109/91 27/110/27 +f 28/107/28 93/105/93 92/108/92 +f 29/106/29 93/105/93 28/107/28 +f 30/103/30 93/105/93 29/106/29 +f 30/103/30 95/101/95 94/104/94 +f 31/102/31 95/101/95 30/103/30 +f 32/99/32 95/101/95 31/102/31 +f 32/99/32 97/97/97 96/100/96 +f 33/98/33 97/97/97 32/99/32 +f 34/95/34 97/97/97 33/98/33 +f 34/95/34 99/93/99 98/96/98 +f 35/94/35 99/93/99 34/95/34 +f 36/91/36 99/93/99 35/94/35 +f 36/91/36 101/89/101 100/92/100 +f 37/90/37 101/89/101 36/91/36 +f 38/87/38 101/89/101 37/90/37 +f 38/87/38 103/85/103 102/88/102 +f 39/86/39 103/85/103 38/87/38 +f 40/84/40 103/85/103 39/86/39 +f 40/84/40 105/82/105 104/83/104 +f 41/81/41 105/82/105 40/84/40 +f 42/80/42 105/82/105 41/81/41 +f 42/80/42 107/77/107 106/79/106 +f 43/78/43 107/77/107 42/80/42 +f 44/76/44 107/77/107 43/78/43 +f 44/76/44 109/73/109 108/75/108 +f 45/74/45 109/73/109 44/76/44 +f 46/72/46 109/73/109 45/74/45 +f 46/72/46 111/69/111 110/71/110 +f 47/70/47 111/69/111 46/72/46 +f 48/68/48 111/69/111 47/70/47 +f 48/68/48 113/65/113 112/67/112 +f 49/66/49 113/65/113 48/68/48 +f 50/63/50 113/65/113 49/66/49 +f 50/63/50 115/61/115 114/64/114 +f 51/62/51 115/61/115 50/63/50 +f 52/59/52 115/61/115 51/62/51 +f 52/59/52 117/57/117 116/60/116 +f 53/58/53 117/57/117 52/59/52 +f 54/55/54 117/57/117 53/58/53 +f 54/55/54 119/53/119 118/56/118 +f 55/54/55 119/53/119 54/55/54 +f 56/52/56 119/53/119 55/54/55 +f 56/52/56 121/49/121 120/51/120 +f 57/50/57 121/49/121 56/52/56 +f 58/48/58 121/49/121 57/50/57 +f 58/48/58 123/45/123 122/47/122 +f 59/46/59 123/45/123 58/48/58 +f 60/43/60 123/45/123 59/46/59 +f 60/43/60 125/41/125 124/44/124 +f 61/42/61 125/41/125 60/43/60 +f 62/40/62 125/41/125 61/42/61 +f 62/40/62 127/37/127 126/39/126 +f 63/38/63 127/37/127 62/40/62 +f 64/35/64 65/33/65 128/36/128 +f 64/35/64 127/37/127 63/38/63 +f 66/31/66 65/33/65 2/32/2 +f 68/27/68 67/29/67 4/28/4 +f 70/23/70 69/25/69 6/24/6 +f 72/19/72 71/21/71 8/20/8 +f 74/16/74 73/17/73 10/15/10 +f 76/12/76 75/13/75 12/11/12 +f 78/8/78 77/9/77 14/7/14 +f 80/4/80 79/5/79 16/3/16 +f 82/128/82 81/129/81 18/127/18 +f 84/124/84 83/125/83 20/123/20 +f 86/120/86 85/121/85 22/119/22 +f 88/116/88 87/117/87 24/115/24 +f 90/112/90 89/113/89 26/111/26 +f 92/108/92 91/109/91 28/107/28 +f 94/104/94 93/105/93 30/103/30 +f 96/100/96 95/101/95 32/99/32 +f 98/96/98 97/97/97 34/95/34 +f 100/92/100 99/93/99 36/91/36 +f 102/88/102 101/89/101 38/87/38 +f 104/83/104 103/85/103 40/84/40 +f 106/79/106 105/82/105 42/80/42 +f 108/75/108 107/77/107 44/76/44 +f 110/71/110 109/73/109 46/72/46 +f 112/67/112 111/69/111 48/68/48 +f 114/64/114 113/65/113 50/63/50 +f 116/60/116 115/61/115 52/59/52 +f 118/56/118 117/57/117 54/55/54 +f 120/51/120 119/53/119 56/52/56 +f 122/47/122 121/49/121 58/48/58 +f 124/44/124 123/45/123 60/43/60 +f 126/39/126 125/41/125 62/40/62 +f 128/36/128 127/37/127 64/35/64 diff --git a/data/geom/jump/jump.png b/data/geom/jump/jump.png new file mode 100644 index 0000000..3fa622e Binary files /dev/null and b/data/geom/jump/jump.png differ diff --git a/data/geom/jump/jump.wings b/data/geom/jump/jump.wings new file mode 100644 index 0000000..9964df0 Binary files /dev/null and b/data/geom/jump/jump.wings differ diff --git a/data/geom/mark/mark.map b/data/geom/mark/mark.map new file mode 100644 index 0000000..531781b --- /dev/null +++ b/data/geom/mark/mark.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/mark/mark.obj" +} diff --git a/data/geom/mark/mark.mtl b/data/geom/mark/mark.mtl new file mode 100644 index 0000000..48f5512 --- /dev/null +++ b/data/geom/mark/mark.mtl @@ -0,0 +1,19 @@ +# Exported from Wings 3D 1.4.1 +newmtl default +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + +newmtl mtrl/white +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 + diff --git a/data/geom/mark/mark.obj b/data/geom/mark/mark.obj new file mode 100644 index 0000000..a10a9cf --- /dev/null +++ b/data/geom/mark/mark.obj @@ -0,0 +1,95 @@ +# Exported from Wings 3D 1.4.1 +mtllib mark.mtl +o cylinder2 +#16 vertices, 14 faces +v 1.00000000 0.0000000e+0 3.1225023e-17 +v 0.92387953 0.0000000e+0 0.38268343 +v 0.70710678 0.0000000e+0 0.70710678 +v 0.38268343 0.0000000e+0 0.92387953 +v 1.0286570e-16 0.0000000e+0 1.00000000 +v -0.38268343 0.0000000e+0 0.92387953 +v -0.70710678 0.0000000e+0 0.70710678 +v -0.92387953 0.0000000e+0 0.38268343 +v -1.00000000 0.0000000e+0 1.5368970e-16 +v -0.92387953 0.0000000e+0 -0.38268343 +v -0.70710678 0.0000000e+0 -0.70710678 +v -0.38268343 0.0000000e+0 -0.92387953 +v -1.4206366e-16 0.0000000e+0 -1.00000000 +v 0.38268343 0.0000000e+0 -0.92387953 +v 0.70710678 0.0000000e+0 -0.70710678 +v 0.92387953 0.0000000e+0 -0.38268343 +vt 0.0000000e+0 0.50000000 +vt 3.8060234e-2 0.69134172 +vt 3.8060234e-2 0.30865828 +vt 0.14644661 0.85355339 +vt 0.14644661 0.14644661 +vt 0.30865828 0.96193977 +vt 0.30865828 3.8060234e-2 +vt 0.50000000 1.00000000 +vt 0.50000000 0.0000000e+0 +vt 0.69134172 3.8060234e-2 +vt 0.69134172 0.96193977 +vt 0.85355339 0.85355339 +vt 0.85355339 0.14644661 +vt 0.96193977 0.69134172 +vt 0.96193977 0.30865828 +vt 1.00000000 0.50000000 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +vn 0.0000000e+0 1.00000000 0.0000000e+0 +g cylinder2_mtrl/white +usemtl mtrl/default +s 2 +f 1/16/3 9/1/23 2/15/5 +f 2/15/4 8/3/20 3/13/9 +f 3/13/7 7/5/17 4/10/12 +f 4/10/10 6/7/14 5/9/13 +f 6/7/15 4/10/11 7/5/16 +f 7/5/18 3/13/8 8/3/19 +f 8/3/21 2/15/6 9/1/24 +f 9/1/22 1/16/2 10/2/26 +f 10/2/27 16/14/42 11/4/29 +f 11/4/30 15/12/39 12/6/32 +f 12/6/33 14/11/36 13/8/34 +f 14/11/35 12/6/31 15/12/38 +f 15/12/37 11/4/28 16/14/41 +f 16/14/40 10/2/25 1/16/1 diff --git a/data/geom/mark/mark.wings b/data/geom/mark/mark.wings new file mode 100644 index 0000000..33be257 Binary files /dev/null and b/data/geom/mark/mark.wings differ diff --git a/data/geom/vect/vect b/data/geom/vect/vect new file mode 100644 index 0000000..081d77c --- /dev/null +++ b/data/geom/vect/vect @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t transparent +45.0 diff --git a/data/geom/vect/vect.map b/data/geom/vect/vect.map new file mode 100644 index 0000000..03bab7f --- /dev/null +++ b/data/geom/vect/vect.map @@ -0,0 +1,4 @@ +{ +"classname" "worldspawn" +"model" "geom/vect/vect.obj" +} diff --git a/data/geom/vect/vect.mtl b/data/geom/vect/vect.mtl new file mode 100644 index 0000000..c5302eb --- /dev/null +++ b/data/geom/vect/vect.mtl @@ -0,0 +1,11 @@ +# Exported from Wings 3D 1.4.1 +newmtl geom/vect/vect +Ns 100.0 +d 1.0 +illum 2 +Kd 1.0 1.0 1.0 +Ka 1.0 1.0 1.0 +Ks 1.0 1.0 1.0 +Ke 0.0 0.0 0.0 +map_Kd vect.png + diff --git a/data/geom/vect/vect.obj b/data/geom/vect/vect.obj new file mode 100644 index 0000000..1fd889f --- /dev/null +++ b/data/geom/vect/vect.obj @@ -0,0 +1,51 @@ +# Exported from Wings 3D 1.4.1 +mtllib vect.mtl +o cube1 +#5 vertices, 6 faces +v -1.00000000 -1.00000000 0.0000000e+0 +v -1.00000000 1.00000000 0.0000000e+0 +v 1.00000000 1.00000000 0.0000000e+0 +v 1.00000000 -1.00000000 0.0000000e+0 +v 0.0000000e+0 0.0000000e+0 2.00000000 +vt -1.3877788e-17 1.00000000 +vt 1.3877788e-17 1.00000000 +vt 2.7755576e-17 1.00000000 +vt 5.5511151e-17 4.4408921e-16 +vt 7.6327833e-17 1.00000000 +vt 2.2859681e-16 1.00000000 +vt 0.50000000 0.0000000e+0 +vt 0.50000000 0.0000000e+0 +vt 0.50000000 0.0000000e+0 +vt 1.00000000 2.2204460e-16 +vt 1.00000000 1.00000000 +vt 1.00000000 1.00000000 +vt 1.00000000 1.00000000 +vn 0.0000000e+0 -0.89442719 0.44721360 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn -0.89442719 0.0000000e+0 0.44721360 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 0.89442719 0.44721360 +vn -0.89442719 0.0000000e+0 0.44721360 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn 0.89442719 0.0000000e+0 0.44721360 +vn 0.0000000e+0 0.89442719 0.44721360 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn 0.89442719 0.0000000e+0 0.44721360 +vn 0.0000000e+0 -0.89442719 0.44721360 +vn 0.0000000e+0 0.0000000e+0 -1.00000000 +vn 0.89442719 0.0000000e+0 0.44721360 +vn 0.0000000e+0 -0.89442719 0.44721360 +vn 0.0000000e+0 0.89442719 0.44721360 +vn -0.89442719 0.0000000e+0 0.44721360 +g cube1_geom/vect/vect +usemtl geom/vect/vect +s 1 +f 5/8/18 2/13/6 1/1/3 +f 5/9/15 4/13/12 3/5/8 +s 2 +f 1/10/2 3/6/10 4/4/14 +f 2/13/7 3/6/11 1/10/4 +s 3 +f 1/12/1 4/3/13 5/8/16 +f 5/7/17 3/11/9 2/2/5 diff --git a/data/geom/vect/vect.png b/data/geom/vect/vect.png new file mode 100644 index 0000000..3269bda Binary files /dev/null and b/data/geom/vect/vect.png differ diff --git a/data/geom/vect/vect.wings b/data/geom/vect/vect.wings new file mode 100644 index 0000000..e1393f9 Binary files /dev/null and b/data/geom/vect/vect.wings differ diff --git a/data/item/coin/coin b/data/item/coin/coin index 90e8515..41f080e 100644 --- a/data/item/coin/coin +++ b/data/item/coin/coin @@ -1,7 +1,7 @@ -0.700000 0.700000 0.700000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 0.000000 -10.000000 -1 -45.000000 +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 + +45.0 diff --git a/data/item/coin/coin-glow b/data/item/coin/coin-glow new file mode 100644 index 0000000..8e473ff --- /dev/null +++ b/data/item/coin/coin-glow @@ -0,0 +1,7 @@ +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive clamp-s clamp-t transparent +45.0 diff --git a/data/item/coin/coin-glow.png b/data/item/coin/coin-glow.png new file mode 100644 index 0000000..2ac6abe Binary files /dev/null and b/data/item/coin/coin-glow.png differ diff --git a/data/item/grow/grow b/data/item/grow/grow index 90e8515..b14443e 100644 --- a/data/item/grow/grow +++ b/data/item/grow/grow @@ -1,7 +1,7 @@ -0.700000 0.700000 0.700000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 0.000000 -10.000000 -1 -45.000000 +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +10.0 + +45.0 diff --git a/data/item/shrink/shrink b/data/item/shrink/shrink index 90e8515..b14443e 100644 --- a/data/item/shrink/shrink +++ b/data/item/shrink/shrink @@ -1,7 +1,7 @@ -0.700000 0.700000 0.700000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 0.000000 -10.000000 -1 -45.000000 +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +10.0 + +45.0 diff --git a/data/map-back/alien.map b/data/map-back/alien.map index a2db099..d6eb504 100644 --- a/data/map-back/alien.map +++ b/data/map-back/alien.map @@ -2858,7 +2858,7 @@ "image" "png/stars1" "width" " +101.49846 +0.00000 +0.00000" "height" " +101.49846 +0.00000 +0.00000" -"xrot" " +10.31190 +0.00000 +0.00000" +"xrot" " +30.31190 +0.00000 +0.00000" "yrot" " -48.79726 +0.00000 +0.00000" "zrot" " -147.09494 +0.00000 +0.00000" "dist" " +300.00000" @@ -2870,7 +2870,7 @@ "image" "png/stars1" "width" " +198.85251 +0.00000 +0.00000" "height" " +198.85251 +0.00000 +0.00000" -"xrot" " +0.32685 +0.00000 +0.00000" +"xrot" " +20.32685 +0.00000 +0.00000" "yrot" " -137.13004 +0.00000 +0.00000" "zrot" " -19.55077 +0.00000 +0.00000" "dist" " +300.00000" @@ -2966,7 +2966,7 @@ "image" "png/stars1" "width" " +137.58659 +0.00000 +0.00000" "height" " +137.58659 +0.00000 +0.00000" -"xrot" " +3.93506 +0.00000 +0.00000" +"xrot" " +15.93506 +0.00000 +0.00000" "yrot" " +63.79406 +0.00000 +0.00000" "zrot" " -146.65547 +0.00000 +0.00000" "dist" " +300.00000" @@ -2990,7 +2990,7 @@ "image" "png/stars3" "width" " +183.76111 +0.00000 +0.00000" "height" " +183.76111 +0.00000 +0.00000" -"xrot" " +14.37513 +0.00000 +0.00000" +"xrot" " +24.37513 +0.00000 +0.00000" "yrot" " -5.42192 +0.00000 +0.00000" "zrot" " +81.53752 +0.00000 +0.00000" "dist" " +300.00000" @@ -3098,7 +3098,7 @@ "image" "png/stars1" "width" " +117.78924 +0.00000 +0.00000" "height" " +117.78924 +0.00000 +0.00000" -"xrot" " +10.88870 +0.00000 +0.00000" +"xrot" " +18.88870 +0.00000 +0.00000" "yrot" " -8.90469 +0.00000 +0.00000" "zrot" " +114.18989 +0.00000 +0.00000" "dist" " +300.00000" @@ -3122,7 +3122,7 @@ "image" "png/stars1" "width" " +175.58519 +0.00000 +0.00000" "height" " +175.58519 +0.00000 +0.00000" -"xrot" " +8.61141 +0.00000 +0.00000" +"xrot" " +15.61141 +0.00000 +0.00000" "yrot" " -8.89370 +0.00000 +0.00000" "zrot" " +79.88953 +0.00000 +0.00000" "dist" " +300.00000" @@ -3218,7 +3218,7 @@ "image" "png/stars3" "width" " +119.78515 +0.00000 +0.00000" "height" " +119.78515 +0.00000 +0.00000" -"xrot" " +7.69494 +0.00000 +0.00000" +"xrot" " +15.69494 +0.00000 +0.00000" "yrot" " -135.60289 +0.00000 +0.00000" "zrot" " +123.17698 +0.00000 +0.00000" "dist" " +300.00000" @@ -3254,7 +3254,7 @@ "image" "png/stars3" "width" " +125.27238 +0.00000 +0.00000" "height" " +125.27238 +0.00000 +0.00000" -"xrot" " +4.27045 +0.00000 +0.00000" +"xrot" " +19.27045 +0.00000 +0.00000" "yrot" " -179.41771 +0.00000 +0.00000" "zrot" " -127.98914 +0.00000 +0.00000" "dist" " +300.00000" diff --git a/data/mtrl/arrow-dark b/data/mtrl/arrow-dark index cf9568b..7ff7a5d 100644 --- a/data/mtrl/arrow-dark +++ b/data/mtrl/arrow-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/arrow-green-light b/data/mtrl/arrow-green-light index cf9568b..7ff7a5d 100644 --- a/data/mtrl/arrow-green-light +++ b/data/mtrl/arrow-green-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/arrow-light b/data/mtrl/arrow-light index cf9568b..7ff7a5d 100644 --- a/data/mtrl/arrow-light +++ b/data/mtrl/arrow-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/asteroid b/data/mtrl/asteroid index 7401926..e876576 100644 --- a/data/mtrl/asteroid +++ b/data/mtrl/asteroid @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/black b/data/mtrl/black index 7401926..e876576 100644 --- a/data/mtrl/black +++ b/data/mtrl/black @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/black-decal b/data/mtrl/black-decal index f66ac4b..8d2344b 100644 --- a/data/mtrl/black-decal +++ b/data/mtrl/black-decal @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -65 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed +45.0 diff --git a/data/mtrl/blue b/data/mtrl/blue index 7401926..e876576 100644 --- a/data/mtrl/blue +++ b/data/mtrl/blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/blue-fade b/data/mtrl/blue-fade index 31a208f..69baa51 100644 --- a/data/mtrl/blue-fade +++ b/data/mtrl/blue-fade @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.250000 0.250000 0.250000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.25 0.25 0.25 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/blue-gas b/data/mtrl/blue-gas index 6eba1fc..47d4aad 100644 --- a/data/mtrl/blue-gas +++ b/data/mtrl/blue-gas @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/blue-glossy b/data/mtrl/blue-glossy index 8c48f2b..6c8b2ca 100644 --- a/data/mtrl/blue-glossy +++ b/data/mtrl/blue-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +20.0 +shadowed +45.0 diff --git a/data/mtrl/blue-gradient b/data/mtrl/blue-gradient index 7401926..e876576 100644 --- a/data/mtrl/blue-gradient +++ b/data/mtrl/blue-gradient @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/blue-gradient-bright b/data/mtrl/blue-gradient-bright index ebb2acb..cb4c5c3 100644 --- a/data/mtrl/blue-gradient-bright +++ b/data/mtrl/blue-gradient-bright @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +1.0 1.0 1.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/blue-natural b/data/mtrl/blue-natural index 7401926..e876576 100644 --- a/data/mtrl/blue-natural +++ b/data/mtrl/blue-natural @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/blue-sea b/data/mtrl/blue-sea index c85c2de..10da8c3 100644 --- a/data/mtrl/blue-sea +++ b/data/mtrl/blue-sea @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.700000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -6 -45.000000 +1.0 1.0 1.0 0.8 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective +45.0 diff --git a/data/mtrl/blue-sea.png b/data/mtrl/blue-sea.png index 26fdf9e..c9f907b 100644 Binary files a/data/mtrl/blue-sea.png and b/data/mtrl/blue-sea.png differ diff --git a/data/mtrl/blue-wave b/data/mtrl/blue-wave index 90a2f23..72509de 100644 --- a/data/mtrl/blue-wave +++ b/data/mtrl/blue-wave @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.500000 0.500000 0.500000 1.000000 -0.000000 0.000000 0.000000 1.000000 -50.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +1.0 1.0 1.0 1.0 +0.5 0.5 0.5 1.0 +0.0 0.0 0.0 1.0 +50.0 +transparent +45.0 diff --git a/data/mtrl/border-carpet b/data/mtrl/border-carpet index 7401926..e876576 100644 --- a/data/mtrl/border-carpet +++ b/data/mtrl/border-carpet @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/brass b/data/mtrl/brass index 48c6e13..6aa20fc 100644 --- a/data/mtrl/brass +++ b/data/mtrl/brass @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -9 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +environment shadowed +45.0 diff --git a/data/mtrl/brass-faceted b/data/mtrl/brass-faceted index 58a05f4..12fe151 100644 --- a/data/mtrl/brass-faceted +++ b/data/mtrl/brass-faceted @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -40.000000 -9 -0.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +40.0 +environment shadowed +0.0 diff --git a/data/mtrl/brick b/data/mtrl/brick index 7401926..e876576 100644 --- a/data/mtrl/brick +++ b/data/mtrl/brick @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/brick-small b/data/mtrl/brick-small index 7401926..e876576 100644 --- a/data/mtrl/brick-small +++ b/data/mtrl/brick-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/carpet b/data/mtrl/carpet index 7401926..e876576 100644 --- a/data/mtrl/carpet +++ b/data/mtrl/carpet @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/caution b/data/mtrl/caution index 7401926..e876576 100644 --- a/data/mtrl/caution +++ b/data/mtrl/caution @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/chalk b/data/mtrl/chalk index 7401926..e876576 100644 --- a/data/mtrl/chalk +++ b/data/mtrl/chalk @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/check-black-white b/data/mtrl/check-black-white index 7401926..e876576 100644 --- a/data/mtrl/check-black-white +++ b/data/mtrl/check-black-white @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/chrome b/data/mtrl/chrome index b388fad..41de2f2 100644 --- a/data/mtrl/chrome +++ b/data/mtrl/chrome @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -40.000000 -9 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +40.0 +environment shadowed +45.0 diff --git a/data/mtrl/chrome-faceted b/data/mtrl/chrome-faceted index 07ed8b2..bb25073 100644 --- a/data/mtrl/chrome-faceted +++ b/data/mtrl/chrome-faceted @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -40.000000 -9 -0.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +40.0 +environment shadowed +0.0 diff --git a/data/mtrl/coin-blue b/data/mtrl/coin-blue index 7401926..e876576 100644 --- a/data/mtrl/coin-blue +++ b/data/mtrl/coin-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-brown-small b/data/mtrl/coin-brown-small index 7401926..e876576 100644 --- a/data/mtrl/coin-brown-small +++ b/data/mtrl/coin-brown-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-green-check b/data/mtrl/coin-green-check index 7401926..e876576 100644 --- a/data/mtrl/coin-green-check +++ b/data/mtrl/coin-green-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-green-check2 b/data/mtrl/coin-green-check2 index 7401926..e876576 100644 --- a/data/mtrl/coin-green-check2 +++ b/data/mtrl/coin-green-check2 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-green-dark b/data/mtrl/coin-green-dark index 7401926..e876576 100644 --- a/data/mtrl/coin-green-dark +++ b/data/mtrl/coin-green-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-green-light b/data/mtrl/coin-green-light index 7401926..e876576 100644 --- a/data/mtrl/coin-green-light +++ b/data/mtrl/coin-green-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-green-small b/data/mtrl/coin-green-small index 7401926..e876576 100644 --- a/data/mtrl/coin-green-small +++ b/data/mtrl/coin-green-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-mirror-check b/data/mtrl/coin-mirror-check index 73b0457..a0b161a 100644 --- a/data/mtrl/coin-mirror-check +++ b/data/mtrl/coin-mirror-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.400000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -4 -45.000000 +1.0 1.0 1.0 0.4 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +reflective shadowed +45.0 diff --git a/data/mtrl/coin-orange b/data/mtrl/coin-orange index 7401926..e876576 100644 --- a/data/mtrl/coin-orange +++ b/data/mtrl/coin-orange @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-orange-big b/data/mtrl/coin-orange-big index 7401926..e876576 100644 --- a/data/mtrl/coin-orange-big +++ b/data/mtrl/coin-orange-big @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-pad-dot-blue b/data/mtrl/coin-pad-dot-blue index cf9568b..7ff7a5d 100644 --- a/data/mtrl/coin-pad-dot-blue +++ b/data/mtrl/coin-pad-dot-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/coin-pad-dot-red b/data/mtrl/coin-pad-dot-red index cf9568b..7ff7a5d 100644 --- a/data/mtrl/coin-pad-dot-red +++ b/data/mtrl/coin-pad-dot-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/coin-pad-dot-yellow b/data/mtrl/coin-pad-dot-yellow index cf9568b..7ff7a5d 100644 --- a/data/mtrl/coin-pad-dot-yellow +++ b/data/mtrl/coin-pad-dot-yellow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/coin-pad-green-dark b/data/mtrl/coin-pad-green-dark index cf9568b..7ff7a5d 100644 --- a/data/mtrl/coin-pad-green-dark +++ b/data/mtrl/coin-pad-green-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/coin-pad-red-dark b/data/mtrl/coin-pad-red-dark index cf9568b..7ff7a5d 100644 --- a/data/mtrl/coin-pad-red-dark +++ b/data/mtrl/coin-pad-red-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/coin-purple b/data/mtrl/coin-purple index 7401926..e876576 100644 --- a/data/mtrl/coin-purple +++ b/data/mtrl/coin-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-purple-check b/data/mtrl/coin-purple-check index 7401926..e876576 100644 --- a/data/mtrl/coin-purple-check +++ b/data/mtrl/coin-purple-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-red b/data/mtrl/coin-red index 7401926..e876576 100644 --- a/data/mtrl/coin-red +++ b/data/mtrl/coin-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/coin-shiny b/data/mtrl/coin-shiny index e19a0f1..03c1fc4 100644 --- a/data/mtrl/coin-shiny +++ b/data/mtrl/coin-shiny @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -4 -45.000000 +1.0 1.0 1.0 0.5 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +10.0 +reflective shadowed +45.0 diff --git a/data/mtrl/crate b/data/mtrl/crate index 7401926..e876576 100644 --- a/data/mtrl/crate +++ b/data/mtrl/crate @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/crate-small b/data/mtrl/crate-small index 7401926..e876576 100644 --- a/data/mtrl/crate-small +++ b/data/mtrl/crate-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/curtain-check-diagonal b/data/mtrl/curtain-check-diagonal index 6e168df..47d4aad 100644 --- a/data/mtrl/curtain-check-diagonal +++ b/data/mtrl/curtain-check-diagonal @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -258 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/cyan b/data/mtrl/cyan index 7401926..e876576 100644 --- a/data/mtrl/cyan +++ b/data/mtrl/cyan @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/default b/data/mtrl/default new file mode 100644 index 0000000..41f080e --- /dev/null +++ b/data/mtrl/default @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 + +45.0 diff --git a/data/mtrl/dot-grey b/data/mtrl/dot-grey index 6eba1fc..47d4aad 100644 --- a/data/mtrl/dot-grey +++ b/data/mtrl/dot-grey @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/edge b/data/mtrl/edge index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge +++ b/data/mtrl/edge @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/edge-blue b/data/mtrl/edge-blue index 7401926..e876576 100644 --- a/data/mtrl/edge-blue +++ b/data/mtrl/edge-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-brown b/data/mtrl/edge-brown index 7401926..e876576 100644 --- a/data/mtrl/edge-brown +++ b/data/mtrl/edge-brown @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green b/data/mtrl/edge-green index 7401926..e876576 100644 --- a/data/mtrl/edge-green +++ b/data/mtrl/edge-green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green-check b/data/mtrl/edge-green-check index 7401926..e876576 100644 --- a/data/mtrl/edge-green-check +++ b/data/mtrl/edge-green-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green-check2 b/data/mtrl/edge-green-check2 index 7401926..e876576 100644 --- a/data/mtrl/edge-green-check2 +++ b/data/mtrl/edge-green-check2 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green-dark b/data/mtrl/edge-green-dark index 7401926..e876576 100644 --- a/data/mtrl/edge-green-dark +++ b/data/mtrl/edge-green-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green-light b/data/mtrl/edge-green-light index 7401926..e876576 100644 --- a/data/mtrl/edge-green-light +++ b/data/mtrl/edge-green-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-green-offset b/data/mtrl/edge-green-offset index 7401926..e876576 100644 --- a/data/mtrl/edge-green-offset +++ b/data/mtrl/edge-green-offset @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-orange b/data/mtrl/edge-orange index 7401926..e876576 100644 --- a/data/mtrl/edge-orange +++ b/data/mtrl/edge-orange @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-orange-big b/data/mtrl/edge-orange-big index 7401926..e876576 100644 --- a/data/mtrl/edge-orange-big +++ b/data/mtrl/edge-orange-big @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-purple b/data/mtrl/edge-purple index 7401926..e876576 100644 --- a/data/mtrl/edge-purple +++ b/data/mtrl/edge-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-purple-check b/data/mtrl/edge-purple-check index 7401926..e876576 100644 --- a/data/mtrl/edge-purple-check +++ b/data/mtrl/edge-purple-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-red b/data/mtrl/edge-red index 7401926..e876576 100644 --- a/data/mtrl/edge-red +++ b/data/mtrl/edge-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge-x b/data/mtrl/edge-x index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge-x +++ b/data/mtrl/edge-x @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/edge-y b/data/mtrl/edge-y index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge-y +++ b/data/mtrl/edge-y @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/edge2 b/data/mtrl/edge2 index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge2 +++ b/data/mtrl/edge2 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/edge2-blue b/data/mtrl/edge2-blue index 7401926..e876576 100644 --- a/data/mtrl/edge2-blue +++ b/data/mtrl/edge2-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-brown b/data/mtrl/edge2-brown index 7401926..e876576 100644 --- a/data/mtrl/edge2-brown +++ b/data/mtrl/edge2-brown @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green b/data/mtrl/edge2-green index 7401926..e876576 100644 --- a/data/mtrl/edge2-green +++ b/data/mtrl/edge2-green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green-check b/data/mtrl/edge2-green-check index 7401926..e876576 100644 --- a/data/mtrl/edge2-green-check +++ b/data/mtrl/edge2-green-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green-dark b/data/mtrl/edge2-green-dark index 7401926..e876576 100644 --- a/data/mtrl/edge2-green-dark +++ b/data/mtrl/edge2-green-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green-light b/data/mtrl/edge2-green-light index 7401926..e876576 100644 --- a/data/mtrl/edge2-green-light +++ b/data/mtrl/edge2-green-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green-offset b/data/mtrl/edge2-green-offset index 7401926..e876576 100644 --- a/data/mtrl/edge2-green-offset +++ b/data/mtrl/edge2-green-offset @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-green-small b/data/mtrl/edge2-green-small index 7401926..e876576 100644 --- a/data/mtrl/edge2-green-small +++ b/data/mtrl/edge2-green-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-orange b/data/mtrl/edge2-orange index 7401926..e876576 100644 --- a/data/mtrl/edge2-orange +++ b/data/mtrl/edge2-orange @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-orange-big b/data/mtrl/edge2-orange-big index 7401926..e876576 100644 --- a/data/mtrl/edge2-orange-big +++ b/data/mtrl/edge2-orange-big @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-purple b/data/mtrl/edge2-purple index 7401926..e876576 100644 --- a/data/mtrl/edge2-purple +++ b/data/mtrl/edge2-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-purple-check b/data/mtrl/edge2-purple-check index 7401926..e876576 100644 --- a/data/mtrl/edge2-purple-check +++ b/data/mtrl/edge2-purple-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-red b/data/mtrl/edge2-red index 7401926..e876576 100644 --- a/data/mtrl/edge2-red +++ b/data/mtrl/edge2-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/edge2-x b/data/mtrl/edge2-x index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge2-x +++ b/data/mtrl/edge2-x @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/edge2-y b/data/mtrl/edge2-y index cf9568b..7ff7a5d 100644 --- a/data/mtrl/edge2-y +++ b/data/mtrl/edge2-y @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/glass b/data/mtrl/glass index a62ad89..5760c13 100644 --- a/data/mtrl/glass +++ b/data/mtrl/glass @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -10 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +environment shadowed transparent +45.0 diff --git a/data/mtrl/glass-dark b/data/mtrl/glass-dark index d18b72a..3322986 100644 --- a/data/mtrl/glass-dark +++ b/data/mtrl/glass-dark @@ -1,7 +1,7 @@ -0.200000 0.200000 0.200000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -10 -45.000000 +0.2 0.2 0.2 0.5 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +environment shadowed transparent +45.0 diff --git a/data/mtrl/goal b/data/mtrl/goal index cf9568b..7ff7a5d 100644 --- a/data/mtrl/goal +++ b/data/mtrl/goal @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/goal-1024 b/data/mtrl/goal-1024 index cf9568b..7ff7a5d 100644 --- a/data/mtrl/goal-1024 +++ b/data/mtrl/goal-1024 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/goal-special b/data/mtrl/goal-special index cf9568b..7ff7a5d 100644 --- a/data/mtrl/goal-special +++ b/data/mtrl/goal-special @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/green b/data/mtrl/green index 7401926..e876576 100644 --- a/data/mtrl/green +++ b/data/mtrl/green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/green-gas b/data/mtrl/green-gas index c1c1ab7..0667389 100644 --- a/data/mtrl/green-gas +++ b/data/mtrl/green-gas @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.700000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 0.7 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/hole b/data/mtrl/hole index cf9568b..7ff7a5d 100644 --- a/data/mtrl/hole +++ b/data/mtrl/hole @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/invisible b/data/mtrl/invisible index 0ce54bf..ae6f4d1 100644 --- a/data/mtrl/invisible +++ b/data/mtrl/invisible @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -0 -45.000000 +1.0 1.0 1.0 0.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 + +45.0 diff --git a/data/mtrl/leaf b/data/mtrl/leaf index d84c997..57273f4 100644 --- a/data/mtrl/leaf +++ b/data/mtrl/leaf @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.375000 0.375000 0.375000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.375 0.375 0.375 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/marble-brown-polished b/data/mtrl/marble-brown-polished index d4cbebf..bbe7c2c 100644 --- a/data/mtrl/marble-brown-polished +++ b/data/mtrl/marble-brown-polished @@ -1,7 +1,7 @@ -0.200000 0.200000 0.200000 0.800000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -4 -45.000000 +0.2 0.2 0.2 0.8 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +reflective shadowed +45.0 diff --git a/data/mtrl/marble-grey b/data/mtrl/marble-grey index 7401926..e876576 100644 --- a/data/mtrl/marble-grey +++ b/data/mtrl/marble-grey @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/marble-grey-polished b/data/mtrl/marble-grey-polished index 3630922..bbe9c3d 100644 --- a/data/mtrl/marble-grey-polished +++ b/data/mtrl/marble-grey-polished @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.5 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/marble-purple b/data/mtrl/marble-purple index 7401926..e876576 100644 --- a/data/mtrl/marble-purple +++ b/data/mtrl/marble-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/marble-purple-polished b/data/mtrl/marble-purple-polished index 9acc552..0332441 100644 --- a/data/mtrl/marble-purple-polished +++ b/data/mtrl/marble-purple-polished @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.800000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -4 -45.000000 +1.0 1.0 1.0 0.8 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror b/data/mtrl/mirror index cd0d21e..965089b 100644 --- a/data/mtrl/mirror +++ b/data/mtrl/mirror @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-blue b/data/mtrl/mirror-blue index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-blue +++ b/data/mtrl/mirror-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-check b/data/mtrl/mirror-check index a483382..d78bb3e 100644 --- a/data/mtrl/mirror-check +++ b/data/mtrl/mirror-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.400000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -4 -45.000000 +1.0 1.0 1.0 0.4 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +20.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-check-weak b/data/mtrl/mirror-check-weak index a751208..836afb8 100644 --- a/data/mtrl/mirror-check-weak +++ b/data/mtrl/mirror-check-weak @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.750000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.75 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-cyan b/data/mtrl/mirror-cyan index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-cyan +++ b/data/mtrl/mirror-cyan @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-dark b/data/mtrl/mirror-dark index c729a70..33e7278 100644 --- a/data/mtrl/mirror-dark +++ b/data/mtrl/mirror-dark @@ -1,7 +1,7 @@ -0.000000 0.000000 0.000000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.500000 0.500000 0.500000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -4 -45.000000 +0.0 0.0 0.0 0.5 +0.2 0.2 0.2 1.0 +0.5 0.5 0.5 1.0 +0.0 0.0 0.0 1.0 +10.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-green b/data/mtrl/mirror-green index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-green +++ b/data/mtrl/mirror-green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-orange b/data/mtrl/mirror-orange index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-orange +++ b/data/mtrl/mirror-orange @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-purple b/data/mtrl/mirror-purple index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-purple +++ b/data/mtrl/mirror-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-red b/data/mtrl/mirror-red index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-red +++ b/data/mtrl/mirror-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/mirror-yellow b/data/mtrl/mirror-yellow index 9013f52..3ad83b0 100644 --- a/data/mtrl/mirror-yellow +++ b/data/mtrl/mirror-yellow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.200000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -4 -45.000000 +1.0 1.0 1.0 0.2 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 +reflective shadowed +45.0 diff --git a/data/mtrl/orb-blue b/data/mtrl/orb-blue index 094e85d..fe83566 100644 --- a/data/mtrl/orb-blue +++ b/data/mtrl/orb-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -98 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t decal transparent +45.0 diff --git a/data/mtrl/pink-cream b/data/mtrl/pink-cream index 7401926..e876576 100644 --- a/data/mtrl/pink-cream +++ b/data/mtrl/pink-cream @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/plank b/data/mtrl/plank index 7401926..e876576 100644 --- a/data/mtrl/plank +++ b/data/mtrl/plank @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/plank-diagonal b/data/mtrl/plank-diagonal index 7401926..e876576 100644 --- a/data/mtrl/plank-diagonal +++ b/data/mtrl/plank-diagonal @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/plank-small b/data/mtrl/plank-small index 7401926..e876576 100644 --- a/data/mtrl/plank-small +++ b/data/mtrl/plank-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/plank-small-light b/data/mtrl/plank-small-light index 7401926..e876576 100644 --- a/data/mtrl/plank-small-light +++ b/data/mtrl/plank-small-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/poof-blue b/data/mtrl/poof-blue index 094e85d..fe83566 100644 --- a/data/mtrl/poof-blue +++ b/data/mtrl/poof-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -98 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t decal transparent +45.0 diff --git a/data/mtrl/poof-green b/data/mtrl/poof-green index 094e85d..fe83566 100644 --- a/data/mtrl/poof-green +++ b/data/mtrl/poof-green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -98 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t decal transparent +45.0 diff --git a/data/mtrl/poof-red b/data/mtrl/poof-red index 094e85d..fe83566 100644 --- a/data/mtrl/poof-red +++ b/data/mtrl/poof-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -98 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t decal transparent +45.0 diff --git a/data/mtrl/poof-yellow b/data/mtrl/poof-yellow index 094e85d..fe83566 100644 --- a/data/mtrl/poof-yellow +++ b/data/mtrl/poof-yellow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -98 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +clamp-s clamp-t decal transparent +45.0 diff --git a/data/mtrl/purple-pattern b/data/mtrl/purple-pattern index 7401926..e876576 100644 --- a/data/mtrl/purple-pattern +++ b/data/mtrl/purple-pattern @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/rail b/data/mtrl/rail index 8c48f2b..6c8b2ca 100644 --- a/data/mtrl/rail +++ b/data/mtrl/rail @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +20.0 +shadowed +45.0 diff --git a/data/mtrl/rainbow b/data/mtrl/rainbow index 7401926..e876576 100644 --- a/data/mtrl/rainbow +++ b/data/mtrl/rainbow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/red b/data/mtrl/red index 7401926..e876576 100644 --- a/data/mtrl/red +++ b/data/mtrl/red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/red-gas b/data/mtrl/red-gas index c1c1ab7..0667389 100644 --- a/data/mtrl/red-gas +++ b/data/mtrl/red-gas @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.700000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +1.0 1.0 1.0 0.7 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/red-glass b/data/mtrl/red-glass index 7d2e94d..3ece2f5 100644 --- a/data/mtrl/red-glass +++ b/data/mtrl/red-glass @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.700000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -2 -45.000000 +1.0 1.0 1.0 0.7 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed transparent +45.0 diff --git a/data/mtrl/red-glossy b/data/mtrl/red-glossy index 8c48f2b..6c8b2ca 100644 --- a/data/mtrl/red-glossy +++ b/data/mtrl/red-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -20.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +20.0 +shadowed +45.0 diff --git a/data/mtrl/red-gradient b/data/mtrl/red-gradient index 7401926..e876576 100644 --- a/data/mtrl/red-gradient +++ b/data/mtrl/red-gradient @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/red-gradient-bright b/data/mtrl/red-gradient-bright index ebb2acb..cb4c5c3 100644 --- a/data/mtrl/red-gradient-bright +++ b/data/mtrl/red-gradient-bright @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +1.0 1.0 1.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/red-pattern b/data/mtrl/red-pattern index 7401926..e876576 100644 --- a/data/mtrl/red-pattern +++ b/data/mtrl/red-pattern @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/rotate180 b/data/mtrl/rotate180 index cf9568b..7ff7a5d 100644 --- a/data/mtrl/rotate180 +++ b/data/mtrl/rotate180 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/rotate90 b/data/mtrl/rotate90 index cf9568b..7ff7a5d 100644 --- a/data/mtrl/rotate90 +++ b/data/mtrl/rotate90 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/shadow-rock b/data/mtrl/shadow-rock index cf9568b..7ff7a5d 100644 --- a/data/mtrl/shadow-rock +++ b/data/mtrl/shadow-rock @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/sign-end b/data/mtrl/sign-end index 52f8df7..2f2c0fd 100644 --- a/data/mtrl/sign-end +++ b/data/mtrl/sign-end @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.250000 0.250000 0.250000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.25 0.25 0.25 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/sign-no-smoking b/data/mtrl/sign-no-smoking index 52f8df7..2f2c0fd 100644 --- a/data/mtrl/sign-no-smoking +++ b/data/mtrl/sign-no-smoking @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.250000 0.250000 0.250000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.25 0.25 0.25 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/sign-warning b/data/mtrl/sign-warning index 52f8df7..2f2c0fd 100644 --- a/data/mtrl/sign-warning +++ b/data/mtrl/sign-warning @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.250000 0.250000 0.250000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.25 0.25 0.25 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/space-mapped b/data/mtrl/space-mapped index 48c6e13..6aa20fc 100644 --- a/data/mtrl/space-mapped +++ b/data/mtrl/space-mapped @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -9 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +environment shadowed +45.0 diff --git a/data/mtrl/stripes b/data/mtrl/stripes index 7401926..e876576 100644 --- a/data/mtrl/stripes +++ b/data/mtrl/stripes @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/switch b/data/mtrl/switch index cf9568b..7ff7a5d 100644 --- a/data/mtrl/switch +++ b/data/mtrl/switch @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/teleporter b/data/mtrl/teleporter index cf9568b..7ff7a5d 100644 --- a/data/mtrl/teleporter +++ b/data/mtrl/teleporter @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp b/data/mtrl/thwomp index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp +++ b/data/mtrl/thwomp @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-fear b/data/mtrl/thwomp-fear index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-fear +++ b/data/mtrl/thwomp-fear @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-grim b/data/mtrl/thwomp-grim index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-grim +++ b/data/mtrl/thwomp-grim @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-gufaw b/data/mtrl/thwomp-gufaw index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-gufaw +++ b/data/mtrl/thwomp-gufaw @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-incred b/data/mtrl/thwomp-incred index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-incred +++ b/data/mtrl/thwomp-incred @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-mocking b/data/mtrl/thwomp-mocking index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-mocking +++ b/data/mtrl/thwomp-mocking @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-sullen b/data/mtrl/thwomp-sullen index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-sullen +++ b/data/mtrl/thwomp-sullen @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/thwomp-whistler b/data/mtrl/thwomp-whistler index cf9568b..7ff7a5d 100644 --- a/data/mtrl/thwomp-whistler +++ b/data/mtrl/thwomp-whistler @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/timer b/data/mtrl/timer index cf9568b..7ff7a5d 100644 --- a/data/mtrl/timer +++ b/data/mtrl/timer @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/transparent b/data/mtrl/transparent index d59fc9c..90a9b77 100644 --- a/data/mtrl/transparent +++ b/data/mtrl/transparent @@ -1,7 +1,7 @@ -0.500000 0.500000 0.500000 0.200000 -0.600000 0.600000 0.600000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +0.5 0.5 0.5 0.2 +0.6 0.6 0.6 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/transparent-dark b/data/mtrl/transparent-dark index bf42e0d..d84eeab 100644 --- a/data/mtrl/transparent-dark +++ b/data/mtrl/transparent-dark @@ -1,7 +1,7 @@ -0.100000 0.100000 0.100000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -2 -45.000000 +0.1 0.1 0.1 0.5 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed transparent +45.0 diff --git a/data/mtrl/turf-blue b/data/mtrl/turf-blue index 7401926..e876576 100644 --- a/data/mtrl/turf-blue +++ b/data/mtrl/turf-blue @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-brown b/data/mtrl/turf-brown index 7401926..e876576 100644 --- a/data/mtrl/turf-brown +++ b/data/mtrl/turf-brown @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-brown-small b/data/mtrl/turf-brown-small index 7401926..e876576 100644 --- a/data/mtrl/turf-brown-small +++ b/data/mtrl/turf-brown-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-disco b/data/mtrl/turf-disco index 7401926..e876576 100644 --- a/data/mtrl/turf-disco +++ b/data/mtrl/turf-disco @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green b/data/mtrl/turf-green index 7401926..e876576 100644 --- a/data/mtrl/turf-green +++ b/data/mtrl/turf-green @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-check b/data/mtrl/turf-green-check index 7401926..e876576 100644 --- a/data/mtrl/turf-green-check +++ b/data/mtrl/turf-green-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-check2 b/data/mtrl/turf-green-check2 index 7401926..e876576 100644 --- a/data/mtrl/turf-green-check2 +++ b/data/mtrl/turf-green-check2 @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-dark b/data/mtrl/turf-green-dark index 7401926..e876576 100644 --- a/data/mtrl/turf-green-dark +++ b/data/mtrl/turf-green-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-light b/data/mtrl/turf-green-light index 7401926..e876576 100644 --- a/data/mtrl/turf-green-light +++ b/data/mtrl/turf-green-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-offset b/data/mtrl/turf-green-offset index 7401926..e876576 100644 --- a/data/mtrl/turf-green-offset +++ b/data/mtrl/turf-green-offset @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-green-small b/data/mtrl/turf-green-small index 7401926..e876576 100644 --- a/data/mtrl/turf-green-small +++ b/data/mtrl/turf-green-small @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-grey b/data/mtrl/turf-grey index 7401926..e876576 100644 --- a/data/mtrl/turf-grey +++ b/data/mtrl/turf-grey @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-grey-dark b/data/mtrl/turf-grey-dark index 7401926..e876576 100644 --- a/data/mtrl/turf-grey-dark +++ b/data/mtrl/turf-grey-dark @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-orange b/data/mtrl/turf-orange index 7401926..e876576 100644 --- a/data/mtrl/turf-orange +++ b/data/mtrl/turf-orange @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-orange-big b/data/mtrl/turf-orange-big index 7401926..e876576 100644 --- a/data/mtrl/turf-orange-big +++ b/data/mtrl/turf-orange-big @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-purple b/data/mtrl/turf-purple index 7401926..e876576 100644 --- a/data/mtrl/turf-purple +++ b/data/mtrl/turf-purple @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-purple-check b/data/mtrl/turf-purple-check index 7401926..e876576 100644 --- a/data/mtrl/turf-purple-check +++ b/data/mtrl/turf-purple-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-red b/data/mtrl/turf-red index 7401926..e876576 100644 --- a/data/mtrl/turf-red +++ b/data/mtrl/turf-red @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/turf-shiny b/data/mtrl/turf-shiny index e19a0f1..03c1fc4 100644 --- a/data/mtrl/turf-shiny +++ b/data/mtrl/turf-shiny @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -4 -45.000000 +1.0 1.0 1.0 0.5 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +10.0 +reflective shadowed +45.0 diff --git a/data/mtrl/turf-shiny-light b/data/mtrl/turf-shiny-light index e19a0f1..03c1fc4 100644 --- a/data/mtrl/turf-shiny-light +++ b/data/mtrl/turf-shiny-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 0.500000 -0.200000 0.200000 0.200000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -4 -45.000000 +1.0 1.0 1.0 0.5 +0.2 0.2 0.2 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +10.0 +reflective shadowed +45.0 diff --git a/data/mtrl/white b/data/mtrl/white index d4e38c7..b44331d 100644 --- a/data/mtrl/white +++ b/data/mtrl/white @@ -1,7 +1,7 @@ -0.700000 0.700000 0.700000 1.000000 -0.200000 0.200000 0.200000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +0.7 0.7 0.7 1.0 +0.2 0.2 0.2 1.0 +1.0 1.0 1.0 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed +45.0 diff --git a/data/mtrl/wood b/data/mtrl/wood index 7401926..e876576 100644 --- a/data/mtrl/wood +++ b/data/mtrl/wood @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/wood-check b/data/mtrl/wood-check index 7401926..e876576 100644 --- a/data/mtrl/wood-check +++ b/data/mtrl/wood-check @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/wood-check-glossy b/data/mtrl/wood-check-glossy index 8d03692..d71ba70 100644 --- a/data/mtrl/wood-check-glossy +++ b/data/mtrl/wood-check-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed +45.0 diff --git a/data/mtrl/wood-glossy b/data/mtrl/wood-glossy index 8d03692..d71ba70 100644 --- a/data/mtrl/wood-glossy +++ b/data/mtrl/wood-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed +45.0 diff --git a/data/mtrl/wood-light b/data/mtrl/wood-light index 7401926..e876576 100644 --- a/data/mtrl/wood-light +++ b/data/mtrl/wood-light @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/wood-light-glossy b/data/mtrl/wood-light-glossy index 8d03692..d71ba70 100644 --- a/data/mtrl/wood-light-glossy +++ b/data/mtrl/wood-light-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed +45.0 diff --git a/data/mtrl/words b/data/mtrl/words index cf9568b..7ff7a5d 100644 --- a/data/mtrl/words +++ b/data/mtrl/words @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/mtrl/yellow b/data/mtrl/yellow index 7401926..e876576 100644 --- a/data/mtrl/yellow +++ b/data/mtrl/yellow @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/yellow-decal b/data/mtrl/yellow-decal index f66ac4b..8d2344b 100644 --- a/data/mtrl/yellow-decal +++ b/data/mtrl/yellow-decal @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -65 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed +45.0 diff --git a/data/mtrl/yellow-glossy b/data/mtrl/yellow-glossy index 8d03692..d71ba70 100644 --- a/data/mtrl/yellow-glossy +++ b/data/mtrl/yellow-glossy @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.300000 0.300000 0.300000 1.000000 -0.000000 0.000000 0.000000 1.000000 -10.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.3 0.3 0.3 1.0 +0.0 0.0 0.0 1.0 +10.0 +shadowed +45.0 diff --git a/data/mtrl/yellow-gradient b/data/mtrl/yellow-gradient index 7401926..e876576 100644 --- a/data/mtrl/yellow-gradient +++ b/data/mtrl/yellow-gradient @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/yellow-gradient-bright b/data/mtrl/yellow-gradient-bright index ebb2acb..cb4c5c3 100644 --- a/data/mtrl/yellow-gradient-bright +++ b/data/mtrl/yellow-gradient-bright @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +1.0 1.0 1.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/yellow-natural b/data/mtrl/yellow-natural index 7401926..e876576 100644 --- a/data/mtrl/yellow-natural +++ b/data/mtrl/yellow-natural @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -1 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +shadowed +45.0 diff --git a/data/mtrl/zip b/data/mtrl/zip index cf9568b..7ff7a5d 100644 --- a/data/mtrl/zip +++ b/data/mtrl/zip @@ -1,7 +1,7 @@ -1.000000 1.000000 1.000000 1.000000 -0.200000 0.200000 0.200000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 0.000000 0.000000 1.000000 -0.000000 -66 -45.000000 +1.0 1.0 1.0 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +decal shadowed transparent +45.0 diff --git a/data/png/stars1 b/data/png/stars1 new file mode 100644 index 0000000..6e85953 --- /dev/null +++ b/data/png/stars1 @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive +45.0 diff --git a/data/png/stars2 b/data/png/stars2 new file mode 100644 index 0000000..6e85953 --- /dev/null +++ b/data/png/stars2 @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive +45.0 diff --git a/data/png/stars3 b/data/png/stars3 new file mode 100644 index 0000000..6e85953 --- /dev/null +++ b/data/png/stars3 @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive +45.0 diff --git a/data/png/stars4 b/data/png/stars4 new file mode 100644 index 0000000..6e85953 --- /dev/null +++ b/data/png/stars4 @@ -0,0 +1,7 @@ +0.8 0.8 0.8 1.0 +0.2 0.2 0.2 1.0 +0.0 0.0 0.0 1.0 +0.0 0.0 0.0 1.0 +0.0 +additive +45.0 diff --git a/putt/game.c b/putt/game.c index 0e9356c..70ce43c 100644 --- a/putt/game.c +++ b/putt/game.c @@ -20,7 +20,6 @@ #include "vec3.h" #include "geom.h" #include "ball.h" -#include "back.h" #include "hole.h" #include "hud.h" #include "image.h" @@ -37,6 +36,8 @@ static struct s_full file; static int ball; +static int state; + static float view_a; /* Ideal view rotation about Y axis */ static float view_m; static float view_ry; /* Angular velocity about Y axis */ @@ -84,7 +85,7 @@ static void view_init(void) view_e[2][2] = 1.f; } -void game_init(const char *s) +int game_init(const char *s) { int i; @@ -94,7 +95,10 @@ void game_init(const char *s) idle_t = 1.0f; view_init(); - sol_load_full(&file, s, config_get_d(CONFIG_SHADOW)); + + if (!(state = sol_load_full(&file, s, config_get_d(CONFIG_SHADOW)))) + return 0; + sol_init_sim(&file.vary); for (i = 0; i < file.base.dc; i++) @@ -110,6 +114,7 @@ void game_init(const char *s) idle_t = 1.0f; } } + return 1; } void game_free(void) @@ -120,67 +125,29 @@ void game_free(void) /*---------------------------------------------------------------------------*/ -static void game_draw_vect_prim(const struct s_vary *fp, GLenum mode) -{ - float p[3]; - float x[3]; - float z[3]; - float r; - - v_cpy(p, fp->uv[ball].p); - v_cpy(x, view_e[0]); - v_cpy(z, view_e[2]); - - r = fp->uv[ball].r; - - glBegin(mode); - { - glColor4f(1.0f, 1.0f, 0.5f, 0.5f); - glVertex3f(p[0] - x[0] * r, - p[1] - x[1] * r, - p[2] - x[2] * r); - - glColor4f(1.0f, 0.0f, 0.0f, 0.5f); - glVertex3f(p[0] + z[0] * view_m, - p[1] + z[1] * view_m, - p[2] + z[2] * view_m); - - glColor4f(1.0f, 1.0f, 0.0f, 0.5f); - glVertex3f(p[0] + x[0] * r, - p[1] + x[1] * r, - p[2] + x[2] * r); - } - glEnd(); -} - -static void game_draw_vect(const struct s_vary *fp) +static void game_draw_vect(struct s_rend *rend, const struct s_vary *fp) { if (view_m > 0.f) { - glPushAttrib(GL_TEXTURE_BIT); - glPushAttrib(GL_POLYGON_BIT); - glPushAttrib(GL_LIGHTING_BIT); - glPushAttrib(GL_DEPTH_BUFFER_BIT); + glDisable(GL_LIGHTING); + glPushMatrix(); { - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - glDepthMask(GL_FALSE); - - glEnable(GL_DEPTH_TEST); - game_draw_vect_prim(fp, GL_TRIANGLES); - - glDisable(GL_DEPTH_TEST); - game_draw_vect_prim(fp, GL_LINE_STRIP); + glTranslatef(fp->uv[ball].p[0], + fp->uv[ball].p[1], + fp->uv[ball].p[2]); + glRotatef(view_a, 0.0f, 1.0f, 0.0f); + glScalef(fp->uv[ball].r, + fp->uv[ball].r * 0.1f, view_m); + + vect_draw(rend); } - glPopAttrib(); - glPopAttrib(); - glPopAttrib(); - glPopAttrib(); + glPopMatrix(); + glEnable(GL_LIGHTING); } } -static void game_draw_balls(const struct s_vary *fp, +static void game_draw_balls(struct s_rend *rend, + const struct s_vary *fp, const float *bill_M, float t) { static const GLfloat color[5][4] = { @@ -193,6 +160,8 @@ static void game_draw_balls(const struct s_vary *fp, int ui; + glEnable(GL_COLOR_MATERIAL); + for (ui = curr_party(); ui > 0; ui--) { if (ui == ball) @@ -212,10 +181,11 @@ static void game_draw_balls(const struct s_vary *fp, fp->uv[ui].r, fp->uv[ui].r); - glEnable(GL_COLOR_MATERIAL); - glColor4fv(color[ui]); - ball_draw(ball_M, pend_M, bill_M, t); - glDisable(GL_COLOR_MATERIAL); + glColor4f(color[ui][0], + color[ui][1], + color[ui][2], + color[ui][3]); + ball_draw(rend, ball_M, pend_M, bill_M, t); } glPopMatrix(); } @@ -234,15 +204,17 @@ static void game_draw_balls(const struct s_vary *fp, color[ui][1], color[ui][2], 0.5f); - mark_draw(); + mark_draw(rend); } glPopMatrix(); } } + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + glDisable(GL_COLOR_MATERIAL); } -static void game_draw_goals(const struct s_base *fp) +static void game_draw_goals(struct s_rend *rend, const struct s_base *fp) { int zi; @@ -253,14 +225,15 @@ static void game_draw_goals(const struct s_base *fp) glTranslatef(fp->zv[zi].p[0], fp->zv[zi].p[1], fp->zv[zi].p[2]); - flag_draw(); + flag_draw(rend); } glPopMatrix(); } } -static void game_draw_jumps(const struct s_base *fp) +static void game_draw_jumps(struct s_rend *rend, const struct s_base *fp) { + float t = 0.001f * SDL_GetTicks(); int ji; for (ji = 0; ji < fp->jc; ji++) @@ -272,13 +245,13 @@ static void game_draw_jumps(const struct s_base *fp) fp->jv[ji].p[2]); glScalef(fp->jv[ji].r, 1.f, fp->jv[ji].r); - jump_draw(!jump_e); + jump_draw(rend, t, !jump_e); } glPopMatrix(); } } -static void game_draw_swchs(const struct s_vary *fp) +static void game_draw_swchs(struct s_rend *rend, const struct s_vary *fp) { int xi; @@ -296,7 +269,7 @@ static void game_draw_swchs(const struct s_vary *fp) xp->base->p[2]); glScalef(xp->base->r, 1.f, xp->base->r); - swch_draw(xp->f, xp->e); + swch_draw(rend, xp->f, xp->e); } glPopMatrix(); } @@ -306,21 +279,23 @@ static void game_draw_swchs(const struct s_vary *fp) void game_draw(int pose, float t) { - static const float a[4] = { 0.2f, 0.2f, 0.2f, 1.0f }; - static const float s[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; - static const float e[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - static const float h[1] = { 0.0f }; - const float light_p[4] = { 8.f, 32.f, 8.f, 0.f }; - const struct s_draw *fp = &file.draw; + struct s_draw *fp = &file.draw; + struct s_rend rend = { NULL }; float fov = FOV; + if (!state) + return; + + fp->shadow_ui = ball; + + sol_draw_enable(&rend); + if (jump_b) fov *= 2.0f * fabsf(jump_dt - 0.5f); video_push_persp(fov, 0.1f, FAR_DIST); - glPushAttrib(GL_LIGHTING_BIT); glPushMatrix(); { float T[16], M[16], v[3], rx, ry; @@ -342,7 +317,7 @@ void game_draw(int pose, float t) glPushMatrix(); { glTranslatef(view_p[0], view_p[1], view_p[2]); - back_draw(0); + back_draw(&rend, 0); } glPopMatrix(); @@ -351,14 +326,7 @@ void game_draw(int pose, float t) /* Draw the floor. */ - sol_draw(fp, 0, 1); - - if (config_get_d(CONFIG_SHADOW) && !pose) - { - shad_draw_set(); - sol_shad(fp, ball); - shad_draw_clr(); - } + sol_draw(fp, &rend, 0, 1); /* Draw the game elements. */ @@ -367,33 +335,26 @@ void game_draw(int pose, float t) if (pose == 0) { - game_draw_balls(fp->vary, T, t); - game_draw_vect(fp->vary); + game_draw_balls(&rend, fp->vary, T, t); + game_draw_vect(&rend, fp->vary); } - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, a); - glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, s); - glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, e); - glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, h); - - game_draw_goals(fp->base); - glEnable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); glDepthMask(GL_FALSE); { - game_draw_jumps(fp->base); - game_draw_swchs(fp->vary); + game_draw_goals(&rend, fp->base); + game_draw_jumps(&rend, fp->base); + game_draw_swchs(&rend, fp->vary); } glDepthMask(GL_TRUE); - glEnable(GL_TEXTURE_2D); glEnable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); } glPopMatrix(); - glPopAttrib(); video_pop_matrix(); + + sol_draw_disable(&rend); } /*---------------------------------------------------------------------------*/ @@ -409,6 +370,9 @@ void game_update_view(float dt) float d[3]; float s = 2.f * dt; + if (!state) + return; + /* Center the view about the ball. */ v_cpy(view_c, file.vary.uv[ball].p); @@ -548,6 +512,9 @@ int game_step(const float g[3], float dt) float st = 0.f; int i, n = 1, m = 0; + if (!state) + return GAME_NONE; + s = (7.f * s + dt) / 8.f; t = s; @@ -644,6 +611,9 @@ void game_set_fly(float k) float p1[3] = { 0.f, 0.f, 0.f }; float v[3]; + if (!state) + return; + v_cpy(view_e[0], x); v_cpy(view_e[1], y); v_sub(view_e[2], fp->uv[ball].p, fp->base->zv[0].p); diff --git a/putt/game.h b/putt/game.h index 47bc793..eae1cf6 100644 --- a/putt/game.h +++ b/putt/game.h @@ -34,7 +34,7 @@ /*---------------------------------------------------------------------------*/ -void game_init(const char *); +int game_init(const char *); void game_free(void); void game_draw(int, float); diff --git a/putt/hole.c b/putt/hole.c index 50b8baa..2d1e889 100644 --- a/putt/hole.c +++ b/putt/hole.c @@ -22,7 +22,6 @@ #include "game.h" #include "geom.h" #include "hud.h" -#include "back.h" #include "audio.h" #include "config.h" #include "fs.h" @@ -219,7 +218,7 @@ const char *curr_par(void) /*---------------------------------------------------------------------------*/ -void hole_goto(int h, int p) +int hole_goto(int h, int p) { int i; @@ -228,20 +227,24 @@ void hole_goto(int h, int p) if (h >= 0) hole = h; if (p >= 0) party = p; - player = (hole - 1) % party + 1; - done = 0; - - back_init(hole_v[hole].back); - game_init(hole_v[hole].file); - - for (i = 1; i <= party; i++) + if (game_init(hole_v[hole].file)) { - game_get_pos(ball_p[i], ball_e[i]); - stat_v[i] = 0; + back_init(hole_v[hole].back); + + player = (hole - 1) % party + 1; + done = 0; + + for (i = 1; i <= party; i++) + { + game_get_pos(ball_p[i], ball_e[i]); + stat_v[i] = 0; + } + game_ball(player); + hole_song(); + return 1; } - game_ball(player); - hole_song(); } + return 0; } int hole_next(void) @@ -271,9 +274,8 @@ int hole_move(void) game_free(); back_free(); - hole_goto(hole, party); - - return 1; + if (hole_goto(hole, party)) + return 1; } return 0; } diff --git a/putt/hole.h b/putt/hole.h index 2063d53..0ef8b0c 100644 --- a/putt/hole.h +++ b/putt/hole.h @@ -25,7 +25,7 @@ int curr_count(void); const char *curr_scr(void); const char *curr_par(void); -void hole_goto(int, int); +int hole_goto(int, int); int hole_next(void); int hole_move(void); void hole_goal(void); diff --git a/putt/hud.c b/putt/hud.c index cd11f67..5cc8684 100644 --- a/putt/hud.c +++ b/putt/hud.c @@ -30,7 +30,7 @@ static int fps_id; void hud_init(void) { - static const float *color[5] = { + static const GLubyte *color[5] = { gui_wht, gui_red, gui_grn, diff --git a/putt/main.c b/putt/main.c index 3bf6aef..1c173da 100644 --- a/putt/main.c +++ b/putt/main.c @@ -41,19 +41,30 @@ const char ICON[] = "icon/neverputt.png"; /*---------------------------------------------------------------------------*/ -static int shot(void) +static int shot_pending; + +static void shot_prep(void) { - static char filename[MAXSTR]; + shot_pending = 1; +} - sprintf(filename, "Screenshots/screen%05d.png", config_screenshot()); - image_snap(filename); +static void shot_take(void) +{ + static char filename[MAXSTR]; - return 1; + if (shot_pending) + { + sprintf(filename, "Screenshots/screen%05d.png", config_screenshot()); + image_snap(filename); + shot_pending = 0; + } } + /*---------------------------------------------------------------------------*/ static void toggle_wire(void) { +#if !ENABLE_OPENGLES static int wire = 0; if (wire) @@ -70,6 +81,7 @@ static void toggle_wire(void) glDisable(GL_LIGHTING); wire = 1; } +#endif } /*---------------------------------------------------------------------------*/ @@ -119,7 +131,7 @@ static int loop(void) else switch (c) { - case SDLK_F10: d = shot(); break; + case SDLK_F10: shot_prep(); break; case SDLK_F9: config_tgl_d(CONFIG_FPS); break; case SDLK_F8: config_tgl_d(CONFIG_NICE); break; case SDLK_F7: toggle_wire(); break; @@ -247,6 +259,7 @@ int main(int argc, char *argv[]) { st_timer((t1 - t0) / 1000.f); st_paint(0.001f * t1); + shot_take(); SDL_GL_SwapBuffers(); t0 = t1; diff --git a/putt/st_all.c b/putt/st_all.c index bc6c2b1..9a29489 100644 --- a/putt/st_all.c +++ b/putt/st_all.c @@ -15,7 +15,6 @@ #include #include "hud.h" -#include "back.h" #include "geom.h" #include "gui.h" #include "vec3.h" @@ -50,8 +49,8 @@ static char *number(int i) } static int score_card(const char *title, - const float *c0, - const float *c1) + const GLubyte *c0, + const GLubyte *c1) { int id, jd, kd, ld; @@ -454,23 +453,23 @@ static int party_action(int i) { case PARTY_1: audio_play(AUD_MENU, 1.f); - hole_goto(1, 1); - goto_state(&st_next); + if (hole_goto(1, 1)) + goto_state(&st_next); break; case PARTY_2: audio_play(AUD_MENU, 1.f); - hole_goto(1, 2); - goto_state(&st_next); + if (hole_goto(1, 2)) + goto_state(&st_next); break; case PARTY_3: audio_play(AUD_MENU, 1.f); - hole_goto(1, 3); - goto_state(&st_next); + if (hole_goto(1, 3)) + goto_state(&st_next); break; case PARTY_4: audio_play(AUD_MENU, 1.f); - hole_goto(1, 4); - goto_state(&st_next); + if (hole_goto(1, 4)) + goto_state(&st_next); break; case PARTY_B: audio_play(AUD_MENU, 1.f); @@ -778,9 +777,8 @@ static int next_buttn(int b, int d) { if (config_tst_d(CONFIG_JOYSTICK_BUTTON_A, b)) { - if (num > 0) + if (num > 0 && hole_goto(num, -1)) { - hole_goto(num, -1); num = 0; return goto_state(&st_next); } diff --git a/putt/st_conf.c b/putt/st_conf.c index b3d11c3..c1f37b4 100644 --- a/putt/st_conf.c +++ b/putt/st_conf.c @@ -14,7 +14,6 @@ #include "gui.h" #include "hud.h" -#include "back.h" #include "geom.h" #include "ball.h" #include "part.h" @@ -255,7 +254,7 @@ static void conf_paint(int id, float st) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { - back_draw(0); + back_draw_easy(); } video_pop_matrix(); gui_paint(id); @@ -307,10 +306,7 @@ static int conf_buttn(int b, int d) static int null_enter(struct state *st, struct state *prev) { gui_free(); - swch_free(); - jump_free(); - flag_free(); - mark_free(); + geom_free(); ball_free(); shad_free(); @@ -321,10 +317,7 @@ static void null_leave(struct state *st, struct state *next, int id) { shad_init(); ball_init(); - mark_init(); - flag_init(); - jump_init(); - swch_init(); + geom_init(); gui_init(); } diff --git a/share/audio.c b/share/audio.c index 2eeebe7..b94a481 100644 --- a/share/audio.c +++ b/share/audio.c @@ -14,6 +14,7 @@ #include +#define OV_EXCLUDE_STATIC_CALLBACKS #include #include diff --git a/share/back.c b/share/back.c deleted file mode 100644 index 37a0ec9..0000000 --- a/share/back.c +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2003 Robert Kooima - * - * NEVERBALL is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published - * by the Free Software Foundation; either version 2 of the License, - * or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - */ - -#include -#include -#include - -#include "glext.h" -#include "vec3.h" -#include "back.h" -#include "image.h" - -/*---------------------------------------------------------------------------*/ - -#define PI 3.1415926535897932 - -static GLuint back_list; -static GLuint back_text; - -/*---------------------------------------------------------------------------*/ - -void back_init(const char *s) -{ - int i, slices = 32; - int j, stacks = 16; - - back_free(); - back_text = make_image_from_file(s); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - - back_list = glGenLists(1); - - glNewList(back_list, GL_COMPILE); - { - glBindTexture(GL_TEXTURE_2D, back_text); - - glColor3f(1.0f, 1.0f, 1.0f); - - for (i = 0; i < stacks; i++) - { - float k0 = (float) i / stacks; - float k1 = (float) (i + 1) / stacks; - - float s0 = fsinf(V_PI * (k0 - 0.5)); - float c0 = fcosf(V_PI * (k0 - 0.5)); - float s1 = fsinf(V_PI * (k1 - 0.5)); - float c1 = fcosf(V_PI * (k1 - 0.5)); - - glBegin(GL_QUAD_STRIP); - { - for (j = 0; j <= slices; j++) - { - float k = (float) j / slices; - float s = fsinf(V_PI * k * 2.0); - float c = fcosf(V_PI * k * 2.0); - - glTexCoord2f(k, 1.0f - k1); - glVertex3f(s * c1, c * c1, s1); - - glTexCoord2f(k, 1.0f - k0); - glVertex3f(s * c0, c * c0, s0); - } - } - glEnd(); - } - } - glEndList(); -} - -void back_free(void) -{ - if (glIsList(back_list)) - glDeleteLists(back_list, 1); - - if (glIsTexture(back_text)) - glDeleteTextures(1, &back_text); - - back_list = 0; - back_text = 0; -} - -void back_draw(float t) -{ - glPushMatrix(); - { - GLfloat dx = 60.f * fsinf(t / 10.f) + 90.f; - GLfloat dz = 180.f * fsinf(t / 12.f); - - glDisable(GL_LIGHTING); - glDepthMask(GL_FALSE); - { - glScalef(BACK_DIST, BACK_DIST, BACK_DIST); - glRotatef(dz, 0.f, 0.f, 1.f); - glRotatef(dx, 1.f, 0.f, 0.f); - - glCallList(back_list); - } - glDepthMask(GL_TRUE); - glEnable(GL_LIGHTING); - } - glPopMatrix(); -} - -/*---------------------------------------------------------------------------*/ diff --git a/share/back.h b/share/back.h deleted file mode 100644 index 3393a61..0000000 --- a/share/back.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef BACK_H -#define BACK_H - -/*---------------------------------------------------------------------------*/ - -#define BACK_DIST 256.0f -#define FAR_DIST 512.0f - -void back_init(const char *); -void back_free(void); -void back_draw(float); - -/*---------------------------------------------------------------------------*/ - -#endif diff --git a/share/ball.c b/share/ball.c index b70ce25..b564e82 100644 --- a/share/ball.c +++ b/share/ball.c @@ -119,7 +119,8 @@ void ball_free(void) /*---------------------------------------------------------------------------*/ -static void ball_draw_solid(const float *ball_M, +static void ball_draw_solid(struct s_rend *rend, + const float *ball_M, const float *ball_bill_M, float t) { if (has_solid) @@ -147,7 +148,7 @@ static void ball_draw_solid(const float *ball_M, if (mask == 0) glDepthMask(GL_FALSE); glDisable(GL_LIGHTING); { - sol_bill(&solid.draw, ball_bill_M, t); + sol_bill(&solid.draw, rend, ball_bill_M, t); } glEnable(GL_LIGHTING); if (mask == 0) glDepthMask(GL_TRUE); @@ -156,7 +157,7 @@ static void ball_draw_solid(const float *ball_M, /* Draw the solid opaque and transparent geometry. */ - sol_draw(&solid.draw, mask, test); + sol_draw(&solid.draw, rend, mask, test); } glPopMatrix(); @@ -165,7 +166,8 @@ static void ball_draw_solid(const float *ball_M, } } -static void ball_draw_inner(const float *pend_M, +static void ball_draw_inner(struct s_rend *rend, + const float *pend_M, const float *bill_M, const float *pend_bill_M, float t) { @@ -191,7 +193,7 @@ static void ball_draw_inner(const float *pend_M, /* Draw the inner opaque and transparent geometry. */ - sol_draw(&inner.draw, mask, test); + sol_draw(&inner.draw, rend, mask, test); /* Draw the inner billboard geometry. */ @@ -202,9 +204,9 @@ static void ball_draw_inner(const float *pend_M, glDisable(GL_LIGHTING); { if (pend) - sol_bill(&inner.draw, pend_bill_M, t); + sol_bill(&inner.draw, rend, pend_bill_M, t); else - sol_bill(&inner.draw, bill_M, t); + sol_bill(&inner.draw, rend, bill_M, t); } glEnable(GL_LIGHTING); @@ -220,7 +222,8 @@ static void ball_draw_inner(const float *pend_M, } } -static void ball_draw_outer(const float *pend_M, +static void ball_draw_outer(struct s_rend *rend, + const float *pend_M, const float *bill_M, const float *pend_bill_M, float t) { @@ -236,7 +239,7 @@ static void ball_draw_outer(const float *pend_M, glAlphaFunc(GL_GEQUAL, outer_alpha); } - /* Apply the pendulum rotation. */ + /* Apply the pendulum rotation. */ if (pend) { @@ -246,7 +249,7 @@ static void ball_draw_outer(const float *pend_M, /* Draw the outer opaque and transparent geometry. */ - sol_draw(&outer.draw, mask, test); + sol_draw(&outer.draw, rend, mask, test); /* Draw the outer billboard geometry. */ @@ -257,9 +260,9 @@ static void ball_draw_outer(const float *pend_M, glDisable(GL_LIGHTING); { if (pend) - sol_bill(&outer.draw, pend_bill_M, t); + sol_bill(&outer.draw, rend, pend_bill_M, t); else - sol_bill(&outer.draw, bill_M, t); + sol_bill(&outer.draw, rend, bill_M, t); } glEnable(GL_LIGHTING); if (mask == 0) glDepthMask(GL_TRUE); @@ -276,7 +279,8 @@ static void ball_draw_outer(const float *pend_M, /*---------------------------------------------------------------------------*/ -static void ball_pass_inner(const float *ball_M, +static void ball_pass_inner(struct s_rend *rend, + const float *ball_M, const float *pend_M, const float *bill_M, const float *ball_bill_M, @@ -287,11 +291,11 @@ static void ball_pass_inner(const float *ball_M, if (inner_flags & F_DRAWCLIP) { glEnable(GL_CLIP_PLANE1); - ball_draw_inner( pend_M, bill_M, pend_bill_M, t); + ball_draw_inner(rend, pend_M, bill_M, pend_bill_M, t); glDisable(GL_CLIP_PLANE1); glEnable(GL_CLIP_PLANE2); - ball_draw_inner( pend_M, bill_M, pend_bill_M, t); + ball_draw_inner(rend, pend_M, bill_M, pend_bill_M, t); glDisable(GL_CLIP_PLANE2); } @@ -300,20 +304,21 @@ static void ball_pass_inner(const float *ball_M, else if (inner_flags & F_DRAWBACK) { glCullFace(GL_FRONT); - ball_draw_inner( pend_M, bill_M, pend_bill_M, t); + ball_draw_inner(rend, pend_M, bill_M, pend_bill_M, t); glCullFace(GL_BACK); - ball_draw_inner( pend_M, bill_M, pend_bill_M, t); + ball_draw_inner(rend, pend_M, bill_M, pend_bill_M, t); } /* Draw the inner ball normally. */ else { - ball_draw_inner( pend_M, bill_M, pend_bill_M, t); + ball_draw_inner(rend, pend_M, bill_M, pend_bill_M, t); } } -static void ball_pass_solid(const float *ball_M, +static void ball_pass_solid(struct s_rend *rend, + const float *ball_M, const float *pend_M, const float *bill_M, const float *ball_bill_M, @@ -324,13 +329,13 @@ static void ball_pass_solid(const float *ball_M, if (solid_flags & F_DRAWCLIP) { glEnable(GL_CLIP_PLANE1); - ball_draw_solid(ball_M, ball_bill_M, t); + ball_draw_solid(rend, ball_M, ball_bill_M, t); glDisable(GL_CLIP_PLANE1); - ball_pass_inner(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_pass_inner(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); glEnable(GL_CLIP_PLANE2); - ball_draw_solid(ball_M, ball_bill_M, t); + ball_draw_solid(rend, ball_M, ball_bill_M, t); glDisable(GL_CLIP_PLANE2); } @@ -339,23 +344,24 @@ static void ball_pass_solid(const float *ball_M, else if (solid_flags & F_DRAWBACK) { glCullFace(GL_FRONT); - ball_draw_solid(ball_M, ball_bill_M, t); + ball_draw_solid(rend, ball_M, ball_bill_M, t); glCullFace(GL_BACK); - ball_pass_inner(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); - ball_draw_solid(ball_M, ball_bill_M, t); + ball_pass_inner(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_draw_solid(rend, ball_M, ball_bill_M, t); } /* Draw the solid ball after the inner ball. */ else { - ball_pass_inner(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); - ball_draw_solid(ball_M, ball_bill_M, t); + ball_pass_inner(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_draw_solid(rend, ball_M, ball_bill_M, t); } } -static void ball_pass_outer(const float *ball_M, +static void ball_pass_outer(struct s_rend *rend, + const float *ball_M, const float *pend_M, const float *bill_M, const float *ball_bill_M, @@ -366,13 +372,13 @@ static void ball_pass_outer(const float *ball_M, if (outer_flags & F_DRAWCLIP) { glEnable(GL_CLIP_PLANE1); - ball_draw_outer( pend_M, bill_M, pend_bill_M, t); + ball_draw_outer(rend, pend_M, bill_M, pend_bill_M, t); glDisable(GL_CLIP_PLANE1); - ball_pass_solid(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_pass_solid(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); glEnable(GL_CLIP_PLANE2); - ball_draw_outer( pend_M, bill_M, pend_bill_M, t); + ball_draw_outer(rend, pend_M, bill_M, pend_bill_M, t); glDisable(GL_CLIP_PLANE2); } @@ -381,25 +387,26 @@ static void ball_pass_outer(const float *ball_M, else if (outer_flags & F_DRAWBACK) { glCullFace(GL_FRONT); - ball_draw_outer( pend_M, bill_M, pend_bill_M, t); + ball_draw_outer(rend, pend_M, bill_M, pend_bill_M, t); glCullFace(GL_BACK); - ball_pass_solid(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); - ball_draw_outer( pend_M, bill_M, pend_bill_M, t); + ball_pass_solid(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_draw_outer(rend, pend_M, bill_M, pend_bill_M, t); } /* Draw the outer ball after the solid ball. */ else { - ball_pass_solid(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); - ball_draw_outer( pend_M, bill_M, pend_bill_M, t); + ball_pass_solid(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_draw_outer(rend, pend_M, bill_M, pend_bill_M, t); } } /*---------------------------------------------------------------------------*/ -void ball_draw(const float *ball_M, +void ball_draw(struct s_rend *rend, + const float *ball_M, const float *pend_M, const float *bill_M, float t) { @@ -416,7 +423,7 @@ void ball_draw(const float *ball_M, /* Go to GREAT pains to ensure all layers are drawn back-to-front. */ - ball_pass_outer(ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); + ball_pass_outer(rend, ball_M, pend_M, bill_M, ball_bill_M, pend_bill_M, t); } /*---------------------------------------------------------------------------*/ diff --git a/share/ball.h b/share/ball.h index d3a51cc..ac44494 100644 --- a/share/ball.h +++ b/share/ball.h @@ -15,13 +15,17 @@ #ifndef BALL_H #define BALL_H +#include "solid_draw.h" + /*---------------------------------------------------------------------------*/ #define BALL_FUDGE 0.001f void ball_init(void); void ball_free(void); -void ball_draw(const float *, + +void ball_draw(struct s_rend *, + const float *, const float *, const float *, float); diff --git a/share/fs_ov.h b/share/fs_ov.h index db4fcb7..b26a0c1 100644 --- a/share/fs_ov.h +++ b/share/fs_ov.h @@ -1,6 +1,7 @@ #ifndef FS_OV #define FS_OV +#define OV_EXCLUDE_STATIC_CALLBACKS #include size_t fs_ov_read(void *ptr, size_t size, size_t nmemb, void *datasource); diff --git a/share/geom.c b/share/geom.c index 5d8ab3e..0e5a20d 100644 --- a/share/geom.c +++ b/share/geom.c @@ -25,332 +25,406 @@ #include "config.h" #include "video.h" -#define PI 3.1415926535897932 +#include "solid_draw.h" /*---------------------------------------------------------------------------*/ -static GLuint mark_list; +static const struct tex_env *curr_tex_env; -void mark_init(void) -{ - int i, slices = 32; +static void tex_env_conf_default(int, int); +static void tex_env_conf_shadow(int, int); + +const struct tex_env tex_env_default = { + tex_env_conf_default, + 1, + { + { GL_TEXTURE0, TEX_STAGE_TEXTURE } + } +}; + +const struct tex_env tex_env_shadow = { + tex_env_conf_shadow, + 2, + { + { GL_TEXTURE0, TEX_STAGE_SHADOW }, + { GL_TEXTURE1, TEX_STAGE_TEXTURE } + } +}; - mark_list = glGenLists(1); +const struct tex_env tex_env_shadow_clip = { + tex_env_conf_shadow, + 3, + { + { GL_TEXTURE0, TEX_STAGE_SHADOW }, + { GL_TEXTURE1, TEX_STAGE_CLIP }, + { GL_TEXTURE2, TEX_STAGE_TEXTURE } + } +}; - glNewList(mark_list, GL_COMPILE); +static void tex_env_conf_default(int stage, int enable) +{ + switch (stage) { - glBegin(GL_TRIANGLE_FAN); + case TEX_STAGE_TEXTURE: + if (enable) { - glNormal3f(0.f, 1.f, 0.f); + glEnable(GL_TEXTURE_2D); - for (i = 0; i < slices; i++) - { - float x = fcosf(-2.f * PI * i / slices); - float y = fsinf(-2.f * PI * i / slices); + /* Modulate is the default mode. */ - glVertex3f(x, 0, y); - } + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + } + else + { + glDisable(GL_TEXTURE_2D); } - glEnd(); + break; } - glEndList(); } -void mark_draw(void) +static void tex_env_conf_shadow(int stage, int enable) { - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_TEXTURE_2D); - glDepthMask(GL_FALSE); + switch (stage) { - glCallList(mark_list); - } - glDepthMask(GL_TRUE); - glEnable(GL_TEXTURE_2D); - glDisable(GL_COLOR_MATERIAL); -} + case TEX_STAGE_SHADOW: + if (enable) + { + glDisable(GL_TEXTURE_2D); -void mark_free(void) -{ - if (glIsList(mark_list)) - glDeleteLists(mark_list, 1); + /* Modulate primary color and shadow alpha. */ - mark_list = 0; -} + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); -/*---------------------------------------------------------------------------*/ + glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_ONE_MINUS_SRC_ALPHA); -static GLuint goal_list; + /* Copy incoming alpha. */ -void goal_init(void) -{ - int i, n = 32; + glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); - goal_list = glGenLists(1); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + } + else + { + glDisable(GL_TEXTURE_2D); + } + break; - glNewList(goal_list, GL_COMPILE); - { - glBegin(GL_QUAD_STRIP); + case TEX_STAGE_CLIP: + if (enable) { - for (i = 0; i <= n; i++) - { - float x = fcosf(2.f * PI * i / n); - float y = fsinf(2.f * PI * i / n); + glDisable(GL_TEXTURE_2D); - glColor4f(1.0f, 1.0f, 0.0f, 0.5f); - glVertex3f(x, 0.0f, y); + /* Interpolate shadowed and non-shadowed primary color. */ - glColor4f(1.0f, 1.0f, 0.0f, 0.0f); - glVertex3f(x, GOAL_HEIGHT, y); - } + glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + + glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_TEXTURE); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA); + + /* Copy incoming alpha. */ + + glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); + glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS); + glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); + + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + } + else + { + glDisable(GL_TEXTURE_2D); } - glEnd(); + break; + + case TEX_STAGE_TEXTURE: + tex_env_conf_default(TEX_STAGE_TEXTURE, enable); + break; } - glEndList(); } -void goal_free(void) +static void tex_env_conf(const struct tex_env *env, int enable) { - if (glIsList(goal_list)) - glDeleteLists(goal_list, 1); + size_t i; - goal_list = 0; + for (i = 0; i < env->count; i++) + { + const struct tex_stage *st = &env->stages[i]; + glActiveTexture_(st->unit); + glClientActiveTexture_(st->unit); + env->conf(st->stage, enable); + } + + /* Last stage remains selected. */ } -void goal_draw(void) +/* + * Set up current texture pipeline. + */ +void tex_env_active(const struct tex_env *env) { - glCallList(goal_list); -} + if (curr_tex_env == env) + return; -/*---------------------------------------------------------------------------*/ + if (curr_tex_env) + { + tex_env_conf(curr_tex_env, 0); + curr_tex_env = NULL; + } -static GLuint jump_list; + tex_env_conf(env, 1); + curr_tex_env = env; +} -void jump_init(void) +/* + * Select stage of the current texture pipeline. + */ +int tex_env_stage(int stage) { - int k, i, n = 32; - - jump_list = glGenLists(2); + size_t i; - for (k = 0; k < 2; k++) + if (curr_tex_env) { - glNewList(jump_list + k, GL_COMPILE); + for (i = 0; i < curr_tex_env->count; i++) { - glBegin(GL_QUAD_STRIP); - { - for (i = 0; i <= n; i++) - { - float x = fcosf(2.f * PI * i / n); - float y = fsinf(2.f * PI * i / n); - - glColor4f(0.75f, 0.5f, 1.0f, (k == 0 ? 0.5f : 0.8f)); - glVertex3f(x, 0.0f, y); + const struct tex_stage *st = &curr_tex_env->stages[i]; - glColor4f(1.0f, 1.0f, 1.0f, 0.0f); - glVertex3f(x, JUMP_HEIGHT, y); - } + if (st->stage == stage) + { + glActiveTexture_(st->unit); + glClientActiveTexture_(st->unit); + return 1; } - glEnd(); } - glEndList(); } + return 0; } -void jump_free(void) +/*---------------------------------------------------------------------------*/ + +static struct s_full beam; +static struct s_full jump; +static struct s_full goal; +static struct s_full flag; +static struct s_full mark; +static struct s_full vect; +static struct s_full back; + +static int back_state = 0; + +/*---------------------------------------------------------------------------*/ + +void geom_init(void) { - glDeleteLists(jump_list, 2); - jump_list = 0; + sol_load_full(&beam, "geom/beam/beam.sol", 0); + sol_load_full(&jump, "geom/jump/jump.sol", 0); + sol_load_full(&goal, "geom/goal/goal.sol", 0); + sol_load_full(&flag, "geom/flag/flag.sol", 0); + sol_load_full(&mark, "geom/mark/mark.sol", 0); + sol_load_full(&vect, "geom/vect/vect.sol", 0); } -void jump_draw(int highlight) +void geom_free(void) { - glCallList(jump_list + highlight); + sol_free_full(&vect); + sol_free_full(&mark); + sol_free_full(&flag); + sol_free_full(&goal); + sol_free_full(&jump); + sol_free_full(&beam); } /*---------------------------------------------------------------------------*/ -static GLuint swch_list; - -static GLfloat swch_colors[8][4] = { - { 1.0f, 0.0f, 0.0f, 0.5f }, /* red out */ - { 1.0f, 0.0f, 0.0f, 0.0f }, - { 1.0f, 0.0f, 0.0f, 0.8f }, /* red in */ - { 1.0f, 0.0f, 0.0f, 0.0f }, - { 0.0f, 1.0f, 0.0f, 0.5f }, /* green out */ - { 0.0f, 1.0f, 0.0f, 0.0f }, - { 0.0f, 1.0f, 0.0f, 0.8f }, /* green in */ - { 0.0f, 1.0f, 0.0f, 0.0f }}; - -void swch_init(void) +void back_init(const char *name) { - int k, i, n = 32; + if (back_state) + back_free(); - swch_list = glGenLists(4); + /* Load the background SOL and modify its material in-place to use the */ + /* named gradient texture. */ - /* Create the display lists. */ + sol_load_full(&back, "geom/back/back.sol", 0); + back.draw.mv[0].o = make_image_from_file(name); - for (k = 0; k < 4; k++) - { - glNewList(swch_list + k, GL_COMPILE); - { - glBegin(GL_QUAD_STRIP); - { - for (i = 0; i <= n; i++) - { - float x = fcosf(2.f * PI * i / n); - float y = fsinf(2.f * PI * i / n); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + + back_state = 1; +} - glColor4fv(swch_colors[2 * k + 0]); - glVertex3f(x, 0.0f, y); +void back_free(void) +{ + if (back_state) + sol_free_full(&back); - glColor4fv(swch_colors[2 * k + 1]); - glVertex3f(x, SWCH_HEIGHT, y); - } - } - glEnd(); - } - glEndList(); - } + back_state = 0; } -void swch_free(void) +/*---------------------------------------------------------------------------*/ + +static void jump_part_draw(struct s_rend *rend, GLfloat s, GLfloat a) { - if (glIsList(swch_list)) - glDeleteLists(swch_list, 4); + glMatrixMode(GL_TEXTURE); + glTranslatef(s, 0.0f, 0.0f); + glMatrixMode(GL_MODELVIEW); - swch_list = 0; + glRotatef(a, 0.0f, 1.0f, 0.0f); + sol_draw(&jump.draw, rend, 1, 1); + glScalef(0.9f, 0.9f, 0.9f); } -void swch_draw(int b, int e) +static void goal_part_draw(struct s_rend *rend, GLfloat s) { - glCallList(swch_list + b * 2 + e); + glMatrixMode(GL_TEXTURE); + glTranslatef(0.0f, -s, 0.0f); + glMatrixMode(GL_MODELVIEW); + + sol_draw(&goal.draw, rend, 1, 1); + glScalef(0.8f, 1.1f, 0.8f); } /*---------------------------------------------------------------------------*/ -static GLuint flag_list; - -void flag_init(void) +void goal_draw(struct s_rend *rend, float t) { - int i, n = 8; - - flag_list = glGenLists(1); - - glNewList(flag_list, GL_COMPILE); + glPushMatrix(); { - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - glDisable(GL_TEXTURE_2D); - { - glBegin(GL_TRIANGLES); - { - glColor3f(1.0f, 0.0f, 0.0f); + glScalef(1.0f, 3.0f, 1.0f); + glColor4f(1.0f, 1.0f, 0.0f, 0.5f); - glVertex3f( 0.0f, GOAL_HEIGHT, 0.0f); - glVertex3f(GOAL_HEIGHT * 0.2f, GOAL_HEIGHT * 0.9f, 0.0f); - glVertex3f( 0.0f, GOAL_HEIGHT * 0.8f, 0.0f); + sol_draw(&beam.draw, rend, 1, 1); - glVertex3f( 0.0f, GOAL_HEIGHT, 0.0f); - glVertex3f( 0.0f, GOAL_HEIGHT * 0.8f, 0.0f); - glVertex3f(GOAL_HEIGHT * 0.2f, GOAL_HEIGHT * 0.9f, 0.0f); - } - glEnd(); + goal_part_draw(rend, t * 0.10f); + goal_part_draw(rend, t * 0.10f); + goal_part_draw(rend, t * 0.10f); + goal_part_draw(rend, t * 0.10f); - glBegin(GL_QUAD_STRIP); - { - for (i = 0; i <= n; i++) - { - float x = fcosf(2.f * PI * i / n) * 0.01f; - float y = fsinf(2.f * PI * i / n) * 0.01f; - - glColor3f(1.0f, 1.0f, 1.0f); - glVertex3f(x, 0.0f, y); - glVertex3f(x, GOAL_HEIGHT, y); - } - } - glEnd(); - } - glEnable(GL_TEXTURE_2D); - glEnable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } - glEndList(); + glPopMatrix(); } -void flag_free(void) +void jump_draw(struct s_rend *rend, float t, int h) { - if (glIsList(flag_list)) - glDeleteLists(flag_list, 1); + static GLfloat c[4][4] = { + { 0.75f, 0.5f, 1.0f, 0.5f }, + { 0.75f, 0.5f, 1.0f, 0.8f }, + }; - flag_list = 0; -} + glPushMatrix(); + { + glColor4f(c[h][0], c[h][1], c[h][2], c[h][3]); -void flag_draw(void) -{ - glCallList(flag_list); -} + glScalef(1.0f, 2.0f, 1.0f); -/*---------------------------------------------------------------------------*/ + sol_draw(&beam.draw, rend, 1, 1); -static GLuint clip_text; + jump_part_draw(rend, t * 0.15f, t * 360.0f); + jump_part_draw(rend, t * 0.20f, t * 360.0f); + jump_part_draw(rend, t * 0.25f, t * 360.0f); -static GLubyte clip_data[] = { 0xff, 0xff, 0x0, 0x0 }; + glMatrixMode(GL_TEXTURE); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); -void clip_init(void) -{ - if (!glActiveTextureARB_) - return; + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + } + glPopMatrix(); +} - glActiveTextureARB_(GL_TEXTURE1_ARB); - { - glGenTextures(1, &clip_text); - glBindTexture(GL_TEXTURE_1D, clip_text); +void swch_draw(struct s_rend *rend, int b, int e) +{ + static GLfloat c[4][4] = { + { 1.0f, 0.0f, 0.0f, 0.5f }, /* red out */ + { 1.0f, 0.0f, 0.0f, 0.8f }, /* red in */ + { 0.0f, 1.0f, 0.0f, 0.5f }, /* green out */ + { 0.0f, 1.0f, 0.0f, 0.8f }, /* green in */ + }; - glTexImage1D(GL_TEXTURE_1D, 0, - GL_LUMINANCE_ALPHA, 2, 0, - GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, clip_data); + const int h = 2 * b + e; - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glPushMatrix(); + { + glScalef(1.0f, 2.0f, 1.0f); - glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glColor4f(c[h][0], c[h][1], c[h][2], c[h][3]); + sol_draw(&beam.draw, rend, 1, 1); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); } - glActiveTextureARB_(GL_TEXTURE0_ARB); + glPopMatrix(); } -void clip_free(void) +void flag_draw(struct s_rend *rend) { - if (glIsTexture(clip_text)) - glDeleteTextures(1, &clip_text); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + sol_draw(&flag.draw, rend, 1, 1); } -void clip_draw_set(void) +void mark_draw(struct s_rend *rend) { - if (!glActiveTextureARB_) - return; + sol_draw(&mark.draw, rend, 1, 1); +} + +void vect_draw(struct s_rend *rend) +{ + sol_draw(&vect.draw, rend, 0, 1); + sol_draw(&vect.draw, rend, 0, 0); +} - glActiveTextureARB_(GL_TEXTURE1_ARB); +void back_draw(struct s_rend *rend, float t) +{ + glPushMatrix(); { - glBindTexture(GL_TEXTURE_1D, clip_text); + GLfloat dx = 60.0f * fsinf(t / 10.0f); + GLfloat dz = 180.0f * fsinf(t / 12.0f); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + glDisable(GL_LIGHTING); + glDepthMask(GL_FALSE); + { + glScalef(-BACK_DIST, BACK_DIST, -BACK_DIST); + if (t) glRotatef(dz, 0.0f, 0.0f, 1.0f); + if (t) glRotatef(dx, 1.0f, 0.0f, 0.0f); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_1D); + sol_draw(&back.draw, rend, 1, 1); + } + glDepthMask(GL_TRUE); + glEnable(GL_LIGHTING); + glEnable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); } - glActiveTextureARB_(GL_TEXTURE0_ARB); + glPopMatrix(); } -void clip_draw_clr(void) +void back_draw_easy(void) { - if (!glActiveTextureARB_) - return; + struct s_rend rend = { NULL }; - glActiveTextureARB_(GL_TEXTURE1_ARB); - { - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_1D); - } - glActiveTextureARB_(GL_TEXTURE0_ARB); + sol_draw_enable(&rend); + back_draw(&rend, 0.0f); + sol_draw_disable(&rend); } /*---------------------------------------------------------------------------*/ @@ -369,6 +443,9 @@ void clip_draw_clr(void) */ static GLuint shad_text; +static GLuint clip_text; + +static GLubyte clip_data[] = { 0xff, 0xff, 0x0, 0x0 }; void shad_init(void) { @@ -376,83 +453,63 @@ void shad_init(void) if (config_get_d(CONFIG_SHADOW) == 2) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } - clip_init(); + /* Create the clip texture. */ + + glGenTextures(1, &clip_text); + glBindTexture(GL_TEXTURE_2D, clip_text); + + glTexImage2D(GL_TEXTURE_2D, 0, + GL_LUMINANCE_ALPHA, 1, 2, 0, + GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, clip_data); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } void shad_free(void) { - if (glIsTexture(shad_text)) - glDeleteTextures(1, &shad_text); - - clip_free(); + glDeleteTextures(1, &shad_text); + glDeleteTextures(1, &clip_text); } void shad_draw_set(void) { - glBindTexture(GL_TEXTURE_2D, shad_text); - - glMatrixMode(GL_TEXTURE); + if (tex_env_stage(TEX_STAGE_SHADOW)) { - glLoadIdentity(); - } - glMatrixMode(GL_MODELVIEW); - - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, shad_text); - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); + if (tex_env_stage(TEX_STAGE_CLIP)) + { + glBindTexture(GL_TEXTURE_2D, clip_text); + glEnable(GL_TEXTURE_2D); + } - clip_draw_set(); + tex_env_stage(TEX_STAGE_TEXTURE); + } } void shad_draw_clr(void) { - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); - - clip_draw_clr(); -} - -/*---------------------------------------------------------------------------*/ - -void fade_draw(float k) -{ - if (k > 0.0f) + if (tex_env_stage(TEX_STAGE_SHADOW)) { - int w = config_get_d(CONFIG_WIDTH); - int h = config_get_d(CONFIG_HEIGHT); + glBindTexture(GL_TEXTURE_2D, 0); + glDisable(GL_TEXTURE_2D); - video_push_ortho(); + if (tex_env_stage(TEX_STAGE_CLIP)) { - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_LIGHTING); - glDisable(GL_DEPTH_TEST); + glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D); - - glColor4f(0.0f, 0.0f, 0.0f, k); - - glBegin(GL_QUADS); - { - glVertex2i(0, 0); - glVertex2i(w, 0); - glVertex2i(w, h); - glVertex2i(0, h); - } - glEnd(); - - glColor4f(1.0f, 1.0f, 1.0f, 1.0f); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_DEPTH_TEST); - glEnable(GL_LIGHTING); - glDisable(GL_COLOR_MATERIAL); } - video_pop_matrix(); + + tex_env_stage(TEX_STAGE_TEXTURE); } } diff --git a/share/geom.h b/share/geom.h index 4d34073..3fa8d8e 100644 --- a/share/geom.h +++ b/share/geom.h @@ -1,10 +1,14 @@ #ifndef GEOM_H #define GEOM_H +#include "solid_draw.h" + /*---------------------------------------------------------------------------*/ #define IMG_SHAD "png/shadow.png" +#define BACK_DIST 256.0f +#define FAR_DIST 512.0f #define JUMP_HEIGHT 2.00f #define SWCH_HEIGHT 2.00f #define GOAL_HEIGHT 3.00f @@ -12,33 +16,22 @@ /*---------------------------------------------------------------------------*/ -void mark_init(void); -void mark_free(void); -void mark_draw(void); - -/*---------------------------------------------------------------------------*/ - -void goal_init(void); -void goal_free(void); -void goal_draw(void); - -/*---------------------------------------------------------------------------*/ - -void jump_init(void); -void jump_free(void); -void jump_draw(int); - -/*---------------------------------------------------------------------------*/ +void geom_init(void); +void geom_free(void); -void swch_init(void); -void swch_free(void); -void swch_draw(int, int); +void goal_draw(struct s_rend *, float); +void jump_draw(struct s_rend *, float, int); +void swch_draw(struct s_rend *, int, int); +void flag_draw(struct s_rend *); +void mark_draw(struct s_rend *); +void vect_draw(struct s_rend *); +void back_draw(struct s_rend *, float); /*---------------------------------------------------------------------------*/ -void flag_init(void); -void flag_free(void); -void flag_draw(void); +void back_init(const char *s); +void back_free(void); +void back_draw_easy(void); /*---------------------------------------------------------------------------*/ @@ -49,6 +42,35 @@ void shad_draw_clr(void); /*---------------------------------------------------------------------------*/ +enum +{ + TEX_STAGE_TEXTURE, + TEX_STAGE_SHADOW, + TEX_STAGE_CLIP +}; + +struct tex_stage +{ + GLenum unit; + int stage; +}; + +struct tex_env +{ + void (*conf)(int, int); + size_t count; + struct tex_stage stages[4]; +}; + +extern const struct tex_env tex_env_default; +extern const struct tex_env tex_env_shadow; +extern const struct tex_env tex_env_shadow_clip; + +void tex_env_active(const struct tex_env *); +int tex_env_stage(int); + +/*---------------------------------------------------------------------------*/ + void fade_draw(float); #endif diff --git a/share/glext.c b/share/glext.c new file mode 100644 index 0000000..9f726b8 --- /dev/null +++ b/share/glext.c @@ -0,0 +1,168 @@ +/* + * Copyright (C) 2003-2011 Neverball authors + * + * NEVERBALL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2 of the License, + * or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ + +#include +#include + +#include "glext.h" + +struct gl_info gli; + +/*---------------------------------------------------------------------------*/ + +#if !ENABLE_OPENGLES + +PFNGLCLIENTACTIVETEXTURE_PROC glClientActiveTexture_; +PFNGLACTIVETEXTURE_PROC glActiveTexture_; + +PFNGLGENBUFFERS_PROC glGenBuffers_; +PFNGLBINDBUFFER_PROC glBindBuffer_; +PFNGLBUFFERDATA_PROC glBufferData_; +PFNGLBUFFERSUBDATA_PROC glBufferSubData_; +PFNGLDELETEBUFFERS_PROC glDeleteBuffers_; +PFNGLISBUFFER_PROC glIsBuffer_; + +PFNGLPOINTPARAMETERFV_PROC glPointParameterfv_; + +#endif + +/*---------------------------------------------------------------------------*/ + +int glext_check(const char *needle) +{ + const GLubyte *haystack, *c; + + /* Search for the given string in the OpenGL extension strings. */ + + for (haystack = glGetString(GL_EXTENSIONS); *haystack; haystack++) + { + for (c = (const GLubyte *) needle; *c && *haystack; c++, haystack++) + if (*c != *haystack) + break; + + if ((*c == 0) && (*haystack == ' ' || *haystack == '\0')) + return 1; + } + + return 0; +} + +int glext_assert(const char *ext) +{ + if (!glext_check(ext)) + { + fprintf(stderr, "Missing required OpenGL extension (%s)\n", ext); + return 0; + } + return 1; +} + +/*---------------------------------------------------------------------------*/ + +#define SDL_GL_GFPA(fun, str) do { \ + ptr = SDL_GL_GetProcAddress(str); \ + memcpy(&fun, &ptr, sizeof (void *)); \ +} while(0) + +/*---------------------------------------------------------------------------*/ + +int glext_init(void) +{ + void *ptr = 0; + + memset(&gli, 0, sizeof (struct gl_info)); + + /* Common init. */ + + gli.max_texture_units = 1; + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gli.max_texture_size); + +#if !ENABLE_OPENGLES + /* Desktop init. */ + + if (glext_assert("ARB_multitexture")) + { + glGetIntegerv(GL_MAX_TEXTURE_UNITS, &gli.max_texture_units); + + SDL_GL_GFPA(glClientActiveTexture_, "glClientActiveTextureARB"); + SDL_GL_GFPA(glActiveTexture_, "glActiveTextureARB"); + + gli.multitexture = 1; + } + + if (glext_assert("ARB_vertex_buffer_object")) + { + SDL_GL_GFPA(glGenBuffers_, "glGenBuffersARB"); + SDL_GL_GFPA(glBindBuffer_, "glBindBufferARB"); + SDL_GL_GFPA(glBufferData_, "glBufferDataARB"); + SDL_GL_GFPA(glBufferSubData_, "glBufferSubDataARB"); + SDL_GL_GFPA(glDeleteBuffers_, "glDeleteBuffersARB"); + SDL_GL_GFPA(glIsBuffer_, "glIsBufferARB"); + + gli.vertex_buffer_object = 1; + } + + if (glext_assert("ARB_point_parameters")) + { + SDL_GL_GFPA(glPointParameterfv_, "glPointParameterfvARB"); + + gli.point_parameters = 1; + } + + return (gli.multitexture && + gli.vertex_buffer_object && + gli.point_parameters); +#else + /* GLES init. */ + + glGetIntegerv(GL_MAX_TEXTURE_UNITS, &gli.max_texture_units); + + gli.multitexture = 1; + gli.vertex_buffer_object = 1; + gli.point_parameters = 1; + + return 1; +#endif +} + +/*---------------------------------------------------------------------------*/ + +void glClipPlane4f_(GLenum p, GLfloat a, GLfloat b, GLfloat c, GLfloat d) +{ +#if ENABLE_OPENGLES + + GLfloat v[4]; + + v[0] = a; + v[1] = b; + v[2] = c; + v[3] = d; + + glClipPlanef(p, v); + +#else + + GLdouble v[4]; + + v[0] = a; + v[1] = b; + v[2] = c; + v[3] = d; + + glClipPlane(p, v); + +#endif +} + +/*---------------------------------------------------------------------------*/ diff --git a/share/glext.h b/share/glext.h index 732be1b..63d7419 100644 --- a/share/glext.h +++ b/share/glext.h @@ -1,10 +1,25 @@ +/* + * Copyright (C) 2003-2011 Neverball authors + * + * NEVERBALL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2 of the License, + * or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ + #ifndef GLEXT_H #define GLEXT_H /*---------------------------------------------------------------------------*/ +/* Include the system OpenGL headers. */ #ifdef _WIN32 -#define WIN32_LEAN_AND_MEAN /* Ha ha. */ +#define WIN32_LEAN_AND_MEAN #include #endif @@ -20,15 +35,135 @@ /*---------------------------------------------------------------------------*/ -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 +#ifndef GL_MULTISAMPLE +#define GL_MULTISAMPLE 0x809D +#endif + +#ifndef GL_TEXTURE0 +#define GL_TEXTURE0 0x84C0 +#endif + +#ifndef GL_TEXTURE1 +#define GL_TEXTURE1 0x84C1 +#endif + +#ifndef GL_TEXTURE2 +#define GL_TEXTURE2 0x84C2 +#endif + +#ifndef GL_ARRAY_BUFFER +#define GL_ARRAY_BUFFER 0x8892 +#endif + +#ifndef GL_ELEMENT_ARRAY_BUFFER +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#endif + +#ifndef GL_STATC_DRAW +#define GL_STATIC_DRAW 0x88E4 #endif -typedef void (*PFNGLACTIVETEXTUREARBPROC)(GLenum); +#ifndef GL_DYNAMIC_DRAW +#define GL_DYNAMIC_DRAW 0x88E8 +#endif + +#ifndef GL_POINT_SPRITE +#define GL_POINT_SPRITE 0x8861 +#endif + +#ifndef GL_COORD_REPLACE +#define GL_COORD_REPLACE 0x8862 +#endif + +#ifndef GL_POINT_DISTANCE_ATTENUATIAN +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#endif + +/*---------------------------------------------------------------------------*/ + +int glext_check(const char *); +int glext_init(void); + +/*---------------------------------------------------------------------------*/ + +/* Exercise extreme paranoia in defining a cross-platform OpenGL interface. */ +/* If we're compiling against OpenGL ES then we must assume native linkage */ +/* of the extensions we use. Otherwise, GetProc them regardless of whether */ +/* they need it or not. */ + +#if defined(GL_VERSION_ES_CM_1_0) || \ + defined(GL_VERSION_ES_CM_1_1) || \ + defined(GL_OES_VERSION_1_0) + +#define ENABLE_OPENGLES 1 + +#define glClientActiveTexture_ glClientActiveTexture +#define glActiveTexture_ glActiveTexture +#define glGenBuffers_ glGenBuffers +#define glBindBuffer_ glBindBuffer +#define glBufferData_ glBufferData +#define glBufferSubData_ glBufferSubData +#define glDeleteBuffers_ glDeleteBuffers +#define glIsBuffer_ glIsBuffer +#define glPointParameterfv_ glPointParameterfv -extern PFNGLACTIVETEXTUREARBPROC glActiveTextureARB_; +#define glOrtho_ glOrthof + +#else /* No native linkage? Define the extension API. */ + +#define glOrtho_ glOrtho /*---------------------------------------------------------------------------*/ +/* ARB_multitexture */ + +typedef void (*PFNGLACTIVETEXTURE_PROC)(GLenum); +typedef void (*PFNGLCLIENTACTIVETEXTURE_PROC)(GLenum); +extern PFNGLCLIENTACTIVETEXTURE_PROC glClientActiveTexture_; +extern PFNGLACTIVETEXTURE_PROC glActiveTexture_; + +/*---------------------------------------------------------------------------*/ +/* ARB_vertex_buffer_object */ + +typedef void (*PFNGLGENBUFFERS_PROC)(GLsizei, GLuint *); +typedef void (*PFNGLBINDBUFFER_PROC)(GLenum, GLuint); +typedef void (*PFNGLBUFFERDATA_PROC)(GLenum, GLsizeiptr, const GLvoid *, GLenum); +typedef void (*PFNGLBUFFERSUBDATA_PROC)(GLenum, GLintptr, GLsizeiptr, const GLvoid *); +typedef void (*PFNGLDELETEBUFFERS_PROC)(GLsizei, const GLuint *); +typedef GLboolean (*PFNGLISBUFFER_PROC)(GLuint); + +extern PFNGLGENBUFFERS_PROC glGenBuffers_; +extern PFNGLBINDBUFFER_PROC glBindBuffer_; +extern PFNGLBUFFERDATA_PROC glBufferData_; +extern PFNGLBUFFERSUBDATA_PROC glBufferSubData_; +extern PFNGLDELETEBUFFERS_PROC glDeleteBuffers_; +extern PFNGLISBUFFER_PROC glIsBuffer_; + +/*---------------------------------------------------------------------------*/ +/* ARB_point_parameters */ + +typedef void (*PFNGLPOINTPARAMETERFV_PROC)(GLenum, const GLfloat *); + +extern PFNGLPOINTPARAMETERFV_PROC glPointParameterfv_; + +/*---------------------------------------------------------------------------*/ +#endif /* !ENABLE_OPENGLES */ + +void glClipPlane4f_(GLenum, GLfloat, GLfloat, GLfloat, GLfloat); + +/*---------------------------------------------------------------------------*/ + +struct gl_info +{ + GLint max_texture_units; + GLint max_texture_size; + + unsigned int multitexture:1; + unsigned int vertex_buffer_object:1; + unsigned int point_parameters:1; +}; + +extern struct gl_info gli; + +/*---------------------------------------------------------------------------*/ #endif diff --git a/share/gui.c b/share/gui.c index 8749c46..8ac72d5 100644 --- a/share/gui.c +++ b/share/gui.c @@ -29,11 +29,24 @@ /*---------------------------------------------------------------------------*/ -#define MAXWIDGET 256 +/* Very pure colors for the GUI. I was watching BANZAI when I designed this. */ + +const GLubyte gui_wht[4] = { 0xFF, 0xFF, 0xFF, 0xFF }; /* White */ +const GLubyte gui_yel[4] = { 0xFF, 0xFF, 0x00, 0xFF }; /* Yellow */ +const GLubyte gui_red[4] = { 0xFF, 0x00, 0x00, 0xFF }; /* Red */ +const GLubyte gui_grn[4] = { 0x00, 0xFF, 0x00, 0xFF }; /* Green */ +const GLubyte gui_blu[4] = { 0x00, 0x00, 0xFF, 0xFF }; /* Blue */ +const GLubyte gui_blk[4] = { 0x00, 0x00, 0x00, 0xFF }; /* Black */ +const GLubyte gui_gry[4] = { 0x55, 0x55, 0x55, 0xFF }; /* Gray */ +const GLubyte gui_shd[4] = { 0x00, 0x00, 0x00, 0x80 }; /* Shadow */ + +/*---------------------------------------------------------------------------*/ + +#define WIDGET_MAX 256 #define GUI_TYPE 0xFFFC -#define GUI_FREE 0 +#define GUI_FREE 0 #define GUI_STATE 1 #define GUI_FILL 2 @@ -53,6 +66,8 @@ #define GUI_LINES 8 +/*---------------------------------------------------------------------------*/ + struct widget { int type; @@ -61,52 +76,42 @@ struct widget int size; int rect; + const GLubyte *color0; + const GLubyte *color1; + int x, y; int w, h; int car; int cdr; - GLuint text_img; - GLuint text_obj; - GLuint rect_obj; - - const GLfloat *color0; - const GLfloat *color1; + GLuint image; + GLfloat scale; - GLfloat scale; - - int text_obj_w; - int text_obj_h; + int text_w; + int text_h; enum trunc trunc; }; /*---------------------------------------------------------------------------*/ -const GLfloat gui_wht[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; -const GLfloat gui_yel[4] = { 1.0f, 1.0f, 0.0f, 1.0f }; -const GLfloat gui_red[4] = { 1.0f, 0.0f, 0.0f, 1.0f }; -const GLfloat gui_grn[4] = { 0.0f, 1.0f, 0.0f, 1.0f }; -const GLfloat gui_blu[4] = { 0.0f, 0.0f, 1.0f, 1.0f }; -const GLfloat gui_blk[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; -const GLfloat gui_gry[4] = { 0.3f, 0.3f, 0.3f, 1.0f }; - -/*---------------------------------------------------------------------------*/ +/* GUI widget state */ -static struct widget widget[MAXWIDGET]; +static struct widget widget[WIDGET_MAX]; static int active; static int radius; static TTF_Font *font[3] = { NULL, NULL, NULL }; +/* Digit widgets for the HUD. */ + +static int digit_id[3][11]; + +/* Font data access. */ + static void *fontdata; static int fontdatalen; static SDL_RWops *fontrwops; -static GLuint digit_text[3][11]; -static GLuint digit_list[3][11]; -static int digit_w[3][11]; -static int digit_h[3][11]; - /*---------------------------------------------------------------------------*/ static int gui_hot(int id) @@ -115,119 +120,180 @@ static int gui_hot(int id) } /*---------------------------------------------------------------------------*/ -/* - * Initialize a display list containing a rectangle (x, y, w, h) to - * which a rendered-font texture may be applied. Colors c0 and c1 - * determine the top-to-bottom color gradient of the text. - */ -static GLuint gui_list(int x, int y, - int w, int h, const float *c0, const float *c1) -{ - GLuint list = glGenLists(1); +/* Vertex buffer definitions for widget rendering. */ - GLfloat s0, t0; - GLfloat s1, t1; +#define RECT_LEN 36 +#define TEXT_LEN 8 +#define WIDGET_LEN (RECT_LEN + TEXT_LEN) - int W, H, ww, hh, d = h / 16; +struct vert +{ + GLubyte c[4]; + GLfloat u[2]; + GLshort p[2]; +}; - /* Assume the applied texture size is rect size rounded to power-of-two. */ +static struct vert vert_buf[WIDGET_MAX * WIDGET_LEN]; +static GLuint vert_obj = 0; - image_size(&W, &H, w, h); +/*---------------------------------------------------------------------------*/ - ww = ((W - w) % 2) ? w + 1 : w; - hh = ((H - h) % 2) ? h + 1 : h; +static void set_vert(struct vert *v, int x, int y, + GLfloat s, GLfloat t, const GLubyte *c) +{ + v->c[0] = c[0]; + v->c[1] = c[1]; + v->c[2] = c[2]; + v->c[3] = c[3]; + v->u[0] = s; + v->u[1] = t; + v->p[0] = x; + v->p[1] = y; +} - s0 = 0.5f * (W - ww) / W; - t0 = 0.5f * (H - hh) / H; - s1 = 1.0f - s0; - t1 = 1.0f - t0; +/*---------------------------------------------------------------------------*/ - glNewList(list, GL_COMPILE); +static void draw_enable(GLboolean c, GLboolean u, GLboolean p) +{ + glBindBuffer_(GL_ARRAY_BUFFER, vert_obj); + + if (c) { - glBegin(GL_QUADS); - { - glColor4f(0.0f, 0.0f, 0.0f, 0.5f); - glTexCoord2f(s0, t1); glVertex2i(x + d, y - d); - glTexCoord2f(s1, t1); glVertex2i(x + ww + d, y - d); - glTexCoord2f(s1, t0); glVertex2i(x + ww + d, y + hh - d); - glTexCoord2f(s0, t0); glVertex2i(x + d, y + hh - d); - - glColor4fv(c0); - glTexCoord2f(s0, t1); glVertex2i(x, y); - glTexCoord2f(s1, t1); glVertex2i(x + ww, y); - - glColor4fv(c1); - glTexCoord2f(s1, t0); glVertex2i(x + ww, y + hh); - glTexCoord2f(s0, t0); glVertex2i(x, y + hh); - } - glEnd(); + glEnableClientState(GL_COLOR_ARRAY); + glColorPointer (4, GL_UNSIGNED_BYTE, sizeof (struct vert), + (GLvoid *) offsetof (struct vert, c)); + } + if (u) + { + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glTexCoordPointer(2, GL_FLOAT, sizeof (struct vert), + (GLvoid *) offsetof (struct vert, u)); } - glEndList(); + if (p) + { + glEnableClientState(GL_VERTEX_ARRAY); + glVertexPointer (2, GL_SHORT, sizeof (struct vert), + (GLvoid *) offsetof (struct vert, p)); + } +} + +static void draw_rect(int id) +{ + glDrawArrays(GL_TRIANGLE_STRIP, id * WIDGET_LEN, RECT_LEN); +} - return list; +static void draw_text(int id) +{ + glDrawArrays(GL_TRIANGLE_STRIP, id * WIDGET_LEN + RECT_LEN, TEXT_LEN); } -/* - * Initialize a display list containing a rounded-corner rectangle (x, - * y, w, h). Generate texture coordinates to properly apply a texture - * map to the rectangle as though the corners were not rounded. - */ +static void draw_disable(void) +{ + glBindBuffer_(GL_ARRAY_BUFFER, 0); + + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); +} + +/*---------------------------------------------------------------------------*/ -static GLuint gui_rect(int x, int y, int w, int h, int f, int r) +static void gui_rect(int id, int x, int y, int w, int h, int f, int r) { - GLuint list = glGenLists(1); + struct vert *v = vert_buf + id * WIDGET_LEN; + struct vert *p = v; + + /* Generate vertex data for the widget's rounded rectangle. */ int n = 8; int i; - glNewList(list, GL_COMPILE); + /* Left side... */ + + for (i = 0; i <= n; i++) { - glBegin(GL_QUAD_STRIP); - { - /* Left side... */ + float a = 0.5f * V_PI * (float) i / (float) n; + float s = r * fsinf(a); + float c = r * fcosf(a); - for (i = 0; i <= n; i++) - { - float a = 0.5f * V_PI * (float) i / (float) n; - float s = r * fsinf(a); - float c = r * fcosf(a); + float X = x + r - c; + float Ya = y + h + ((f & GUI_NW) ? (s - r) : 0); + float Yb = y + ((f & GUI_SW) ? (r - s) : 0); - float X = x + r - c; - float Ya = y + h + ((f & GUI_NW) ? (s - r) : 0); - float Yb = y + ((f & GUI_SW) ? (r - s) : 0); + set_vert(p++, X, Ya, (X - x) / w, (Ya - y) / h, gui_wht); + set_vert(p++, X, Yb, (X - x) / w, (Yb - y) / h, gui_wht); + } - glTexCoord2f((X - x) / w, (Ya - y) / h); - glVertex2f(X, Ya); + /* Right side... */ - glTexCoord2f((X - x) / w, (Yb - y) / h); - glVertex2f(X, Yb); - } + for (i = 0; i <= n; i++) + { + float a = 0.5f * V_PI * (float) i / (float) n; + float s = r * fsinf(a); + float c = r * fcosf(a); - /* ... Right side. */ + float X = x + w - r + s; + float Ya = y + h + ((f & GUI_NE) ? (c - r) : 0); + float Yb = y + ((f & GUI_SE) ? (r - c) : 0); - for (i = 0; i <= n; i++) - { - float a = 0.5f * V_PI * (float) i / (float) n; - float s = r * fsinf(a); - float c = r * fcosf(a); + set_vert(p++, X, Ya, (X - x) / w, (Ya - y) / h, gui_wht); + set_vert(p++, X, Yb, (X - x) / w, (Yb - y) / h, gui_wht); + } - float X = x + w - r + s; - float Ya = y + h + ((f & GUI_NE) ? (c - r) : 0); - float Yb = y + ((f & GUI_SE) ? (r - c) : 0); + /* Copy this off to the VBO. */ - glTexCoord2f((X - x) / w, (Ya - y) / h); - glVertex2f(X, Ya); + glBindBuffer_ (GL_ARRAY_BUFFER, vert_obj); + glBufferSubData_(GL_ARRAY_BUFFER, + id * WIDGET_LEN * sizeof (struct vert), + RECT_LEN * sizeof (struct vert), v); +} + +static void gui_text(int id, int x, int y, + int w, int h, const GLubyte *c0, const GLubyte *c1) +{ + struct vert *v = vert_buf + id * WIDGET_LEN + RECT_LEN; + + /* Assume the applied texture size is rect size rounded to power-of-two. */ + + int W; + int H; + + image_size(&W, &H, w, h); + + if (w > 0 && h > 0 && W > 0 && H > 0) + { + const int d = h / 16; /* Shadow offset */ + + const int ww = ((W - w) % 2) ? w + 1 : w; + const int hh = ((H - h) % 2) ? h + 1 : h; + + const GLfloat s0 = 0.5f * (W - ww) / W; + const GLfloat t0 = 0.5f * (H - hh) / H; + const GLfloat s1 = 1.0f - s0; + const GLfloat t1 = 1.0f - t0; + + /* Generate vertex data for the colored text and its shadow. */ + + set_vert(v + 0, x + d, y + hh - d, s0, t0, gui_shd); + set_vert(v + 1, x + d, y - d, s0, t1, gui_shd); + set_vert(v + 2, x + ww + d, y + hh - d, s1, t0, gui_shd); + set_vert(v + 3, x + ww + d, y - d, s1, t1, gui_shd); + + set_vert(v + 4, x, y + hh, s0, t0, c1); + set_vert(v + 5, x, y, s0, t1, c0); + set_vert(v + 6, x + ww, y + hh, s1, t0, c1); + set_vert(v + 7, x + ww, y, s1, t1, c0); - glTexCoord2f((X - x) / w, (Yb - y) / h); - glVertex2f(X, Yb); - } - } - glEnd(); } - glEndList(); + else memset(v, 0, TEXT_LEN * sizeof (struct vert)); - return list; + /* Copy this off to the VBO. */ + + glBindBuffer_ (GL_ARRAY_BUFFER, vert_obj); + glBufferSubData_(GL_ARRAY_BUFFER, + (id * WIDGET_LEN + RECT_LEN) * sizeof (struct vert), + TEXT_LEN * sizeof (struct vert), v); } /*---------------------------------------------------------------------------*/ @@ -251,12 +317,10 @@ static const char *pick_font_path(void) void gui_init(void) { - const float *c0 = gui_yel; - const float *c1 = gui_red; - int w = config_get_d(CONFIG_WIDTH); int h = config_get_d(CONFIG_HEIGHT); - int i, j, s = (h < w) ? h : w; + int s = (h < w) ? h : w; + int i, j; /* Initialize font rendering. */ @@ -268,7 +332,7 @@ void gui_init(void) int s1 = s / 13; int s2 = s / 7; - memset(widget, 0, sizeof (struct widget) * MAXWIDGET); + memset(widget, 0, sizeof (struct widget) * WIDGET_MAX); /* Load the font. */ @@ -300,81 +364,62 @@ void gui_init(void) } radius = s / 60; + } - /* Initialize digit glyphs and lists for counters and clocks. */ + /* Initialize the VBOs. */ - for (i = 0; i < 3; i++) - { - char text[2]; + memset(vert_buf, 0, sizeof (vert_buf)); - /* Draw digits 0 through 9. */ - - for (j = 0; j < 10; j++) - { - text[0] = '0' + (char) j; - text[1] = 0; - - digit_text[i][j] = make_image_from_font(NULL, NULL, - &digit_w[i][j], - &digit_h[i][j], - text, font[i]); - digit_list[i][j] = gui_list(-digit_w[i][j] / 2, - -digit_h[i][j] / 2, - +digit_w[i][j], - +digit_h[i][j], c0, c1); - } + glGenBuffers_(1, &vert_obj); + glBindBuffer_(GL_ARRAY_BUFFER, vert_obj); + glBufferData_(GL_ARRAY_BUFFER, sizeof (vert_buf), vert_buf, GL_STATIC_DRAW); + glBindBuffer_(GL_ARRAY_BUFFER, 0); - /* Draw the colon for the clock. */ + /* Cache digit glyphs for HUD rendering. */ - digit_text[i][j] = make_image_from_font(NULL, NULL, - &digit_w[i][10], - &digit_h[i][10], - ":", font[i]); - digit_list[i][j] = gui_list(-digit_w[i][10] / 2, - -digit_h[i][10] / 2, - +digit_w[i][10], - +digit_h[i][10], c0, c1); - } + for (i = 0; i < 3; i++) + { + digit_id[i][ 0] = gui_label(0, "0", i, 0, 0, 0); + digit_id[i][ 1] = gui_label(0, "1", i, 0, 0, 0); + digit_id[i][ 2] = gui_label(0, "2", i, 0, 0, 0); + digit_id[i][ 3] = gui_label(0, "3", i, 0, 0, 0); + digit_id[i][ 4] = gui_label(0, "4", i, 0, 0, 0); + digit_id[i][ 5] = gui_label(0, "5", i, 0, 0, 0); + digit_id[i][ 6] = gui_label(0, "6", i, 0, 0, 0); + digit_id[i][ 7] = gui_label(0, "7", i, 0, 0, 0); + digit_id[i][ 8] = gui_label(0, "8", i, 0, 0, 0); + digit_id[i][ 9] = gui_label(0, "9", i, 0, 0, 0); + digit_id[i][10] = gui_label(0, ":", i, 0, 0, 0); } + for (i = 0; i < 3; i++) + for (j = 0; j < 11; ++j) + gui_layout(digit_id[i][j], 0, 0); + active = 0; } void gui_free(void) { - int i, j, id; + int id; - /* Release any remaining widget texture and display list indices. */ + /* Release the VBOs. */ - for (id = 1; id < MAXWIDGET; id++) - { - if (glIsTexture(widget[id].text_img)) - glDeleteTextures(1, &widget[id].text_img); - - if (glIsList(widget[id].text_obj)) - glDeleteLists(widget[id].text_obj, 1); - if (glIsList(widget[id].rect_obj)) - glDeleteLists(widget[id].rect_obj, 1); - - widget[id].type = GUI_FREE; - widget[id].text_img = 0; - widget[id].text_obj = 0; - widget[id].rect_obj = 0; - widget[id].cdr = 0; - widget[id].car = 0; - } + if (glIsBuffer_(vert_obj)) + glDeleteBuffers_(1, &vert_obj); - /* Release all digit textures and display lists. */ + /* Release any remaining widget texture and display list indices. */ - for (i = 0; i < 3; i++) - for (j = 0; j < 11; j++) - { - if (glIsTexture(digit_text[i][j])) - glDeleteTextures(1, &digit_text[i][j]); + for (id = 1; id < WIDGET_MAX; id++) + { + if (glIsTexture(widget[id].image)) + glDeleteTextures(1, &widget[id].image); - if (glIsList(digit_list[i][j])) - glDeleteLists(digit_list[i][j], 1); - } + widget[id].type = GUI_FREE; + widget[id].image = 0; + widget[id].cdr = 0; + widget[id].car = 0; + } /* Release all loaded fonts and finalize font rendering. */ @@ -396,28 +441,25 @@ static int gui_widget(int pd, int type) /* Find an unused entry in the widget table. */ - for (id = 1; id < MAXWIDGET; id++) + for (id = 1; id < WIDGET_MAX; id++) if (widget[id].type == GUI_FREE) { /* Set the type and default properties. */ - widget[id].type = type; - widget[id].token = 0; - widget[id].value = 0; - widget[id].size = 0; - widget[id].rect = GUI_NW | GUI_SW | GUI_NE | GUI_SE; - widget[id].w = 0; - widget[id].h = 0; - widget[id].text_img = 0; - widget[id].text_obj = 0; - widget[id].rect_obj = 0; - widget[id].color0 = gui_wht; - widget[id].color1 = gui_wht; - widget[id].scale = 1.0f; - widget[id].trunc = TRUNC_NONE; - - widget[id].text_obj_w = 0; - widget[id].text_obj_h = 0; + widget[id].type = type; + widget[id].token = 0; + widget[id].value = 0; + widget[id].size = 0; + widget[id].rect = GUI_NW | GUI_SW | GUI_NE | GUI_SE; + widget[id].w = 0; + widget[id].h = 0; + widget[id].image = 0; + widget[id].color0 = gui_wht; + widget[id].color1 = gui_wht; + widget[id].scale = 1.0f; + widget[id].trunc = TRUNC_NONE; + widget[id].text_w = 0; + widget[id].text_h = 0; /* Insert the new widget into the parent's widget list. */ @@ -454,7 +496,6 @@ struct size int w, h; }; - static struct size gui_measure(const char *text, TTF_Font *font) { struct size size = { 0, 0 }; @@ -549,34 +590,32 @@ static char *gui_truncate(const char *text, void gui_set_image(int id, const char *file) { - if (glIsTexture(widget[id].text_img)) - glDeleteTextures(1, &widget[id].text_img); + if (glIsTexture(widget[id].image)) + glDeleteTextures(1, &widget[id].image); - widget[id].text_img = make_image_from_file(file); + widget[id].image = make_image_from_file(file); } void gui_set_label(int id, const char *text) { - int w, h; + int w = 0; + int h = 0; - if (glIsTexture(widget[id].text_img)) - glDeleteTextures(1, &widget[id].text_img); - if (glIsList(widget[id].text_obj)) - glDeleteLists(widget[id].text_obj, 1); + if (glIsTexture(widget[id].image)) + glDeleteTextures(1, &widget[id].image); text = gui_truncate(text, widget[id].w - radius, font[widget[id].size], widget[id].trunc); - widget[id].text_img = make_image_from_font(NULL, NULL, &w, &h, - text, font[widget[id].size]); - widget[id].text_obj = gui_list(-w / 2, -h / 2, w, h, - widget[id].color0, widget[id].color1); + widget[id].image = make_image_from_font(NULL, NULL, &w, &h, + text, font[widget[id].size]); + widget[id].text_w = w; + widget[id].text_h = h; - widget[id].text_obj_w = w; - widget[id].text_obj_h = h; + gui_text(id, -w / 2, -h / 2, w, h, widget[id].color0, widget[id].color1); - free((void *) text); + free((void *) text); /* Really? */ } void gui_set_count(int id, int value) @@ -589,8 +628,8 @@ void gui_set_clock(int id, int value) widget[id].value = value; } -void gui_set_color(int id, const float *c0, - const float *c1) +void gui_set_color(int id, const GLubyte *c0, + const GLubyte *c1) { if (id) { @@ -599,22 +638,13 @@ void gui_set_color(int id, const float *c0, if (widget[id].color0 != c0 || widget[id].color1 != c1) { + int w = widget[id].text_w; + int h = widget[id].text_h; + widget[id].color0 = c0; widget[id].color1 = c1; - if (glIsList(widget[id].text_obj)) - { - int w, h; - - glDeleteLists(widget[id].text_obj, 1); - - w = widget[id].text_obj_w; - h = widget[id].text_obj_h; - - widget[id].text_obj = gui_list(-w / 2, -h / 2, w, h, - widget[id].color0, - widget[id].color1); - } + gui_text(id, -w / 2, -h / 2, w, h, c0, c1); } } } @@ -666,7 +696,7 @@ int gui_image(int pd, const char *file, int w, int h) if ((id = gui_widget(pd, GUI_IMAGE))) { - widget[id].text_img = make_image_from_file(file); + widget[id].image = make_image_from_file(file); widget[id].w = w; widget[id].h = h; } @@ -689,7 +719,7 @@ int gui_state(int pd, const char *text, int size, int token, int value) if ((id = gui_widget(pd, GUI_STATE))) { - widget[id].text_img = make_image_from_font(NULL, NULL, + widget[id].image = make_image_from_font(NULL, NULL, &widget[id].w, &widget[id].h, text, font[size]); @@ -700,17 +730,17 @@ int gui_state(int pd, const char *text, int size, int token, int value) return id; } -int gui_label(int pd, const char *text, int size, int rect, const float *c0, - const float *c1) +int gui_label(int pd, const char *text, int size, int rect, const GLubyte *c0, + const GLubyte *c1) { int id; if ((id = gui_widget(pd, GUI_LABEL))) { - widget[id].text_img = make_image_from_font(NULL, NULL, - &widget[id].w, - &widget[id].h, - text, font[size]); + widget[id].image = make_image_from_font(NULL, NULL, + &widget[id].w, + &widget[id].h, + text, font[size]); widget[id].size = size; widget[id].color0 = c0 ? c0 : gui_yel; widget[id].color1 = c1 ? c1 : gui_red; @@ -726,9 +756,9 @@ int gui_count(int pd, int value, int size, int rect) if ((id = gui_widget(pd, GUI_COUNT))) { for (i = value; i; i /= 10) - widget[id].w += digit_w[size][0]; + widget[id].w += widget[digit_id[size][0]].text_w; - widget[id].h = digit_h[size][0]; + widget[id].h = widget[digit_id[size][0]].text_h; widget[id].value = value; widget[id].size = size; widget[id].color0 = gui_yel; @@ -744,8 +774,8 @@ int gui_clock(int pd, int value, int size, int rect) if ((id = gui_widget(pd, GUI_CLOCK))) { - widget[id].w = digit_w[size][0] * 6; - widget[id].h = digit_h[size][0]; + widget[id].w = widget[digit_id[size][0]].text_w * 6; + widget[id].h = widget[digit_id[size][0]].text_h; widget[id].value = value; widget[id].size = size; widget[id].color0 = gui_yel; @@ -775,8 +805,8 @@ int gui_space(int pd) * Preserve the rect specification across the entire array. */ -int gui_multi(int pd, const char *text, int size, int rect, const float *c0, - const float *c1) +int gui_multi(int pd, const char *text, int size, int rect, const GLubyte *c0, + const GLubyte *c1) { int id = 0; @@ -911,8 +941,8 @@ static void gui_button_up(int id) { /* Store width and height for later use in text rendering. */ - widget[id].text_obj_w = widget[id].w; - widget[id].text_obj_h = widget[id].h; + widget[id].text_w = widget[id].w; + widget[id].text_h = widget[id].h; if (widget[id].w < widget[id].h && widget[id].w > 0) widget[id].w = widget[id].h; @@ -1095,22 +1125,22 @@ static void gui_button_dn(int id, int x, int y, int w, int h) { /* Recall stored width and height for text rendering. */ - int W = widget[id].text_obj_w; - int H = widget[id].text_obj_h; + int W = widget[id].text_w; + int H = widget[id].text_h; int R = widget[id].rect; - const float *c0 = widget[id].color0; - const float *c1 = widget[id].color1; + const GLubyte *c0 = widget[id].color0; + const GLubyte *c1 = widget[id].color1; widget[id].x = x; widget[id].y = y; widget[id].w = w; widget[id].h = h; - /* Create display lists for the text area and rounded rectangle. */ + /* Create vertex array data for the text area and rounded rectangle. */ - widget[id].text_obj = gui_list(-W / 2, -H / 2, W, H, c0, c1); - widget[id].rect_obj = gui_rect(-w / 2, -h / 2, w, h, R, radius); + gui_rect(id, -w / 2, -h / 2, w, h, R, radius); + gui_text(id, -W / 2, -H / 2, W, H, c0, c1); } static void gui_widget_dn(int id, int x, int y, int w, int h) @@ -1207,22 +1237,15 @@ int gui_delete(int id) /* Release any GL resources held by this widget. */ - if (glIsTexture(widget[id].text_img)) - glDeleteTextures(1, &widget[id].text_img); - - if (glIsList(widget[id].text_obj)) - glDeleteLists(widget[id].text_obj, 1); - if (glIsList(widget[id].rect_obj)) - glDeleteLists(widget[id].rect_obj, 1); + if (glIsTexture(widget[id].image)) + glDeleteTextures(1, &widget[id].image); /* Mark this widget unused. */ - widget[id].type = GUI_FREE; - widget[id].text_img = 0; - widget[id].text_obj = 0; - widget[id].rect_obj = 0; - widget[id].cdr = 0; - widget[id].car = 0; + widget[id].type = GUI_FREE; + widget[id].image = 0; + widget[id].cdr = 0; + widget[id].car = 0; } return 0; } @@ -1274,8 +1297,8 @@ static void gui_paint_rect(int id, int st) glTranslatef((GLfloat) (widget[id].x + widget[id].w / 2), (GLfloat) (widget[id].y + widget[id].h / 2), 0.f); - glColor4fv(back[i]); - glCallList(widget[id].rect_obj); + glColor4f(back[i][0], back[i][1], back[i][2], back[i][3]); + draw_rect(id); } glPopMatrix(); @@ -1297,9 +1320,12 @@ static void gui_paint_array(int id) GLfloat cy = widget[id].y + widget[id].h / 2.0f; GLfloat ck = widget[id].scale; - glTranslatef(+cx, +cy, 0.0f); - glScalef(ck, ck, ck); - glTranslatef(-cx, -cy, 0.0f); + if (1.0 < ck || ck < 1.0) + { + glTranslatef(+cx, +cy, 0.0f); + glScalef(ck, ck, ck); + glTranslatef(-cx, -cy, 0.0f); + } /* Recursively paint all subwidgets. */ @@ -1322,9 +1348,9 @@ static void gui_paint_image(int id) widget[id].scale, widget[id].scale); - glBindTexture(GL_TEXTURE_2D, widget[id].text_img); - glColor4fv(gui_wht); - glCallList(widget[id].rect_obj); + glBindTexture(GL_TEXTURE_2D, widget[id].image); + glColor4ub(gui_wht[0], gui_wht[1], gui_wht[2], gui_wht[3]); + draw_rect(id); } glPopMatrix(); } @@ -1335,8 +1361,6 @@ static void gui_paint_count(int id) glPushMatrix(); { - glColor4fv(gui_wht); - /* Translate to the widget center, and apply the pulse scale. */ glTranslatef((GLfloat) (widget[id].x + widget[id].w / 2), @@ -1348,28 +1372,32 @@ static void gui_paint_count(int id) if (widget[id].value > 0) { - /* Translate left by half the total width of the rendered value. */ + /* Translate right by half the total width of the rendered value. */ + + GLfloat w = -widget[digit_id[i][0]].text_w * 0.5f; for (j = widget[id].value; j; j /= 10) - glTranslatef((GLfloat) +digit_w[i][j % 10] / 2.0f, 0.0f, 0.0f); + w += widget[digit_id[i][j % 10]].text_w * 0.5f; - glTranslatef((GLfloat) -digit_w[i][0] / 2.0f, 0.0f, 0.0f); + glTranslatef(w, 0.0f, 0.0f); - /* Render each digit, moving right after each. */ + /* Render each digit, moving left after each. */ for (j = widget[id].value; j; j /= 10) { - glBindTexture(GL_TEXTURE_2D, digit_text[i][j % 10]); - glCallList(digit_list[i][j % 10]); - glTranslatef((GLfloat) -digit_w[i][j % 10], 0.0f, 0.0f); + int id = digit_id[i][j % 10]; + + glBindTexture(GL_TEXTURE_2D, widget[id].image); + draw_text(id); + glTranslatef((GLfloat) -widget[id].text_w, 0.0f, 0.0f); } } else if (widget[id].value == 0) { /* If the value is zero, just display a zero in place. */ - glBindTexture(GL_TEXTURE_2D, digit_text[i][0]); - glCallList(digit_list[i][0]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][0]].image); + draw_text(digit_id[i][0]); } } glPopMatrix(); @@ -1385,16 +1413,14 @@ static void gui_paint_clock(int id) int ht = ((widget[id].value % 6000) % 100) / 10; int ho = ((widget[id].value % 6000) % 100) % 10; - GLfloat dx_large = (GLfloat) digit_w[i][0]; - GLfloat dx_small = (GLfloat) digit_w[i][0] * 0.75f; + GLfloat dx_large = (GLfloat) widget[digit_id[i][0]].text_w; + GLfloat dx_small = (GLfloat) widget[digit_id[i][0]].text_w * 0.75f; if (widget[id].value < 0) return; glPushMatrix(); { - glColor4fv(gui_wht); - /* Translate to the widget center, and apply the pulse scale. */ glTranslatef((GLfloat) (widget[id].x + widget[id].w / 2), @@ -1415,41 +1441,41 @@ static void gui_paint_clock(int id) if (mt > 0) { - glBindTexture(GL_TEXTURE_2D, digit_text[i][mt]); - glCallList(digit_list[i][mt]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][mt]].image); + draw_text(digit_id[i][mt]); glTranslatef(dx_large, 0.0f, 0.0f); } - glBindTexture(GL_TEXTURE_2D, digit_text[i][mo]); - glCallList(digit_list[i][mo]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][mo]].image); + draw_text(digit_id[i][mo]); glTranslatef(dx_small, 0.0f, 0.0f); /* Render the colon. */ - glBindTexture(GL_TEXTURE_2D, digit_text[i][10]); - glCallList(digit_list[i][10]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][10]].image); + draw_text(digit_id[i][10]); glTranslatef(dx_small, 0.0f, 0.0f); /* Render the seconds counter. */ - glBindTexture(GL_TEXTURE_2D, digit_text[i][st]); - glCallList(digit_list[i][st]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][st]].image); + draw_text(digit_id[i][st]); glTranslatef(dx_large, 0.0f, 0.0f); - glBindTexture(GL_TEXTURE_2D, digit_text[i][so]); - glCallList(digit_list[i][so]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][so]].image); + draw_text(digit_id[i][so]); glTranslatef(dx_small, 0.0f, 0.0f); /* Render hundredths counter half size. */ glScalef(0.5f, 0.5f, 1.0f); - glBindTexture(GL_TEXTURE_2D, digit_text[i][ht]); - glCallList(digit_list[i][ht]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][ht]].image); + draw_text(digit_id[i][ht]); glTranslatef(dx_large, 0.0f, 0.0f); - glBindTexture(GL_TEXTURE_2D, digit_text[i][ho]); - glCallList(digit_list[i][ho]); + glBindTexture(GL_TEXTURE_2D, widget[digit_id[i][ho]].image); + draw_text(digit_id[i][ho]); } glPopMatrix(); } @@ -1467,8 +1493,8 @@ static void gui_paint_label(int id) widget[id].scale, widget[id].scale); - glBindTexture(GL_TEXTURE_2D, widget[id].text_img); - glCallList(widget[id].text_obj); + glBindTexture(GL_TEXTURE_2D, widget[id].image); + draw_text(id); } glPopMatrix(); } @@ -1500,13 +1526,16 @@ void gui_paint(int id) glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); { + draw_enable(GL_FALSE, GL_FALSE, GL_TRUE); glDisable(GL_TEXTURE_2D); gui_paint_rect(id, 0); + draw_enable(GL_TRUE, GL_TRUE, GL_TRUE); glEnable(GL_TEXTURE_2D); gui_paint_text(id); - glColor4fv(gui_wht); + draw_disable(); + glColor4ub(gui_wht[0], gui_wht[1], gui_wht[2], gui_wht[3]); } glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); @@ -1706,7 +1735,7 @@ static int gui_stick_R(int id, int dd) hd = 0; omin = (widget[id].x + widget[id].w) - (widget[dd].x + widget[dd].w) + 1; - dmin = widget[dd].y + widget[dd].h + widget[id].y + widget[id].h; + dmin = (widget[dd].y + widget[dd].h) + (widget[id].y + widget[id].h); for (jd = widget[id].car; jd; jd = widget[jd].cdr) { @@ -1776,7 +1805,7 @@ static int gui_stick_U(int id, int dd) hd = 0; omin = (widget[id].y + widget[id].h) - (widget[dd].y + widget[dd].h) + 1; - dmin = widget[dd].x + widget[dd].w + widget[id].x + widget[id].w; + dmin = (widget[dd].x + widget[dd].w) + (widget[id].x + widget[id].w); for (jd = widget[id].car; jd; jd = widget[jd].cdr) { diff --git a/share/gui.h b/share/gui.h index cd07933..93e8ef1 100644 --- a/share/gui.h +++ b/share/gui.h @@ -37,13 +37,13 @@ #define GUI_BOT (GUI_SW | GUI_SE) #define GUI_ALL (GUI_TOP | GUI_BOT) -extern const GLfloat gui_wht[4]; -extern const GLfloat gui_yel[4]; -extern const GLfloat gui_red[4]; -extern const GLfloat gui_blu[4]; -extern const GLfloat gui_grn[4]; -extern const GLfloat gui_blk[4]; -extern const GLfloat gui_gry[4]; +extern const GLubyte gui_wht[4]; +extern const GLubyte gui_yel[4]; +extern const GLubyte gui_red[4]; +extern const GLubyte gui_blu[4]; +extern const GLubyte gui_grn[4]; +extern const GLubyte gui_blk[4]; +extern const GLubyte gui_gry[4]; /*---------------------------------------------------------------------------*/ @@ -64,7 +64,7 @@ void gui_set_image(int, const char *); void gui_set_multi(int, const char *); void gui_set_count(int, int); void gui_set_clock(int, int); -void gui_set_color(int, const float *, const float *); +void gui_set_color(int, const GLubyte *, const GLubyte *); void gui_set_trunc(int, enum trunc); void gui_set_fill(int); @@ -79,8 +79,8 @@ int gui_filler(int); int gui_image(int, const char *, int, int); int gui_start(int, const char *, int, int, int); int gui_state(int, const char *, int, int, int); -int gui_label(int, const char *, int, int, const float *, const float *); -int gui_multi(int, const char *, int, int, const float *, const float *); +int gui_label(int, const char *, int, int, const GLubyte *, const GLubyte *); +int gui_multi(int, const char *, int, int, const GLubyte *, const GLubyte *); int gui_count(int, int, int, int); int gui_clock(int, int, int, int); int gui_space(int); diff --git a/share/image.c b/share/image.c index b98d903..8ee9ccb 100644 --- a/share/image.c +++ b/share/image.c @@ -113,17 +113,17 @@ static GLuint make_texture(const void *p, int w, int h, int b) #ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT int a = config_get_d(CONFIG_ANISO); #endif +#ifdef GL_GENERATE_MIPMAP_SGIS int m = config_get_d(CONFIG_MIPMAP); +#endif int k = config_get_d(CONFIG_TEXTURES); int W = w; int H = h; - GLint max; + GLint max = gli.max_texture_size; void *q = NULL; - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max); - while (w / k > (int) max || h / k > (int) max) k *= 2; @@ -135,8 +135,8 @@ static GLuint make_texture(const void *p, int w, int h, int b) glGenTextures(1, &o); glBindTexture(GL_TEXTURE_2D, o); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); diff --git a/share/item.c b/share/item.c index 8af06db..2cf8b12 100644 --- a/share/item.c +++ b/share/item.c @@ -30,7 +30,6 @@ void item_color(const struct v_item *hp, float *c) { switch (hp->t) { - case ITEM_COIN: if (hp->n >= 1) @@ -38,18 +37,21 @@ void item_color(const struct v_item *hp, float *c) c[0] = 1.0f; c[1] = 1.0f; c[2] = 0.2f; + c[3] = 1.0f; } if (hp->n >= 5) { c[0] = 1.0f; c[1] = 0.2f; c[2] = 0.2f; + c[3] = 1.0f; } if (hp->n >= 10) { c[0] = 0.2f; c[1] = 0.2f; c[2] = 1.0f; + c[3] = 1.0f; } break; @@ -58,6 +60,7 @@ void item_color(const struct v_item *hp, float *c) c[0] = 0.00f; c[1] = 0.51f; c[2] = 0.80f; + c[3] = 1.00f; break; @@ -66,6 +69,7 @@ void item_color(const struct v_item *hp, float *c) c[0] = 1.00f; c[1] = 0.76f; c[2] = 0.00f; + c[3] = 1.00f; break; @@ -74,6 +78,7 @@ void item_color(const struct v_item *hp, float *c) c[0] = 1.0f; c[1] = 1.0f; c[2] = 1.0f; + c[3] = 1.0f; break; } @@ -93,15 +98,12 @@ void item_free(void) sol_free_full(&item_shrink_file); } -void item_push(int type) -{ - glEnable(GL_COLOR_MATERIAL); -} - -void item_draw(const struct v_item *hp, float r) +void item_draw(struct s_rend *rend, + const struct v_item *hp, + const GLfloat *M, float t) { struct s_draw *draw = NULL; - float c[3]; + float c[4]; switch (hp->t) { @@ -112,14 +114,20 @@ void item_draw(const struct v_item *hp, float r) item_color(hp, c); - glColor3fv(c); - sol_draw(draw, 0, 1); -} + glColor4f(c[0], c[1], c[2], c[3]); -void item_pull(void) -{ - glColor3f(1.0f, 1.0f, 1.0f); - glDisable(GL_COLOR_MATERIAL); + glDepthMask(GL_FALSE); + { + sol_bill(draw, rend, M, t); + } + glDepthMask(GL_TRUE); + + glPushMatrix(); + { + glRotatef(360.0f * t, 0.0f, 1.0f, 0.0f); + sol_draw(draw, rend, 0, 1); + } + glPopMatrix(); } /*---------------------------------------------------------------------------*/ diff --git a/share/item.h b/share/item.h index 4d72414..3450db2 100644 --- a/share/item.h +++ b/share/item.h @@ -16,6 +16,7 @@ #define ITEM_H #include "solid_vary.h" +#include "solid_draw.h" #define ITEM_RADIUS 0.15f @@ -23,8 +24,6 @@ void item_color(const struct v_item *, float *); void item_init(void); void item_free(void); -void item_push(int); -void item_draw(const struct v_item *, float); -void item_pull(void); +void item_draw(struct s_rend *, const struct v_item *, const float *, float); #endif diff --git a/share/mapc.c b/share/mapc.c index 1724f5c..286b5bf 100644 --- a/share/mapc.c +++ b/share/mapc.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "solid_base.h" @@ -43,9 +44,13 @@ /*---------------------------------------------------------------------------*/ static const char *input_file; -static int debug_output; +static int debug_output = 0; +static int csv_output = 0; static int verbose; +struct timeval t0; +struct timeval t1; + /*---------------------------------------------------------------------------*/ /* Ohhhh... arbitrary! */ @@ -55,6 +60,7 @@ static int verbose; #define MAXE 131072 #define MAXS 65536 #define MAXT 131072 +#define MAXO 131072 #define MAXG 65536 #define MAXL 4096 #define MAXN 2048 @@ -103,6 +109,11 @@ static int inct(struct s_base *fp) return (fp->tc < MAXT) ? fp->tc++ : overflow("texc"); } +static int inco(struct s_base *fp) +{ + return (fp->oc < MAXO) ? fp->oc++ : overflow("offs"); +} + static int incg(struct s_base *fp) { return (fp->gc < MAXG) ? fp->gc++ : overflow("geom"); @@ -180,6 +191,7 @@ static void init_file(struct s_base *fp) fp->ec = 0; fp->sc = 0; fp->tc = 0; + fp->oc = 0; fp->gc = 0; fp->lc = 0; fp->nc = 0; @@ -201,6 +213,7 @@ static void init_file(struct s_base *fp) fp->ev = (struct b_edge *) calloc(MAXE, sizeof (*fp->ev)); fp->sv = (struct b_side *) calloc(MAXS, sizeof (*fp->sv)); fp->tv = (struct b_texc *) calloc(MAXT, sizeof (*fp->tv)); + fp->ov = (struct b_offs *) calloc(MAXO, sizeof (*fp->ov)); fp->gv = (struct b_geom *) calloc(MAXG, sizeof (*fp->gv)); fp->lv = (struct b_lump *) calloc(MAXL, sizeof (*fp->lv)); fp->nv = (struct b_node *) calloc(MAXN, sizeof (*fp->nv)); @@ -400,6 +413,8 @@ static void size_image(const char *name, int *w, int *h) static int read_mtrl(struct s_base *fp, const char *name) { static char line[MAXSTR]; + static char word[MAXSTR]; + struct b_mtrl *mp; fs_file fin; int mi; @@ -432,7 +447,27 @@ static int read_mtrl(struct s_base *fp, const char *name) mp->h[0] = strtod(line, NULL); if (fs_gets(line, sizeof (line), fin)) - mp->fl = strtol(line, NULL, 10); + { + char *p = line; + int f = 0; + int n; + + while (sscanf(p, "%s%n", word, &n) > 0) + { + if (strcmp(word, "additive") == 0) f |= M_ADDITIVE; + else if (strcmp(word, "clamp-s") == 0) f |= M_CLAMP_S; + else if (strcmp(word, "clamp-t") == 0) f |= M_CLAMP_T; + else if (strcmp(word, "decal") == 0) f |= M_DECAL; + else if (strcmp(word, "environment") == 0) f |= M_ENVIRONMENT; + else if (strcmp(word, "reflective") == 0) f |= M_REFLECTIVE; + else if (strcmp(word, "shadowed") == 0) f |= M_SHADOWED; + else if (strcmp(word, "transparent") == 0) f |= M_TRANSPARENT; + else if (strcmp(word, "two-sided") == 0) f |= M_TWO_SIDED; + + p += n; + } + mp->fl = f; + } if (fs_gets(line, sizeof (line), fin)) mp->angle = strtod(line, NULL); @@ -496,9 +531,11 @@ static void move_body(struct s_base *fp, for (i = 0; i < bp->gc; i++) { - b[fp->gv[fp->iv[bp->g0 + i]].vi] = 1; - b[fp->gv[fp->iv[bp->g0 + i]].vj] = 1; - b[fp->gv[fp->iv[bp->g0 + i]].vk] = 1; + const struct b_geom *gp = fp->gv + fp->iv[bp->g0 + i]; + + b[fp->ov[gp->oi].vi] = 1; + b[fp->ov[gp->oj].vi] = 1; + b[fp->ov[gp->ok].vi] = 1; } /* Apply the motion to the marked vertices. */ @@ -555,24 +592,28 @@ static void read_f(struct s_base *fp, const char *line, int v0, int t0, int s0, int mi) { struct b_geom *gp = fp->gv + incg(fp); + + struct b_offs *op = fp->ov + (gp->oi = inco(fp)); + struct b_offs *oq = fp->ov + (gp->oj = inco(fp)); + struct b_offs *or = fp->ov + (gp->ok = inco(fp)); char c1; char c2; sscanf(line, "%d%c%d%c%d %d%c%d%c%d %d%c%d%c%d", - &gp->vi, &c1, &gp->ti, &c2, &gp->si, - &gp->vj, &c1, &gp->tj, &c2, &gp->sj, - &gp->vk, &c1, &gp->tk, &c2, &gp->sk); - - gp->vi += (v0 - 1); - gp->vj += (v0 - 1); - gp->vk += (v0 - 1); - gp->ti += (t0 - 1); - gp->tj += (t0 - 1); - gp->tk += (t0 - 1); - gp->si += (s0 - 1); - gp->sj += (s0 - 1); - gp->sk += (s0 - 1); + &op->vi, &c1, &op->ti, &c2, &op->si, + &oq->vi, &c1, &oq->ti, &c2, &oq->si, + &or->vi, &c1, &or->ti, &c2, &or->si); + + op->vi += (v0 - 1); + oq->vi += (v0 - 1); + or->vi += (v0 - 1); + op->ti += (t0 - 1); + oq->ti += (t0 - 1); + or->ti += (t0 - 1); + op->si += (s0 - 1); + oq->si += (s0 - 1); + or->si += (s0 - 1); gp->mi = mi; } @@ -1053,7 +1094,7 @@ static void make_bill(struct s_base *fp, if (strcmp(k[i], "image") == 0) { rp->mi = read_mtrl(fp, v[i]); - fp->mv[rp->mi].fl |= M_CLAMPED; + fp->mv[rp->mi].fl |= M_CLAMP_S | M_CLAMP_T; } if (strcmp(k[i], "origin") == 0) @@ -1529,24 +1570,31 @@ static void clip_geom(struct s_base *fp, for (i = 0; i < n - 2; i++) { - fp->gv[fp->gc].mi = plane_m[si]; + const int gi = incg(fp); - fp->gv[fp->gc].ti = t[0]; - fp->gv[fp->gc].tj = t[i + 1]; - fp->gv[fp->gc].tk = t[i + 2]; + struct b_geom *gp = fp->gv + gi; - fp->gv[fp->gc].si = si; - fp->gv[fp->gc].sj = si; - fp->gv[fp->gc].sk = si; + struct b_offs *op = fp->ov + (gp->oi = inco(fp)); + struct b_offs *oq = fp->ov + (gp->oj = inco(fp)); + struct b_offs *or = fp->ov + (gp->ok = inco(fp)); - fp->gv[fp->gc].vi = m[0]; - fp->gv[fp->gc].vj = m[i + 1]; - fp->gv[fp->gc].vk = m[i + 2]; + gp->mi = plane_m[si]; - fp->iv[fp->ic] = fp->gc; - inci(fp); - incg(fp); + op->ti = t[0]; + oq->ti = t[i + 1]; + or->ti = t[i + 2]; + + op->si = si; + oq->si = si; + or->si = si; + + op->vi = m[0]; + oq->vi = m[i + 1]; + or->vi = m[i + 2]; + + fp->iv[fp->ic] = gi; lp->gc++; + inci(fp); } } @@ -1672,27 +1720,35 @@ static int comp_texc(const struct b_texc *tp, const struct b_texc *tq) return 1; } -static int comp_geom(const struct b_geom *gp, const struct b_geom *gq) +static int comp_offs(const struct b_offs *op, const struct b_offs *oq) { - if (gp->mi != gq->mi) return 0; + if (op->ti != oq->ti) return 0; + if (op->si != oq->si) return 0; + if (op->vi != oq->vi) return 0; - if (gp->ti != gq->ti) return 0; - if (gp->si != gq->si) return 0; - if (gp->vi != gq->vi) return 0; - - if (gp->tj != gq->tj) return 0; - if (gp->sj != gq->sj) return 0; - if (gp->vj != gq->vj) return 0; + return 1; +} - if (gp->tk != gq->tk) return 0; - if (gp->sk != gq->sk) return 0; - if (gp->vk != gq->vk) return 0; +static int comp_geom(const struct b_geom *gp, const struct b_geom *gq) +{ + if (gp->mi != gq->mi) return 0; + if (gp->oi != gq->oi) return 0; + if (gp->oj != gq->oj) return 0; + if (gp->ok != gq->ok) return 0; return 1; } /*---------------------------------------------------------------------------*/ +static int mtrl_swaps[MAXM]; +static int vert_swaps[MAXV]; +static int edge_swaps[MAXE]; +static int side_swaps[MAXS]; +static int texc_swaps[MAXT]; +static int offs_swaps[MAXO]; +static int geom_swaps[MAXG]; + /* * For each file element type, replace all references to element 'i' * with a reference to element 'j'. These are used when optimizing @@ -1709,55 +1765,54 @@ static void swap_mtrl(struct s_base *fp, int mi, int mj) if (fp->rv[i].mi == mi) fp->rv[i].mi = mj; } -static int vert_swaps[MAXV]; - -static void apply_vert_swaps(struct s_base *fp) +static void swap_vert(struct s_base *fp, int vi, int vj) { int i, j; for (i = 0; i < fp->ec; i++) { - fp->ev[i].vi = vert_swaps[fp->ev[i].vi]; - fp->ev[i].vj = vert_swaps[fp->ev[i].vj]; + if (fp->ev[i].vi == vi) fp->ev[i].vi = vj; + if (fp->ev[i].vj == vi) fp->ev[i].vj = vj; } - for (i = 0; i < fp->gc; i++) - { - fp->gv[i].vi = vert_swaps[fp->gv[i].vi]; - fp->gv[i].vj = vert_swaps[fp->gv[i].vj]; - fp->gv[i].vk = vert_swaps[fp->gv[i].vk]; - } + for (i = 0; i < fp->oc; i++) + if (fp->ov[i].vi == vi) fp->ov[i].vi = vj; for (i = 0; i < fp->lc; i++) for (j = 0; j < fp->lv[i].vc; j++) - fp->iv[fp->lv[i].v0 + j] = vert_swaps[fp->iv[fp->lv[i].v0 + j]]; + if (fp->iv[fp->lv[i].v0 + j] == vi) + fp->iv[fp->lv[i].v0 + j] = vj; } -static void swap_vert(struct s_base *fp, int vi, int vj) +static void apply_mtrl_swaps(struct s_base *fp) +{ + int i; + + for (i = 0; i < fp->gc; i++) + fp->gv[i].mi = mtrl_swaps[fp->gv[i].mi]; + for (i = 0; i < fp->rc; i++) + fp->rv[i].mi = mtrl_swaps[fp->rv[i].mi]; +} + + +static void apply_vert_swaps(struct s_base *fp) { int i, j; for (i = 0; i < fp->ec; i++) { - if (fp->ev[i].vi == vi) fp->ev[i].vi = vj; - if (fp->ev[i].vj == vi) fp->ev[i].vj = vj; + fp->ev[i].vi = vert_swaps[fp->ev[i].vi]; + fp->ev[i].vj = vert_swaps[fp->ev[i].vj]; } - for (i = 0; i < fp->gc; i++) - { - if (fp->gv[i].vi == vi) fp->gv[i].vi = vj; - if (fp->gv[i].vj == vi) fp->gv[i].vj = vj; - if (fp->gv[i].vk == vi) fp->gv[i].vk = vj; - } + for (i = 0; i < fp->oc; i++) + fp->ov[i].vi = vert_swaps[fp->ov[i].vi]; for (i = 0; i < fp->lc; i++) for (j = 0; j < fp->lv[i].vc; j++) - if (fp->iv[fp->lv[i].v0 + j] == vi) - fp->iv[fp->lv[i].v0 + j] = vj; + fp->iv[fp->lv[i].v0 + j] = vert_swaps[fp->iv[fp->lv[i].v0 + j]]; } -static int edge_swaps[MAXE]; - static void apply_edge_swaps(struct s_base *fp) { int i, j; @@ -1767,18 +1822,12 @@ static void apply_edge_swaps(struct s_base *fp) fp->iv[fp->lv[i].e0 + j] = edge_swaps[fp->iv[fp->lv[i].e0 + j]]; } -static int side_swaps[MAXS]; - static void apply_side_swaps(struct s_base *fp) { int i, j; - for (i = 0; i < fp->gc; i++) - { - fp->gv[i].si = side_swaps[fp->gv[i].si]; - fp->gv[i].sj = side_swaps[fp->gv[i].sj]; - fp->gv[i].sk = side_swaps[fp->gv[i].sk]; - } + for (i = 0; i < fp->oc; i++) + fp->ov[i].si = side_swaps[fp->ov[i].si]; for (i = 0; i < fp->nc; i++) fp->nv[i].si = side_swaps[fp->nv[i].si]; @@ -1787,22 +1836,26 @@ static void apply_side_swaps(struct s_base *fp) fp->iv[fp->lv[i].s0 + j] = side_swaps[fp->iv[fp->lv[i].s0 + j]]; } -static int texc_swaps[MAXT]; - static void apply_texc_swaps(struct s_base *fp) { int i; + for (i = 0; i < fp->oc; i++) + fp->ov[i].ti = texc_swaps[fp->ov[i].ti]; +} + +static void apply_offs_swaps(struct s_base *fp) +{ + int i; + for (i = 0; i < fp->gc; i++) { - fp->gv[i].ti = texc_swaps[fp->gv[i].ti]; - fp->gv[i].tj = texc_swaps[fp->gv[i].tj]; - fp->gv[i].tk = texc_swaps[fp->gv[i].tk]; + fp->gv[i].oi = offs_swaps[fp->gv[i].oi]; + fp->gv[i].oj = offs_swaps[fp->gv[i].oj]; + fp->gv[i].ok = offs_swaps[fp->gv[i].ok]; } } -static int geom_swaps[MAXG]; - static void apply_geom_swaps(struct s_base *fp) { int i, j; @@ -1826,22 +1879,20 @@ static void uniq_mtrl(struct s_base *fp) { for (j = 0; j < k; j++) if (comp_mtrl(fp->mv + i, fp->mv + j)) - { - swap_mtrl(fp, i, j); break; - } + + mtrl_swaps[i] = j; if (j == k) { if (i != k) - { fp->mv[k] = fp->mv[i]; - swap_mtrl(fp, i, k); - } k++; } } + apply_mtrl_swaps(fp); + fp->mc = k; } @@ -1895,34 +1946,49 @@ static void uniq_edge(struct s_base *fp) fp->ec = k; } -static int geomlist[MAXV]; -static int nextgeom[MAXG]; - -static void uniq_geom(struct s_base *fp) +static void uniq_offs(struct s_base *fp) { int i, j, k = 0; - for (i = 0; i < MAXV; i++) - geomlist[i] = -1; - - for (i = 0; i < fp->gc; i++) + for (i = 0; i < fp->oc; i++) { - int key = fp->gv[i].vj; + for (j = 0; j < k; j++) + if (comp_offs(fp->ov + i, fp->ov + j)) + break; - for (j = geomlist[key]; j != -1; j = nextgeom[j]) - if (comp_geom(fp->gv + i, fp->gv + j)) - goto found; + offs_swaps[i] = j; + + if (j == k) + { + if (i != k) + fp->ov[k] = fp->ov[i]; + k++; + } + } - fp->gv[k] = fp->gv[i]; + apply_offs_swaps(fp); - nextgeom[k] = geomlist[key]; - geomlist[key] = k; + fp->oc = k; +} - j = k; - k++; +static void uniq_geom(struct s_base *fp) +{ + int i, j, k = 0; + + for (i = 0; i < fp->gc; i++) + { + for (j = 0; j < k; j++) + if (comp_geom(fp->gv + i, fp->gv + j)) + break; -found: geom_swaps[i] = j; + + if (j == k) + { + if (i != k) + fp->gv[k] = fp->gv[i]; + k++; + } } apply_geom_swaps(fp); @@ -1991,6 +2057,7 @@ static void uniq_file(struct s_base *fp) uniq_edge(fp); uniq_side(fp); uniq_texc(fp); + uniq_offs(fp); uniq_geom(fp); } } @@ -2034,21 +2101,21 @@ static void smth_file(struct s_base *fp) { struct b_geom *gp = fp->gv + gi; - T[c].vi = gp->vi; + T[c].vi = fp->ov[gp->oi].vi; + T[c].si = fp->ov[gp->oi].si; T[c].mi = gp->mi; - T[c].si = gp->si; T[c].gi = gi; c++; - T[c].vi = gp->vj; + T[c].vi = fp->ov[gp->oj].vi; + T[c].si = fp->ov[gp->oj].si; T[c].mi = gp->mi; - T[c].si = gp->sj; T[c].gi = gi; c++; - T[c].vi = gp->vk; + T[c].vi = fp->ov[gp->ok].vi; + T[c].si = fp->ov[gp->ok].si; T[c].mi = gp->mi; - T[c].si = gp->sk; T[c].gi = gi; c++; } @@ -2131,26 +2198,46 @@ static void smth_file(struct s_base *fp) for (i = 0; i < c; ++i) { struct b_geom *gp = fp->gv + T[i].gi; + struct b_offs *op = fp->ov + gp->oi; + struct b_offs *oq = fp->ov + gp->oj; + struct b_offs *or = fp->ov + gp->ok; - if (gp->vi == T[i].vi) gp->si = T[i].si; - if (gp->vj == T[i].vi) gp->sj = T[i].si; - if (gp->vk == T[i].vi) gp->sk = T[i].si; + if (op->vi == T[i].vi) op->si = T[i].si; + if (oq->vi == T[i].vi) oq->si = T[i].si; + if (or->vi == T[i].vi) or->si = T[i].si; } free(T); } uniq_side(fp); + uniq_offs(fp); } } - /*---------------------------------------------------------------------------*/ static void sort_file(struct s_base *fp) { int i, j; + /* Sort materials by type to minimize state changes. */ + + for (i = 0; i < fp->mc; i++) + for (j = i + 1; j < fp->mc; j++) + if (fp->mv[i].fl > fp->mv[j].fl) + { + struct b_mtrl t; + + t = fp->mv[i]; + fp->mv[i] = fp->mv[j]; + fp->mv[j] = t; + + swap_mtrl(fp, i, -1); + swap_mtrl(fp, j, i); + swap_mtrl(fp, -1, j); + } + /* Sort billboards by material within distance. */ for (i = 0; i < fp->rc; i++) @@ -2426,12 +2513,11 @@ static void node_file(struct s_base *fp) /*---------------------------------------------------------------------------*/ -static void dump_file(struct s_base *p, const char *name) +static void dump_file(struct s_base *p, const char *name, double t) { - int i, j; + int i; int c = 0; int n = 0; - int m; /* Count the number of solid lumps. */ @@ -2439,41 +2525,34 @@ static void dump_file(struct s_base *p, const char *name) if ((p->lv[i].fl & 1) == 0) n++; - /* Count the number of visible geoms. */ - - m = p->rc + (p->zc + p->jc + p->xc) * 32; - - for (i = 0; i < p->hc; i++) - if (p->hv[i].t == ITEM_COIN) - m += 124; - else - m += 304; - - for (i = 0; i < p->bc; i++) - { - for (j = 0; j < p->bv[i].lc; j++) - m += p->lv[p->bv[i].l0 + j].gc; - m += p->bv[i].gc; - } - /* Count the total value of all coins. */ for (i = 0; i < p->hc; i++) if (p->hv[i].t == ITEM_COIN) c += p->hv[i].n; - printf("%s (%d/%d/$%d)\n" - " mtrl vert edge side texc" - " geom lump path node body\n" - "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n" - " item goal view jump swch" - " bill ball char dict indx\n" - "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n", - name, n, m, c, - p->mc, p->vc, p->ec, p->sc, p->tc, - p->gc, p->lc, p->pc, p->nc, p->bc, - p->hc, p->zc, p->wc, p->jc, p->xc, - p->rc, p->uc, p->ac, p->dc, p->ic); + if (csv_output) + printf("%s,%d,%d,%.3f" + "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d," + "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n", + name, n, c, t, + p->mc, p->vc, p->ec, p->sc, p->tc, + p->oc, p->gc, p->lc, p->pc, p->nc, p->bc, + p->hc, p->zc, p->wc, p->jc, p->xc, + p->rc, p->uc, p->ac, p->dc, p->ic); + else + printf("%s (%d/$%d) %.3f\n" + " mtrl vert edge side texc" + " offs geom lump path node body\n" + "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n" + " item goal view jump swch" + " bill ball char dict indx\n" + "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n", + name, n, c, t, + p->mc, p->vc, p->ec, p->sc, p->tc, + p->oc, p->gc, p->lc, p->pc, p->nc, p->bc, + p->hc, p->zc, p->wc, p->jc, p->xc, + p->rc, p->uc, p->ac, p->dc, p->ic); } int main(int argc, char *argv[]) @@ -2494,10 +2573,15 @@ int main(int argc, char *argv[]) if (argc > 2) { + int argi; + input_file = argv[1]; - if (argc > 3 && strcmp(argv[3], "--debug") == 0) - debug_output = 1; + for (argi = 3; argi < argc; ++argi) + { + if (strcmp(argv[argi], "--debug") == 0) debug_output = 1; + if (strcmp(argv[argi], "--csv") == 0) csv_output = 1; + } strncpy(src, argv[1], MAXSTR - 1); strncpy(dst, argv[1], MAXSTR - 1); @@ -2520,28 +2604,34 @@ int main(int argc, char *argv[]) return 1; } - init_file(&f); - read_map(&f, fin); + gettimeofday(&t0, 0); + { + init_file(&f); + read_map(&f, fin); + + resolve(); + targets(&f); - resolve(); - targets(&f); + clip_file(&f); + move_file(&f); + uniq_file(&f); + smth_file(&f); + sort_file(&f); + node_file(&f); - clip_file(&f); - move_file(&f); - uniq_file(&f); - smth_file(&f); - sort_file(&f); - node_file(&f); - dump_file(&f, dst); + sol_stor_base(&f, base_name(dst)); + } + gettimeofday(&t1, 0); - sol_stor_base(&f, base_name(dst)); + dump_file(&f, dst, (t1.tv_sec - t0.tv_sec) + + (t1.tv_usec - t0.tv_usec) / 1000000.0); fs_close(fin); free_imagedata(); } } - else fprintf(stderr, "Usage: %s [--debug]\n", argv[0]); + else fprintf(stderr, "Usage: %s [--debug] [--csv]\n", argv[0]); return 0; } diff --git a/share/part.c b/share/part.c index 1583f67..35299f4 100644 --- a/share/part.c +++ b/share/part.c @@ -17,32 +17,47 @@ #include #include +#include "config.h" #include "glext.h" #include "part.h" #include "vec3.h" #include "image.h" +#include "geom.h" /*---------------------------------------------------------------------------*/ +/* +#define PARTICLEVBO 1 +*/ + +struct part_vary +{ + GLfloat v[3]; /* Velocity */ +}; -struct part +struct part_draw { - float t; - float a; - float w; - float c[3]; - float p[3]; - float v[3]; + GLfloat p[3]; /* Position */ + GLfloat c[3]; /* Color */ + GLfloat t; /* Time until death. Doubles as opacity. */ }; -static struct part part_coin[PART_MAX_COIN]; -static struct part part_goal[PART_MAX_GOAL]; -static struct part part_jump[PART_MAX_JUMP]; -static GLuint part_text_star; -static GLuint part_text_squiggle; -static GLuint part_list; +static struct part_vary coin_vary[PART_MAX_COIN]; +static struct part_draw coin_draw[PART_MAX_COIN]; + +static GLuint coin_vbo; + +/*---------------------------------------------------------------------------*/ + +static struct b_mtrl coin_base_mtrl = +{ + { 0.8f, 0.8f, 0.8f, 1.0f }, + { 0.2f, 0.2f, 0.2f, 1.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + { 0.0f, 0.0f, 0.0f, 1.0f }, + { 0.0f }, 0.0f, M_TRANSPARENT, IMG_PART_STAR +}; -static float goal_height; -static float jump_height; +static struct d_mtrl coin_draw_mtrl; /*---------------------------------------------------------------------------*/ @@ -64,48 +79,26 @@ struct part_lerp }; static struct part_lerp part_lerp_coin[PART_MAX_COIN]; -static struct part_lerp part_lerp_goal[PART_MAX_GOAL]; -static struct part_lerp part_lerp_jump[PART_MAX_JUMP]; void part_lerp_copy(void) { int i; for (i = 0; i < PART_MAX_COIN; i++) - v_cpy(part_lerp_coin[i].p[PREV], part_lerp_coin[i].p[CURR]); - - for (i = 0; i < PART_MAX_GOAL; i++) - v_cpy(part_lerp_goal[i].p[PREV], part_lerp_goal[i].p[CURR]); - - for (i = 0; i < PART_MAX_JUMP; i++) - v_cpy(part_lerp_jump[i].p[PREV], part_lerp_jump[i].p[CURR]); + v_cpy(part_lerp_coin[i].p[PREV], + part_lerp_coin[i].p[CURR]); } void part_lerp_init(void) { - int i; - - for (i = 0; i < PART_MAX_GOAL; i++) - if (part_goal[i].t > 0.0f) - { - v_cpy(part_lerp_goal[i].p[PREV], part_goal[i].p); - v_cpy(part_lerp_goal[i].p[CURR], part_goal[i].p); - } - - for (i = 0; i < PART_MAX_JUMP; i++) - if (part_jump[i].t > 0.0f) - { - v_cpy(part_lerp_jump[i].p[PREV], part_jump[i].p); - v_cpy(part_lerp_jump[i].p[CURR], part_jump[i].p); - } } void part_lerp_burst(int i) { - if (part_coin[i].t >= 1.0f) + if (coin_draw[i].t >= 1.0f) { - v_cpy(part_lerp_coin[i].p[PREV], part_coin[i].p); - v_cpy(part_lerp_coin[i].p[CURR], part_coin[i].p); + v_cpy(part_lerp_coin[i].p[PREV], coin_draw[i].p); + v_cpy(part_lerp_coin[i].p[CURR], coin_draw[i].p); } } @@ -114,137 +107,58 @@ void part_lerp_apply(float a) int i; for (i = 0; i < PART_MAX_COIN; i++) - if (part_coin[i].t > 0.0f) - { - v_lerp(part_coin[i].p, + if (coin_draw[i].t > 0.0f) + v_lerp(coin_draw[i].p, part_lerp_coin[i].p[PREV], part_lerp_coin[i].p[CURR], a); - } - for (i = 0; i < PART_MAX_GOAL; i++) - if (part_goal[i].t > 0.0f) - { - v_lerp(part_goal[i].p, - part_lerp_goal[i].p[PREV], - part_lerp_goal[i].p[CURR], a); - } + /* Upload the current state of the particles. It would be best to limit */ + /* this upload to only active particles, but it's more important to do */ + /* it all in a single call. */ - for (i = 0; i < PART_MAX_GOAL; i++) - if (part_jump[i].t > 0.0f) - { - v_lerp(part_jump[i].p, - part_lerp_jump[i].p[PREV], - part_lerp_jump[i].p[CURR], a); - } +#ifdef PARTICLEVBO + glBindBuffer_ (GL_ARRAY_BUFFER, coin_vbo); + glBufferSubData_(GL_ARRAY_BUFFER, 0, sizeof (coin_draw), coin_draw); + glBindBuffer_ (GL_ARRAY_BUFFER, 0); +#endif } /*---------------------------------------------------------------------------*/ -void part_reset(float zh, float jh) +void part_reset(void) { int i; - goal_height = zh; - jump_height = jh; - for (i = 0; i < PART_MAX_COIN; i++) - part_coin[i].t = 0.0f; - - for (i = 0; i < PART_MAX_GOAL; i++) - { - float t = rnd(+0.1f, +1.0f); - float a = rnd(-1.0f * PI, +1.0f * PI); - float w = rnd(-2.0f * PI, +2.0f * PI); - - part_goal[i].t = t; - part_goal[i].a = V_DEG(a); - part_goal[i].w = V_DEG(w); - - part_goal[i].c[0] = 1.0f; - part_goal[i].c[1] = 1.0f; - part_goal[i].c[2] = 0.0f; - - part_goal[i].p[0] = fsinf(a); - part_goal[i].p[1] = (1.f - t) * goal_height; - part_goal[i].p[2] = fcosf(a); - - part_goal[i].v[0] = 0.f; - part_goal[i].v[1] = 0.f; - part_goal[i].v[2] = 0.f; - } - - for (i = 0; i < PART_MAX_JUMP; i++) - { - float t = rnd(+0.1f, +1.0f); - float a = rnd(-1.0f * PI, +1.0f * PI); - float w = rnd(+0.5f, +2.5f); - - float vy = rnd(+0.025f, +0.25f); - - part_jump[i].t = t; - part_jump[i].a = V_DEG(a); - part_jump[i].w = w; - - part_jump[i].c[0] = 1.0f; - part_jump[i].c[1] = 1.0f; - part_jump[i].c[2] = 1.0f; - - part_jump[i].p[0] = fsinf(a); - part_jump[i].p[1] = (1.f - t) * jump_height; - part_jump[i].p[2] = fcosf(a); - - part_jump[i].v[0] = 0.f; - part_jump[i].v[1] = vy; - part_jump[i].v[2] = 0.f; - } + coin_draw[i].t = 0.0f; part_lerp_init(); } -void part_init(float zh, float jh) +void part_init(void) { - memset(part_coin, 0, PART_MAX_COIN * sizeof (struct part)); - memset(part_goal, 0, PART_MAX_GOAL * sizeof (struct part)); - memset(part_jump, 0, PART_MAX_JUMP * sizeof (struct part)); - - part_text_star = make_image_from_file(IMG_PART_STAR); - part_text_squiggle = make_image_from_file(IMG_PART_SQUIGGLE); - - part_list = glGenLists(1); - - glNewList(part_list, GL_COMPILE); - { - glBegin(GL_QUADS); - { - glTexCoord2f(0.f, 0.f); - glVertex2f(-PART_SIZE, -PART_SIZE); - - glTexCoord2f(1.f, 0.f); - glVertex2f(+PART_SIZE, -PART_SIZE); + sol_load_mtrl(&coin_draw_mtrl, &coin_base_mtrl); - glTexCoord2f(1.f, 1.f); - glVertex2f(+PART_SIZE, +PART_SIZE); + memset(coin_vary, 0, PART_MAX_COIN * sizeof (struct part_vary)); + memset(coin_draw, 0, PART_MAX_COIN * sizeof (struct part_draw)); - glTexCoord2f(0.f, 1.f); - glVertex2f(-PART_SIZE, +PART_SIZE); - } - glEnd(); - } - glEndList(); +#ifdef PARTICLEVBO + glGenBuffers_(1, &coin_vbo); + glBindBuffer_(GL_ARRAY_BUFFER, coin_vbo); + glBufferData_(GL_ARRAY_BUFFER, sizeof (coin_draw), + coin_draw, GL_DYNAMIC_DRAW); + glBindBuffer_(GL_ARRAY_BUFFER, 0); +#endif - part_reset(zh, jh); + part_reset(); } void part_free(void) { - if (glIsList(part_list)) - glDeleteLists(part_list, 1); - - if (glIsTexture(part_text_star)) - glDeleteTextures(1, &part_text_star); + if (glIsBuffer_(coin_vbo)) + glDeleteBuffers_(1, &coin_vbo); - if (glIsTexture(part_text_squiggle)) - glDeleteTextures(1, &part_text_squiggle); + sol_free_mtrl(&coin_draw_mtrl); } /*---------------------------------------------------------------------------*/ @@ -254,27 +168,24 @@ void part_burst(const float *p, const float *c) int i, n = 0; for (i = 0; n < 10 && i < PART_MAX_COIN; i++) - if (part_coin[i].t <= 0.f) + if (coin_draw[i].t <= 0.f) { float a = rnd(-1.0f * PI, +1.0f * PI); float b = rnd(+0.3f * PI, +0.5f * PI); - float w = rnd(-4.0f * PI, +4.0f * PI); - part_coin[i].p[0] = p[0]; - part_coin[i].p[1] = p[1]; - part_coin[i].p[2] = p[2]; + coin_draw[i].c[0] = c[0]; + coin_draw[i].c[1] = c[1]; + coin_draw[i].c[2] = c[2]; - part_coin[i].v[0] = 4.f * fcosf(a) * fcosf(b); - part_coin[i].v[1] = 4.f * fsinf(b); - part_coin[i].v[2] = 4.f * fsinf(a) * fcosf(b); + coin_draw[i].p[0] = p[0]; + coin_draw[i].p[1] = p[1]; + coin_draw[i].p[2] = p[2]; - part_coin[i].c[0] = c[0]; - part_coin[i].c[1] = c[1]; - part_coin[i].c[2] = c[2]; + coin_vary[i].v[0] = 4.f * fcosf(a) * fcosf(b); + coin_vary[i].v[1] = 4.f * fsinf(b); + coin_vary[i].v[2] = 4.f * fsinf(a) * fcosf(b); - part_coin[i].t = 1.f; - part_coin[i].a = 0.f; - part_coin[i].w = V_DEG(w); + coin_draw[i].t = 1.f; part_lerp_burst(i); @@ -285,139 +196,94 @@ void part_burst(const float *p, const float *c) /*---------------------------------------------------------------------------*/ static void part_fall(struct part_lerp *lerp, - struct part *part, int n, - const float *g, float dt) + struct part_vary *vary, + struct part_draw *draw, + int n, const float *g, float dt) { int i; for (i = 0; i < n; i++) - if (part[i].t > 0.f) + if (draw[i].t > 0.f) { - part[i].t -= dt; - - v_mad(part[i].v, part[i].v, g, dt); - - v_mad(lerp[i].p[CURR], lerp[i].p[CURR], part[i].v, dt); - } -} - -static void part_spin(struct part_lerp *lerp, - struct part *part, int n, - const float *g, float dt) -{ - int i; + draw[i].t -= dt; - for (i = 0; i < n; i++) - if (part[i].t > 0.f) - { - part[i].a += 30.f * dt; + v_mad(vary[i].v, vary[i].v, g, dt); - lerp[i].p[CURR][0] = fsinf(V_RAD(part[i].a)); - lerp[i].p[CURR][2] = fcosf(V_RAD(part[i].a)); + v_mad(lerp[i].p[CURR], lerp[i].p[CURR], vary[i].v, dt); } + else draw[i].t = 0.0f; } void part_step(const float *g, float dt) { - int i; - part_lerp_copy(); - - part_fall(part_lerp_coin, part_coin, PART_MAX_COIN, g, dt); - - if (g[1] > 0.f) - part_fall(part_lerp_goal, part_goal, PART_MAX_GOAL, g, dt); - else - part_spin(part_lerp_goal, part_goal, PART_MAX_GOAL, g, dt); - - for (i = 0; i < PART_MAX_JUMP; i++) - { - part_lerp_jump[i].p[CURR][1] += part_jump[i].v[1] * dt; - - if (part_lerp_jump[i].p[PREV][1] > jump_height) - { - part_lerp_jump[i].p[PREV][1] = 0.0f; - part_lerp_jump[i].p[CURR][1] = 0.0f; - } - } + part_fall(part_lerp_coin, coin_vary, coin_draw, PART_MAX_COIN, g, dt); } /*---------------------------------------------------------------------------*/ -static void part_draw(const float *M, - const float *p, float r, float rz, float s) +void part_draw_coin(struct s_rend *rend) { - glPushMatrix(); - { - glTranslatef(r * p[0], p[1], r * p[2]); - glMultMatrixf(M); - glRotatef(rz, 0.f, 0.f, 1.f); - glScalef(s, s, 1.0f); + const GLfloat c[3] = { 0.0f, 1.0f, 0.0f }; + GLint s = config_get_d(CONFIG_HEIGHT) / 8; - glCallList(part_list); - } - glPopMatrix(); -} - -void part_draw_coin(const float *M, float t) -{ - int i; - - glBindTexture(GL_TEXTURE_2D, part_text_star); - - for (i = 0; i < PART_MAX_COIN; i++) - if (part_coin[i].t > 0.f) - { - glColor4f(part_coin[i].c[0], - part_coin[i].c[1], - part_coin[i].c[2], - part_coin[i].t); + sol_apply_mtrl(&coin_draw_mtrl, rend); - part_draw(M, part_coin[i].p, 1.0f, t * part_coin[i].w, 1.0f); - } -} + /* Draw the entire buffer. Dead particles have zero opacity anyway. */ -void part_draw_goal(const float *M, float radius, float a, float t) -{ - int i; +#ifdef PARTICLEVBO + glBindBuffer_(GL_ARRAY_BUFFER, coin_vbo); +#else + glBindBuffer_(GL_ARRAY_BUFFER, 0); +#endif - glBindTexture(GL_TEXTURE_2D, part_text_star); - - glColor4f(1.0f, 1.0f, 0.0f, a); - - for (i = 0; i < PART_MAX_GOAL; i++) - if (part_goal[i].t > 0.0f) - part_draw(M, part_goal[i].p, radius - 0.05f, - t * part_goal[i].w, 1.0f); -} + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glDisableClientState(GL_TEXTURE_COORD_ARRAY); -void part_draw_jump(const float *M, float radius, float a, float t) -{ - int i; + if (tex_env_stage(TEX_STAGE_CLIP)) + glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glBindTexture(GL_TEXTURE_2D, part_text_squiggle); + tex_env_stage(TEX_STAGE_TEXTURE); + } + glDisableClientState(GL_TEXTURE_COORD_ARRAY); - for (i = 0; i < PART_MAX_JUMP; i++) + glDisableClientState(GL_NORMAL_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); { - glColor4f(part_jump[i].c[0], - part_jump[i].c[1], - part_jump[i].c[2], - 1.0f - part_jump[i].p[1] / jump_height); +#ifdef PARTICLEVBO + glColorPointer (4, GL_FLOAT, sizeof (struct part_draw), + (GLvoid *) offsetof (struct part_draw, c)); + glVertexPointer(3, GL_FLOAT, sizeof (struct part_draw), + (GLvoid *) offsetof (struct part_draw, p)); +#else + glColorPointer (4, GL_FLOAT, sizeof (struct part_draw), coin_draw[0].c); + glVertexPointer(3, GL_FLOAT, sizeof (struct part_draw), coin_draw[0].p); +#endif + + glEnable(GL_POINT_SPRITE); + { + glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE); + glPointParameterfv_(GL_POINT_DISTANCE_ATTENUATION, c); + glPointSize(s); - /* - * X is the current time since some Epoch, Y is the time it - * takes for a squiggle to grow to its full size and then - * shrink again. F is the current scale of the squiggle in - * the interval [0.0, 1.0]. - */ + glDrawArrays(GL_POINTS, 0, PART_MAX_COIN); + } + glDisable(GL_POINT_SPRITE); + } + glDisableClientState(GL_COLOR_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); -#define F(x, y) fabsf(fcosf(((x) / (y)) * PI)) + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - part_draw(M, part_jump[i].p, radius - 0.05f, - 0.0f, F(t, part_jump[i].w)); + if (tex_env_stage(TEX_STAGE_CLIP)) + glEnableClientState(GL_TEXTURE_COORD_ARRAY); -#undef F + tex_env_stage(TEX_STAGE_TEXTURE); } + glEnableClientState(GL_TEXTURE_COORD_ARRAY); } /*---------------------------------------------------------------------------*/ diff --git a/share/part.h b/share/part.h index 08cc645..41583ac 100644 --- a/share/part.h +++ b/share/part.h @@ -1,12 +1,13 @@ #ifndef PART_H #define PART_H +#include "solid_draw.h" + /*---------------------------------------------------------------------------*/ -#define IMG_PART_STAR "png/part.png" -#define IMG_PART_SQUIGGLE "png/squiggle.png" +#define IMG_PART_STAR "png/part" -#define PART_MAX_COIN 256 +#define PART_MAX_COIN 64 #define PART_MAX_GOAL 64 #define PART_MAX_JUMP 64 @@ -14,16 +15,14 @@ /*---------------------------------------------------------------------------*/ -void part_reset(float, float); -void part_init(float, float); +void part_reset(void); +void part_init(void); void part_free(void); void part_burst(const float *, const float *); void part_step(const float *, float); -void part_draw_coin(const float *, float); -void part_draw_goal(const float *, float, float, float); -void part_draw_jump(const float *, float, float, float); +void part_draw_coin(struct s_rend *); void part_lerp_apply(float); diff --git a/share/solid_base.c b/share/solid_base.c index cecece3..4e9041a 100644 --- a/share/solid_base.c +++ b/share/solid_base.c @@ -26,8 +26,8 @@ enum { SOL_VER_MINIMUM = 6, - SOL_VER_PATH_FLAGS, - SOL_VER_CURRENT = SOL_VER_PATH_FLAGS + SOL_VER_GLES, + SOL_VER_CURRENT = SOL_VER_GLES }; #define SOL_MAGIC (0xAF | 'S' << 8 | 'O' << 16 | 'L' << 24) @@ -63,6 +63,40 @@ static void sol_load_mtrl(fs_file fin, struct b_mtrl *mp) get_index(fin, &mp->fl); fs_read(mp->f, 1, PATHMAX, fin); + + if (sol_version < SOL_VER_GLES) + { + static const int flags[][2] = { + { 1, M_SHADOWED }, + { 2, M_TRANSPARENT }, + { 4, M_REFLECTIVE | M_SHADOWED }, + { 8, M_ENVIRONMENT }, + { 16, M_ADDITIVE }, + { 32, M_CLAMP_S | M_CLAMP_T }, + { 64, M_DECAL }, + { 128, M_TWO_SIDED } + }; + + /* Convert 1.5.4 material flags. */ + + if (mp->fl) + { + int i, f; + + for (f = 0, i = 0; i < ARRAYSIZE(flags); i++) + if (mp->fl & flags[i][0]) + f |= flags[i][1]; + + mp->fl = f; + } + else + { + /* Must be "mtrl/invisible". */ + + mp->fl = M_TRANSPARENT; + mp->d[3] = 0.0f; + } + } } static void sol_load_vert(fs_file fin, struct b_vert *vp) @@ -87,18 +121,68 @@ static void sol_load_texc(fs_file fin, struct b_texc *tp) get_array(fin, tp->u, 2); } -static void sol_load_geom(fs_file fin, struct b_geom *gp) +static void sol_load_offs(fs_file fin, struct b_offs *op) +{ + get_index(fin, &op->ti); + get_index(fin, &op->si); + get_index(fin, &op->vi); +} + +static void sol_load_geom(fs_file fin, struct b_geom *gp, struct s_base *fp) { get_index(fin, &gp->mi); - get_index(fin, &gp->ti); - get_index(fin, &gp->si); - get_index(fin, &gp->vi); - get_index(fin, &gp->tj); - get_index(fin, &gp->sj); - get_index(fin, &gp->vj); - get_index(fin, &gp->tk); - get_index(fin, &gp->sk); - get_index(fin, &gp->vk); + + if (sol_version >= SOL_VER_GLES) + { + get_index(fin, &gp->oi); + get_index(fin, &gp->oj); + get_index(fin, &gp->ok); + } + else + { + struct b_offs ov[3]; + int i, j, iv[3], oc; + void *p; + + oc = 0; + + for (i = 0; i < 3; i++) + { + get_index(fin, &ov[i].ti); + get_index(fin, &ov[i].si); + get_index(fin, &ov[i].vi); + + iv[i] = -1; + + for (j = 0; j < fp->oc; j++) + if (ov[i].ti == fp->ov[j].ti && + ov[i].si == fp->ov[j].si && + ov[i].vi == fp->ov[j].vi) + { + iv[i] = j; + break; + } + + if (j == fp->oc) + oc++; + } + + if (oc && (p = realloc(fp->ov, sizeof (struct b_offs) * (fp->oc + oc)))) + { + fp->ov = p; + + for (i = 0; i < 3; i++) + if (iv[i] < 0) + { + fp->ov[fp->oc] = ov[i]; + iv[i] = fp->oc++; + } + } + + gp->oi = iv[0]; + gp->oj = iv[1]; + gp->ok = iv[2]; + } } static void sol_load_lump(fs_file fin, struct b_lump *lp) @@ -134,7 +218,7 @@ static void sol_load_path(fs_file fin, struct b_path *pp) pp->tm = TIME_TO_MS(pp->t); pp->t = MS_TO_TIME(pp->tm); - if (sol_version >= SOL_VER_PATH_FLAGS) + if (sol_version >= SOL_VER_GLES) get_index(fin, &pp->fl); pp->e[0] = 1.0f; @@ -235,6 +319,10 @@ static void sol_load_indx(fs_file fin, struct s_base *fp) get_index(fin, &fp->ec); get_index(fin, &fp->sc); get_index(fin, &fp->tc); + + if (sol_version >= SOL_VER_GLES) + get_index(fin, &fp->oc); + get_index(fin, &fp->gc); get_index(fin, &fp->lc); get_index(fin, &fp->nc); @@ -271,6 +359,8 @@ static int sol_load_file(fs_file fin, struct s_base *fp) fp->sv = (struct b_side *) calloc(fp->sc, sizeof (*fp->sv)); if (fp->tc) fp->tv = (struct b_texc *) calloc(fp->tc, sizeof (*fp->tv)); + if (fp->oc) + fp->ov = (struct b_offs *) calloc(fp->oc, sizeof (*fp->ov)); if (fp->gc) fp->gv = (struct b_geom *) calloc(fp->gc, sizeof (*fp->gv)); if (fp->lc) @@ -309,7 +399,8 @@ static int sol_load_file(fs_file fin, struct s_base *fp) for (i = 0; i < fp->ec; i++) sol_load_edge(fin, fp->ev + i); for (i = 0; i < fp->sc; i++) sol_load_side(fin, fp->sv + i); for (i = 0; i < fp->tc; i++) sol_load_texc(fin, fp->tv + i); - for (i = 0; i < fp->gc; i++) sol_load_geom(fin, fp->gv + i); + for (i = 0; i < fp->oc; i++) sol_load_offs(fin, fp->ov + i); + for (i = 0; i < fp->gc; i++) sol_load_geom(fin, fp->gv + i, fp); for (i = 0; i < fp->lc; i++) sol_load_lump(fin, fp->lv + i); for (i = 0; i < fp->nc; i++) sol_load_node(fin, fp->nv + i); for (i = 0; i < fp->pc; i++) sol_load_path(fin, fp->pv + i); @@ -396,6 +487,7 @@ void sol_free_base(struct s_base *fp) if (fp->ev) free(fp->ev); if (fp->sv) free(fp->sv); if (fp->tv) free(fp->tv); + if (fp->ov) free(fp->ov); if (fp->gv) free(fp->gv); if (fp->lv) free(fp->lv); if (fp->nv) free(fp->nv); @@ -450,18 +542,19 @@ static void sol_stor_texc(fs_file fout, struct b_texc *tp) put_array(fout, tp->u, 2); } +static void sol_stor_offs(fs_file fout, struct b_offs *op) +{ + put_index(fout, op->ti); + put_index(fout, op->si); + put_index(fout, op->vi); +} + static void sol_stor_geom(fs_file fout, struct b_geom *gp) { put_index(fout, gp->mi); - put_index(fout, gp->ti); - put_index(fout, gp->si); - put_index(fout, gp->vi); - put_index(fout, gp->tj); - put_index(fout, gp->sj); - put_index(fout, gp->vj); - put_index(fout, gp->tk); - put_index(fout, gp->sk); - put_index(fout, gp->vk); + put_index(fout, gp->oi); + put_index(fout, gp->oj); + put_index(fout, gp->ok); } static void sol_stor_lump(fs_file fout, struct b_lump *lp) @@ -589,6 +682,7 @@ static void sol_stor_file(fs_file fout, struct s_base *fp) put_index(fout, fp->ec); put_index(fout, fp->sc); put_index(fout, fp->tc); + put_index(fout, fp->oc); put_index(fout, fp->gc); put_index(fout, fp->lc); put_index(fout, fp->nc); @@ -611,6 +705,7 @@ static void sol_stor_file(fs_file fout, struct s_base *fp) for (i = 0; i < fp->ec; i++) sol_stor_edge(fout, fp->ev + i); for (i = 0; i < fp->sc; i++) sol_stor_side(fout, fp->sv + i); for (i = 0; i < fp->tc; i++) sol_stor_texc(fout, fp->tv + i); + for (i = 0; i < fp->oc; i++) sol_stor_offs(fout, fp->ov + i); for (i = 0; i < fp->gc; i++) sol_stor_geom(fout, fp->gv + i); for (i = 0; i < fp->lc; i++) sol_stor_lump(fout, fp->lv + i); for (i = 0; i < fp->nc; i++) sol_stor_node(fout, fp->nv + i); diff --git a/share/solid_base.h b/share/solid_base.h index c041300..8a8f21f 100644 --- a/share/solid_base.h +++ b/share/solid_base.h @@ -29,27 +29,28 @@ * structure to which the variable refers. Y determines the usage of * the variable. * - * The Xs are as documented by struct s_file: + * The Xs are as documented by struct s_base: * - * f File (struct s_file) - * m Material (struct s_mtrl) - * v Vertex (struct s_vert) - * e Edge (struct s_edge) - * s Side (struct s_side) - * t Texture coord (struct s_texc) - * g Geometry (struct s_geom) - * l Lump (struct s_lump) - * n Node (struct s_node) - * p Path (struct s_path) - * b Body (struct s_body) - * h Item (struct s_item) - * z Goal (struct s_goal) - * j Jump (struct s_jump) - * x Switch (struct s_swch) - * r Billboard (struct s_bill) - * u User (struct s_ball) - * w Viewpoint (struct s_view) - * d Dictionary (struct s_dict) + * f File (struct s_base) + * m Material (struct b_mtrl) + * v Vertex (struct b_vert) + * e Edge (struct b_edge) + * s Side (struct b_side) + * t Texture coord (struct b_texc) + * g Geometry (struct b_geom) + * o Offset (struct b_offs) + * l Lump (struct b_lump) + * n Node (struct b_node) + * p Path (struct b_path) + * b Body (struct b_body) + * h Item (struct b_item) + * z Goal (struct b_goal) + * j Jump (struct b_jump) + * x Switch (struct b_swch) + * r Billboard (struct b_bill) + * u User (struct b_ball) + * w Viewpoint (struct b_view) + * d Dictionary (struct b_dict) * i Index (int) * a Text (char) * @@ -71,7 +72,7 @@ * Those members that do not conform to this convention are explicitly * documented with a comment. * - * These prefixes are still available: c k o q y. + * These prefixes are still available: c k q y. */ /* @@ -83,15 +84,15 @@ /* Material type flags */ -#define M_OPAQUE 1 -#define M_TRANSPARENT 2 -#define M_REFLECTIVE 4 -#define M_ENVIRONMENT 8 -#define M_ADDITIVE 16 -#define M_CLAMPED 32 -#define M_DECAL 64 -#define M_TWO_SIDED 128 -#define M_SHADOWED 256 +#define M_REFLECTIVE (1 << 8) +#define M_TRANSPARENT (1 << 7) +#define M_SHADOWED (1 << 6) +#define M_DECAL (1 << 5) +#define M_ENVIRONMENT (1 << 4) +#define M_TWO_SIDED (1 << 3) +#define M_ADDITIVE (1 << 2) +#define M_CLAMP_S (1 << 1) +#define M_CLAMP_T (1 << 0) /* Billboard types. */ @@ -153,12 +154,15 @@ struct b_texc float u[2]; /* texture coordinate */ }; +struct b_offs +{ + int ti, si, vi; +}; + struct b_geom { int mi; - int ti, si, vi; - int tj, sj, vj; - int tk, sk, vk; + int oi, oj, ok; }; struct b_lump @@ -280,6 +284,7 @@ struct s_base int ec; int sc; int tc; + int oc; int gc; int lc; int nc; @@ -301,6 +306,7 @@ struct s_base struct b_edge *ev; struct b_side *sv; struct b_texc *tv; + struct b_offs *ov; struct b_geom *gv; struct b_lump *lv; struct b_node *nv; diff --git a/share/solid_draw.c b/share/solid_draw.c index 5cab6d3..1ab4289 100644 --- a/share/solid_draw.c +++ b/share/solid_draw.c @@ -22,6 +22,7 @@ #include "glext.h" #include "vec3.h" +#include "geom.h" #include "image.h" #include "base_image.h" #include "base_config.h" @@ -32,817 +33,968 @@ /*---------------------------------------------------------------------------*/ -static int sol_enum_mtrl(const struct s_base *base, - const struct b_body *bp, int mi) +/* EXCLUDED material flags for each rendering pass. */ + +static const int pass_ex[] = { + M_REFLECTIVE | M_TRANSPARENT | M_DECAL, + M_REFLECTIVE | M_TRANSPARENT, + M_REFLECTIVE, + M_REFLECTIVE | M_DECAL, + 0, +}; + +/* INCLUDED material flags for each rendering pass. */ + +static const int pass_in[] = { + 0, + M_DECAL, + M_DECAL | M_TRANSPARENT, + M_TRANSPARENT, + M_REFLECTIVE, +}; + +/*---------------------------------------------------------------------------*/ + +static void sol_transform(const struct s_vary *vary, + const struct v_body *bp, int ui) { - int li, gi, c = 0; + float a; + float e[4]; + float p[3]; + float v[3]; - /* Count all lump geoms with this material. */ + /* Apply the body position and rotation to the model-view matrix. */ - for (li = 0; li < bp->lc; li++) + sol_body_p(p, vary, bp->pi, bp->t); + sol_body_e(e, vary, bp, 0); + + q_as_axisangle(e, v, &a); + + glTranslatef(p[0], p[1], p[2]); + glRotatef(V_DEG(a), v[0], v[1], v[2]); + + /* Apply the shadow transform to the texture matrix. */ + + if (ui >= 0 && ui < vary->uc && vary->uv[ui].r > 0.0f) { - int g0 = base->lv[bp->l0 + li].g0; - int gc = base->lv[bp->l0 + li].gc; + struct v_ball *up = vary->uv + ui; + + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glMatrixMode(GL_TEXTURE); + { + float k = 0.25f / up->r; + + glLoadIdentity(); + + /* Center the shadow texture on the ball. */ + + glTranslatef(0.5f, 0.5f, 0.0f); + + /* Transform ball XZ position to ST texture coordinate. */ + + glRotatef(-90.0f, 1.0f, 0.0f, 0.0f); - for (gi = 0; gi < gc; gi++) - if (base->gv[base->iv[g0 + gi]].mi == mi) - c++; + /* Scale the shadow texture to the radius of the ball. */ + + glScalef(k, k, k); + + /* Move the shadow texture under the ball. */ + + glTranslatef(-up->p[0], -up->p[1], -up->p[2]); + + /* Apply the body position and rotation. */ + + glTranslatef(p[0], p[1], p[2]); + glRotatef(V_DEG(a), v[0], v[1], v[2]); + + /* Vertically center clipper texture on ball position. */ + + if (tex_env_stage(TEX_STAGE_CLIP)) + { + glLoadIdentity(); + glTranslatef(p[0] - up->p[0], + p[1] - up->p[1] + 0.5f, + p[2] - up->p[2]); + glRotatef(V_DEG(a), v[0], v[1], v[2]); + + } + } + glMatrixMode(GL_MODELVIEW); + + tex_env_stage(TEX_STAGE_TEXTURE); + } } +} - /* Count all body geoms with this material. */ +/*---------------------------------------------------------------------------*/ - for (gi = 0; gi < bp->gc; gi++) - if (base->gv[base->iv[bp->g0 + gi]].mi == mi) - c++; +static void sol_load_bill(struct s_draw *draw) +{ + static const GLfloat data[] = { + 0.0f, 0.0f, -1.0f, -1.0f, + 1.0f, 0.0f, 1.0f, -1.0f, + 0.0f, 1.0f, -1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, 1.0f, + + 0.0f, 0.0f, -0.5f, 0.0f, + 1.0f, 0.0f, 0.5f, 0.0f, + 0.0f, 1.0f, -0.5f, 1.0f, + 1.0f, 1.0f, 0.5f, 1.0f, + + 0.0f, 0.0f, -0.5f, -0.5f, + 1.0f, 0.0f, 0.5f, -0.5f, + 0.0f, 1.0f, -0.5f, 0.5f, + 1.0f, 1.0f, 0.5f, 0.5f, + }; + + /* Initialize a vertex buffer object for billboard drawing. */ + + glGenBuffers_(1, &draw->bill); + glBindBuffer_(GL_ARRAY_BUFFER, draw->bill); + glBufferData_(GL_ARRAY_BUFFER, sizeof (data), data, GL_STATIC_DRAW); + glBindBuffer_(GL_ARRAY_BUFFER, 0); +} - return c; +static void sol_free_bill(struct s_draw *draw) +{ + if (glIsBuffer_(draw->bill)) + glDeleteBuffers_(1, &draw->bill); } -static int sol_enum_body(const struct s_base *base, - const struct b_body *bp, int fl) +static void sol_draw_bill(GLfloat w, GLfloat h, GLboolean edge) { - int mi, c = 0; + glPushMatrix(); + { + glScalef(0.5f * w, 0.5f * h, 1.0f); - /* Count all geoms with this flag. */ + if (edge) + glTranslatef(0.0f, 0.5f, 0.0f); - for (mi = 0; mi < base->mc; mi++) - if (base->mv[mi].fl & fl) - c = c + sol_enum_mtrl(base, bp, mi); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + } + glPopMatrix(); +} - return c; +/*---------------------------------------------------------------------------*/ + +/* NOTE: The state management here presumes that billboard rendering is */ +/* NESTED within a wider SOL rendering process. That is: sol_draw_enable */ +/* has been called and sol_draw_disable will be called in the future. */ +/* Thus the "default" VBO state retained by billboard rendering is the */ +/* state appropriate for normal SOL rendering. */ + +static void sol_bill_enable(const struct s_draw *draw) +{ + const size_t s = sizeof (GLfloat); + + glBindBuffer_(GL_ARRAY_BUFFER, draw->bill); + + glTexCoordPointer(2, GL_FLOAT, s * 4, (GLvoid *) ( 0)); + glVertexPointer (2, GL_FLOAT, s * 4, (GLvoid *) (s * 2)); +} + +static void sol_bill_disable(void) +{ } /*---------------------------------------------------------------------------*/ #define tobyte(f) ((GLubyte) (f * 255.0f)) -#define color_cmp(a, b) (tobyte((a)[0]) == tobyte((b)[0]) && \ - tobyte((a)[1]) == tobyte((b)[1]) && \ - tobyte((a)[2]) == tobyte((b)[2]) && \ - tobyte((a)[3]) == tobyte((b)[3])) - static struct b_mtrl default_base_mtrl = { { 0.8f, 0.8f, 0.8f, 1.0f }, { 0.2f, 0.2f, 0.2f, 1.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 0.0f, 1.0f }, - { 0.0f }, 0.0f, M_OPAQUE, "" + { 0.0f }, 0.0f, 0, "" }; +/* Nasty. */ + static struct d_mtrl default_draw_mtrl = { - &default_base_mtrl, 0 + &default_base_mtrl, + 0xffcccccc, + 0xff333333, + 0xff000000, + 0xff000000, + 0x00000000, + 0 }; -static const struct d_mtrl *sol_draw_mtrl(const struct s_draw *draw, - const struct d_mtrl *mp_draw, - const struct d_mtrl *mq_draw) +void sol_apply_mtrl(const struct d_mtrl *mp_draw, struct s_rend *rend) { const struct b_mtrl *mp_base = mp_draw->base; + const struct d_mtrl *mq_draw = rend->mp; const struct b_mtrl *mq_base = mq_draw->base; - /* Change material properties only as needed. */ + /* Bind the texture. */ - if (!color_cmp(mp_base->a, mq_base->a)) - glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mp_base->a); - if (!color_cmp(mp_base->d, mq_base->d)) + if (mp_draw->o != mq_draw->o) + glBindTexture(GL_TEXTURE_2D, mp_draw->o); + + /* Set material properties. */ + + if (mp_draw->d != mq_draw->d) glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mp_base->d); - if (!color_cmp(mp_base->s, mq_base->s)) + if (mp_draw->a != mq_draw->a) + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mp_base->a); + if (mp_draw->s != mq_draw->s) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mp_base->s); - if (!color_cmp(mp_base->e, mq_base->e)) + if (mp_draw->e != mq_draw->e) glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, mp_base->e); - if (tobyte(mp_base->h[0]) != tobyte(mq_base->h[0])) + if (mp_draw->h != mq_draw->h) glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mp_base->h); - /* Bind the texture. */ + /* Ball shadow. */ - if (mp_draw->o != mq_draw->o) - glBindTexture(GL_TEXTURE_2D, mp_draw->o); + if ((mp_base->fl & M_SHADOWED) ^ (mq_base->fl & M_SHADOWED)) + { + if (mp_base->fl & M_SHADOWED) + shad_draw_set(); + else + shad_draw_clr(); + } - /* Enable environment mapping. */ + /* Environment mapping. */ - if ((mp_base->fl & M_ENVIRONMENT) && !(mq_base->fl & M_ENVIRONMENT)) +#if !ENABLE_OPENGLES + if ((mp_base->fl & M_ENVIRONMENT) ^ (mq_base->fl & M_ENVIRONMENT)) { - glEnable(GL_TEXTURE_GEN_S); - glEnable(GL_TEXTURE_GEN_T); + if (mp_base->fl & M_ENVIRONMENT) + { + glEnable(GL_TEXTURE_GEN_S); + glEnable(GL_TEXTURE_GEN_T); - glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); - glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); + } + else + { + glDisable(GL_TEXTURE_GEN_S); + glDisable(GL_TEXTURE_GEN_T); + } } +#endif - /* Disable environment mapping. */ + /* Additive blending. */ - if ((mq_base->fl & M_ENVIRONMENT) && !(mp_base->fl & M_ENVIRONMENT)) + if ((mp_base->fl & M_ADDITIVE) ^ (mq_base->fl & M_ADDITIVE)) { - glDisable(GL_TEXTURE_GEN_S); - glDisable(GL_TEXTURE_GEN_T); + if (mp_base->fl & M_ADDITIVE) + glBlendFunc(GL_ONE, GL_ONE); + else + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } - /* Enable additive blending. */ - - if ((mp_base->fl & M_ADDITIVE) && !(mq_base->fl & M_ADDITIVE)) - glBlendFunc(GL_ONE, GL_ONE); - - /* Enable standard blending. */ - - if ((mq_base->fl & M_ADDITIVE) && !(mp_base->fl & M_ADDITIVE)) - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - /* Enable visibility-from-behind. */ + /* Visibility-from-behind. */ - if ((mp_base->fl & M_TWO_SIDED) && !(mq_base->fl & M_TWO_SIDED)) + if ((mp_base->fl & M_TWO_SIDED) ^ (mq_base->fl & M_TWO_SIDED)) { - glDisable(GL_CULL_FACE); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1); + if (mp_base->fl & M_TWO_SIDED) + { + glDisable(GL_CULL_FACE); + glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1); + } + else + { + glEnable(GL_CULL_FACE); + glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 0); + } } - /* Disable visibility-from-behind. */ + /* Decal offset. */ - if ((mq_base->fl & M_TWO_SIDED) && !(mp_base->fl & M_TWO_SIDED)) + if ((mp_base->fl & M_DECAL) ^ (mq_base->fl & M_DECAL)) { - glEnable(GL_CULL_FACE); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0); + if (mp_base->fl & M_DECAL) + { + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(-1.0f, -2.0f); + } + else + glDisable(GL_POLYGON_OFFSET_FILL); } - /* Enable decal offset. */ + rend->mp = mp_draw; +} - if ((mp_base->fl & M_DECAL) && !(mq_base->fl & M_DECAL)) - { - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(-1.0f, -2.0f); - } +static GLuint sol_find_texture(const char *name) +{ + char png[MAXSTR]; + char jpg[MAXSTR]; - /* Disable decal offset. */ + GLuint o; - if ((mq_base->fl & M_DECAL) && !(mp_base->fl & M_DECAL)) - glDisable(GL_POLYGON_OFFSET_FILL); + /* Prefer a lossless copy of the texture over a lossy compression. */ - return mp_draw; -} + strncpy(png, name, PATHMAX); strcat(png, ".png"); + strncpy(jpg, name, PATHMAX); strcat(jpg, ".jpg"); -static const struct d_mtrl *sol_back_bill(const struct s_draw *draw, - const struct b_bill *rp, - const struct d_mtrl *mp, - float t) -{ - float T = (rp->t > 0.0f) ? (fmodf(t, rp->t) - rp->t / 2) : 0.0f; + /* Check for a PNG. */ - float w = rp->w[0] + rp->w[1] * T + rp->w[2] * T * T; - float h = rp->h[0] + rp->h[1] * T + rp->h[2] * T * T; + if ((o = make_image_from_file(png))) + return o; - if (w > 0 && h > 0) - { - float rx = rp->rx[0] + rp->rx[1] * T + rp->rx[2] * T * T; - float ry = rp->ry[0] + rp->ry[1] * T + rp->ry[2] * T * T; - float rz = rp->rz[0] + rp->rz[1] * T + rp->rz[2] * T * T; + /* Check for a JPG. */ - glPushMatrix(); - { - float y0 = (rp->fl & B_EDGE) ? 0 : -h / 2; - float y1 = (rp->fl & B_EDGE) ? h : +h / 2; + if ((o = make_image_from_file(jpg))) + return o; - glRotatef(ry, 0.0f, 1.0f, 0.0f); - glRotatef(rx, 1.0f, 0.0f, 0.0f); - glTranslatef(0.0f, 0.0f, -rp->d); + return 0; +} - if (rp->fl & B_FLAT) - { - glRotatef(-rx - 90.0f, 1.0f, 0.0f, 0.0f); - glRotatef(-ry, 0.0f, 0.0f, 1.0f); - } - if (rp->fl & B_EDGE) - glRotatef(-rx, 1.0f, 0.0f, 0.0f); +void sol_load_mtrl(struct d_mtrl *mp, const struct b_mtrl *mq) +{ + mp->base = mq; - glRotatef(rz, 0.0f, 0.0f, 1.0f); + if ((mp->o = sol_find_texture(_(mq->f)))) + { + /* Set the texture to clamp or repeat based on material type. */ - mp = sol_draw_mtrl(draw, draw->mv + rp->mi, mp); + if (mq->fl & M_CLAMP_S) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + else + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glBegin(GL_QUADS); - { - glTexCoord2f(0.0f, 0.0f); glVertex2f(-w / 2, y0); - glTexCoord2f(1.0f, 0.0f); glVertex2f(+w / 2, y0); - glTexCoord2f(1.0f, 1.0f); glVertex2f(+w / 2, y1); - glTexCoord2f(0.0f, 1.0f); glVertex2f(-w / 2, y1); - } - glEnd(); - } - glPopMatrix(); + if (mq->fl & M_CLAMP_T) + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + else + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); } - return mp; + /* Cache the 32-bit material values for quick comparison. */ + + mp->d = (tobyte(mq->d[0])) + | (tobyte(mq->d[1]) << 8) + | (tobyte(mq->d[2]) << 16) + | (tobyte(mq->d[3]) << 24); + mp->a = (tobyte(mq->a[0])) + | (tobyte(mq->a[1]) << 8) + | (tobyte(mq->a[2]) << 16) + | (tobyte(mq->a[3]) << 24); + mp->s = (tobyte(mq->s[0])) + | (tobyte(mq->s[1]) << 8) + | (tobyte(mq->s[2]) << 16) + | (tobyte(mq->s[3]) << 24); + mp->e = (tobyte(mq->e[0])) + | (tobyte(mq->e[1]) << 8) + | (tobyte(mq->e[2]) << 16) + | (tobyte(mq->e[3]) << 24); + mp->h = (tobyte(mq->h[0])); } -/*---------------------------------------------------------------------------*/ +void sol_free_mtrl(struct d_mtrl *mp) +{ + if (glIsTexture(mp->o)) + glDeleteTextures(1, &mp->o); +} -void sol_back(const struct s_draw *draw, float n, float f, float t) +static int sol_test_mtrl(const struct d_mtrl *mp, int p) { - const struct d_mtrl *mp = &default_draw_mtrl; + /* Test whether the material flags exclude f0 and include f1. */ - int ri; + return ((mp->base->fl & pass_in[p]) == pass_in[p] && + (mp->base->fl & pass_ex[p]) == 0); +} - /* Render all billboards in the given range. */ +/*---------------------------------------------------------------------------*/ - if (draw && draw->base) - { - glDisable(GL_LIGHTING); - glDepthMask(GL_FALSE); - { - for (ri = 0; ri < draw->base->rc; ri++) - if (n <= draw->base->rv[ri].d && draw->base->rv[ri].d < f) - mp = sol_back_bill(draw, draw->base->rv + ri, mp, t); +static int sol_count_geom(const struct s_base *base, int g0, int gc, int mi) +{ + int gi, c = 0; - mp = sol_draw_mtrl(draw, &default_draw_mtrl, mp); - } - glDepthMask(GL_TRUE); - glEnable(GL_LIGHTING); - } -} + /* The arguments g0 and gc specify a range of the index array. These */ + /* indices refer to geoms. Determine how many of these geoms use the */ + /* given material */ -/*---------------------------------------------------------------------------*/ -/* - * The following code renders a body in a ludicrously inefficient - * manner. It iterates the materials and scans the data structure for - * geometry using each. This has the effect of absolutely minimizing - * material changes, texture bindings, and Begin/End pairs, but - * maximizing trips through the data. - * - * However, this is only done once for each level. The results are - * stored in display lists. Thus, it is well worth it. - */ + for (gi = 0; gi < gc; gi++) + if (base->gv[base->iv[g0 + gi]].mi == mi) + c++; + + return c; +} -static void sol_draw_geom(const struct s_base *base, - const struct b_geom *gp, int mi) +static int sol_count_body(const struct b_body *bp, + const struct s_base *base, int mi) { - if (gp->mi == mi) - { - const float *ui = base->tv[gp->ti].u; - const float *uj = base->tv[gp->tj].u; - const float *uk = base->tv[gp->tk].u; + int li, c = 0; - const float *ni = base->sv[gp->si].n; - const float *nj = base->sv[gp->sj].n; - const float *nk = base->sv[gp->sk].n; + /* Count all lump geoms with the given material. */ - const float *vi = base->vv[gp->vi].p; - const float *vj = base->vv[gp->vj].p; - const float *vk = base->vv[gp->vk].p; + for (li = 0; li < bp->lc; li++) + c += sol_count_geom(base, base->lv[bp->l0 + li].g0, + base->lv[bp->l0 + li].gc, mi); - glTexCoord2fv(ui); - glNormal3fv(ni); - glVertex3fv(vi); + /* Count all body geoms with the given material. */ - glTexCoord2fv(uj); - glNormal3fv(nj); - glVertex3fv(vj); + c += sol_count_geom(base, bp->g0, bp->gc, mi); - glTexCoord2fv(uk); - glNormal3fv(nk); - glVertex3fv(vk); - } + return c; } -static void sol_draw_lump(const struct s_base *base, - const struct b_lump *lp, int mi) +static int sol_count_mesh(const struct d_body *bp, int p) { - int i; + int mi, c = 0; - for (i = 0; i < lp->gc; i++) - sol_draw_geom(base, base->gv + base->iv[lp->g0 + i], mi); + /* Count the body meshes matching the given material flags. */ + + for (mi = 0; mi < bp->mc; ++mi) + if (sol_test_mtrl(bp->mv[mi].mp, p)) + c++; + + return c; } -static const struct d_mtrl *sol_draw_body(const struct s_draw *draw, - const struct b_body *bp, - const struct d_mtrl *mp, - int fl, int decal) +/*---------------------------------------------------------------------------*/ + +static void sol_mesh_vert(struct d_vert *vp, + const struct s_base *base, int oi) { - const struct s_base *base = draw->base; + /* Gather all vertex attributes for the given offs. */ - int mi, li, gi; + const struct b_texc *tq = base->tv + base->ov[oi].ti; + const struct b_side *sq = base->sv + base->ov[oi].si; + const struct b_vert *vq = base->vv + base->ov[oi].vi; - /* Iterate all materials of the correct opacity. */ + vp->p[0] = vq->p[0]; + vp->p[1] = vq->p[1]; + vp->p[2] = vq->p[2]; - for (mi = 0; mi < draw->mc; mi++) + vp->n[0] = sq->n[0]; + vp->n[1] = sq->n[1]; + vp->n[2] = sq->n[2]; + + vp->t[0] = tq->u[0]; + vp->t[1] = tq->u[1]; +} + +static void sol_mesh_geom(struct d_vert *vv, int *vn, + struct d_geom *gv, int *gn, + const struct s_base *base, int *iv, int g0, int gc, int mi) +{ + int gi; + + /* Insert all geoms with material mi into the vertex and element data. */ + + for (gi = 0; gi < gc; gi++) { - struct d_mtrl *mq = draw->mv + mi; + const struct b_geom *gq = base->gv + base->iv[g0 + gi]; - if ((mq->base->fl & fl) && (mq->base->fl & M_DECAL) == decal) + if (gq->mi == mi) { - if (sol_enum_mtrl(draw->base, bp, mi)) + /* Insert a d_vert into the VBO data for each referenced b_off. */ + + if (iv[gq->oi] == -1) + { + iv[gq->oi] = *vn; + sol_mesh_vert(vv + (*vn)++, base, gq->oi); + } + if (iv[gq->oj] == -1) + { + iv[gq->oj] = *vn; + sol_mesh_vert(vv + (*vn)++, base, gq->oj); + } + if (iv[gq->ok] == -1) { - /* Set the material state. */ + iv[gq->ok] = *vn; + sol_mesh_vert(vv + (*vn)++, base, gq->ok); + } - mp = sol_draw_mtrl(draw, mq, mp); + /* Populate the EBO data using remapped b_off indices. */ - /* Render all geometry of that material. */ + gv[*gn].i = iv[gq->oi]; + gv[*gn].j = iv[gq->oj]; + gv[*gn].k = iv[gq->ok]; - glBegin(GL_TRIANGLES); - { - for (li = 0; li < bp->lc; li++) - sol_draw_lump(draw->base, - base->lv + bp->l0 + li, - mi); - for (gi = 0; gi < bp->gc; gi++) - sol_draw_geom(draw->base, - base->gv + base->iv[bp->g0 + gi], - mi); - } - glEnd(); - } + (*gn)++; } } - - return mp; } -static void sol_draw_list(const struct s_vary *vary, - const struct v_body *bp, GLuint list) +static void sol_load_mesh(struct d_mesh *mp, + const struct b_body *bp, + const struct s_draw *draw, int mi) { - float p[3], e[4], u[3], a; + const size_t vs = sizeof (struct d_vert); + const size_t gs = sizeof (struct d_geom); - sol_body_p(p, vary, bp->pi, bp->t); - sol_body_e(e, vary, bp, 0); + struct d_vert *vv = 0; + struct d_geom *gv = 0; + int *iv = 0; - q_as_axisangle(e, u, &a); - a = V_DEG(a); + int oc = draw->base->oc; + int vn = 0; + int gn = 0; - glPushMatrix(); + const int gc = sol_count_body(bp, draw->base, mi); + + /* Get temporary storage for vertex and element array creation. */ + + if ((vv = (struct d_vert *) calloc(oc, vs)) && + (gv = (struct d_geom *) calloc(gc, gs)) && + (iv = (int *) calloc(oc, sizeof (int)))) { - /* Translate and rotate a moving body. */ + int li, i; - glTranslatef(p[0], p[1], p[2]); - glRotatef(a, u[0], u[1], u[2]); + /* Initialize the index remapping. */ - /* Draw the body. */ + for (i = 0; i < oc; ++i) iv[i] = -1; - glCallList(list); - } - glPopMatrix(); -} + /* Include all matching lump geoms in the arrays. */ -void sol_draw(const struct s_draw *draw, int depthmask, int depthtest) -{ - int bi; + for (li = 0; li < bp->lc; li++) + sol_mesh_geom(vv, &vn, gv, &gn, draw->base, iv, + draw->base->lv[bp->l0 + li].g0, + draw->base->lv[bp->l0 + li].gc, mi); - /* Render all opaque geometry into the color and depth buffers. */ + /* Include all matching body geoms in the arrays. */ - for (bi = 0; bi < draw->bc; bi++) - if (draw->bv[bi].ol) - sol_draw_list(draw->vary, draw->vary->bv + bi, draw->bv[bi].ol); + sol_mesh_geom(vv, &vn, gv, &gn, draw->base, iv, bp->g0, bp->gc, mi); - /* Render all translucent geometry into only the color buffer. */ + /* Initialize buffer objects for all data. */ - if (depthtest == 0) glDisable(GL_DEPTH_TEST); - if (depthmask == 0) glDepthMask(GL_FALSE); - { - for (bi = 0; bi < draw->bc; bi++) - if (draw->bv[bi].tl) - sol_draw_list(draw->vary, draw->vary->bv + bi, draw->bv[bi].tl); + glGenBuffers_(1, &mp->vbo); + glBindBuffer_(GL_ARRAY_BUFFER, mp->vbo); + glBufferData_(GL_ARRAY_BUFFER, vn * vs, vv, GL_STATIC_DRAW); + glBindBuffer_(GL_ARRAY_BUFFER, 0); + + glGenBuffers_(1, &mp->ebo); + glBindBuffer_(GL_ELEMENT_ARRAY_BUFFER, mp->ebo); + glBufferData_(GL_ELEMENT_ARRAY_BUFFER, gn * gs, gv, GL_STATIC_DRAW); + glBindBuffer_(GL_ELEMENT_ARRAY_BUFFER, 0); + + mp->mp = draw->mv + mi; + mp->ebc = gn * 3; } - if (depthmask == 0) glDepthMask(GL_TRUE); - if (depthtest == 0) glEnable(GL_DEPTH_TEST); + + free(iv); + free(gv); + free(vv); } -void sol_bill(const struct s_draw *draw, const float *M, float t) +static void sol_free_mesh(struct d_mesh *mp) { - const struct d_mtrl *mp = &default_draw_mtrl; + if (glIsBuffer_(mp->ebo)) + glDeleteBuffers_(1, &mp->ebo); + if (glIsBuffer_(mp->vbo)) + glDeleteBuffers_(1, &mp->vbo); +} - int ri; +void sol_draw_mesh(const struct d_mesh *mp, struct s_rend *rend, int p) +{ + /* If this mesh has material matching the given flags... */ - for (ri = 0; ri < draw->base->rc; ++ri) + if (sol_test_mtrl(mp->mp, p)) { - const struct b_bill *rp = draw->base->rv + ri; + const size_t s = sizeof (struct d_vert); + const GLenum T = GL_FLOAT; - float T = rp->t * t; - float S = fsinf(T); + /* Apply the material state. */ - float w = rp->w [0] + rp->w [1] * T + rp->w [2] * S; - float h = rp->h [0] + rp->h [1] * T + rp->h [2] * S; - float rx = rp->rx[0] + rp->rx[1] * T + rp->rx[2] * S; - float ry = rp->ry[0] + rp->ry[1] * T + rp->ry[2] * S; - float rz = rp->rz[0] + rp->rz[1] * T + rp->rz[2] * S; + sol_apply_mtrl(mp->mp, rend); - mp = sol_draw_mtrl(draw, draw->mv + rp->mi, mp); + /* Bind the mesh data. */ - glPushMatrix(); - { - glTranslatef(rp->p[0], rp->p[1], rp->p[2]); + glBindBuffer_(GL_ARRAY_BUFFER, mp->vbo); + glBindBuffer_(GL_ELEMENT_ARRAY_BUFFER, mp->ebo); - if (M && ((rp->fl & B_NOFACE) == 0)) glMultMatrixf(M); + glVertexPointer (3, T, s, (GLvoid *) offsetof (struct d_vert, p)); + glNormalPointer ( T, s, (GLvoid *) offsetof (struct d_vert, n)); - if (fabsf(rx) > 0.0f) glRotatef(rx, 1.0f, 0.0f, 0.0f); - if (fabsf(ry) > 0.0f) glRotatef(ry, 0.0f, 1.0f, 0.0f); - if (fabsf(rz) > 0.0f) glRotatef(rz, 0.0f, 0.0f, 1.0f); + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glTexCoordPointer(3, T, s, (GLvoid *) offsetof (struct d_vert, p)); - glBegin(GL_QUADS); - { - glTexCoord2f(0.0f, 0.0f); glVertex2f(-w / 2, -h / 2); - glTexCoord2f(1.0f, 0.0f); glVertex2f(+w / 2, -h / 2); - glTexCoord2f(1.0f, 1.0f); glVertex2f(+w / 2, +h / 2); - glTexCoord2f(0.0f, 1.0f); glVertex2f(-w / 2, +h / 2); - } - glEnd(); + if (tex_env_stage(TEX_STAGE_CLIP)) + glTexCoordPointer(3, T, s, (GLvoid *) offsetof (struct d_vert, p)); + + tex_env_stage(TEX_STAGE_TEXTURE); } - glPopMatrix(); - } + glTexCoordPointer(2, T, s, (GLvoid *) offsetof (struct d_vert, t)); + + /* Draw the mesh. */ - mp = sol_draw_mtrl(draw, &default_draw_mtrl, mp); + glDrawElements(GL_TRIANGLES, mp->ebc, GL_UNSIGNED_SHORT, 0); + } } -void sol_refl(const struct s_draw *draw) +/*---------------------------------------------------------------------------*/ + +static void sol_load_body(struct d_body *bp, + const struct b_body *bq, + const struct s_draw *draw) { - int bi; + int mi; - /* Render all reflective geometry into the color and depth buffers. */ + bp->base = bq; + bp->mc = 0; - for (bi = 0; bi < draw->bc; bi++) - if (draw->bv[bi].rl) - sol_draw_list(draw->vary, draw->vary->bv + bi, draw->bv[bi].rl); -} + /* Determine how many materials this body uses. */ -/*---------------------------------------------------------------------------*/ + for (mi = 0; mi < draw->mc; ++mi) + if (sol_count_body(bq, draw->base, mi)) + bp->mc++; -static void sol_shad_geom(const struct s_base *base, - const struct b_geom *gp, int mi) -{ - if (gp->mi == mi) + /* Allocate and initialize a mesh for each material. */ + + if ((bp->mv = (struct d_mesh *) calloc(bp->mc, sizeof (struct d_mesh)))) { - const float *vi = base->vv[gp->vi].p; - const float *vj = base->vv[gp->vj].p; - const float *vk = base->vv[gp->vk].p; + int mj = 0; - glVertex3fv(vi); - glVertex3fv(vj); - glVertex3fv(vk); + for (mi = 0; mi < draw->mc; ++mi) + if (sol_count_body(bq, draw->base, mi)) + sol_load_mesh(bp->mv + mj++, bq, draw, mi); } -} -static void sol_shad_lump(const struct s_base *base, - const struct b_lump *lp, int mi) -{ - int i; + /* Cache a mesh count for each pass. */ - for (i = 0; i < lp->gc; i++) - sol_shad_geom(base, base->gv + base->iv[lp->g0 + i], mi); + bp->pass[0] = sol_count_mesh(bp, 0); + bp->pass[1] = sol_count_mesh(bp, 1); + bp->pass[2] = sol_count_mesh(bp, 2); + bp->pass[3] = sol_count_mesh(bp, 3); + bp->pass[4] = sol_count_mesh(bp, 4); } -static void sol_shad_body(const struct s_base *base, - const struct b_body *bp, - int fl, int decal) +static void sol_free_body(struct d_body *bp) { - int mi, li, gi; - - if (decal) - { - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(-1.0f, -2.0f); - } + int mi; - glBegin(GL_TRIANGLES); - { - for (mi = 0; mi < base->mc; mi++) - { - struct b_mtrl *mp = base->mv + mi; - - if ((mp->fl & fl) && (mp->fl & M_DECAL) == decal) - { - for (li = 0; li < bp->lc; li++) - sol_shad_lump(base, base->lv + bp->l0 + li, mi); - for (gi = 0; gi < bp->gc; gi++) - sol_shad_geom(base, base->gv + base->iv[bp->g0 + gi], mi); - } - } - } - glEnd(); + for (mi = 0; mi < bp->mc; ++mi) + sol_free_mesh(bp->mv + mi); - if (decal) - glDisable(GL_POLYGON_OFFSET_FILL); + free(bp->mv); } -static void sol_shad_list(const struct s_vary *vary, - const struct v_ball *up, - const struct v_body *bp, GLuint list) +static void sol_draw_body(const struct d_body *bp, struct s_rend *rend, int p) { - float p[3], e[4], u[3], a; - float d[3]; + int i; - float X[] = { 1.0f, 0.0f, 0.0f, 0.0f }; - float Y[] = { 0.0f, 1.0f, 0.0f, 0.0f }; - float Z[] = { 0.0f, 0.0f, 1.0f, 0.0f }; + for (i = 0; i < bp->mc; ++i) + sol_draw_mesh(bp->mv + i, rend, p); +} - sol_body_p(p, vary, bp->pi, bp->t); - sol_body_e(e, vary, bp, 0); +/*---------------------------------------------------------------------------*/ - v_sub(d, up->p, p); +int sol_load_draw(struct s_draw *draw, const struct s_vary *vary, int s) +{ + int i; - Y[3] = 0.5f - v_dot(Y, d); + memset(draw, 0, sizeof (struct s_draw)); - if (e[0] != 1.0f) - { - q_as_axisangle(e, u, &a); - a = V_DEG(a); + draw->vary = vary; + draw->base = vary->base; - q_conj(e, e); + /* Initialize all materials for this file. */ - q_rot(X, e, X); - q_rot(Y, e, Y); - q_rot(Z, e, Z); - } - else + if (draw->base->mc) { - u[0] = 0.0f; - u[1] = 0.0f; - u[2] = 0.0f; - - a = 0.0f; - } - - glTexGenfv(GL_S, GL_OBJECT_PLANE, X); - glTexGenfv(GL_T, GL_OBJECT_PLANE, Z); + if ((draw->mv = calloc(draw->base->mc, sizeof (*draw->mv)))) + { + draw->mc = draw->base->mc; - /* Translate the shadow on a moving body. */ + for (i = 0; i < draw->mc; i++) + { + sol_load_mtrl(draw->mv + i, draw->base->mv + i); - glMatrixMode(GL_TEXTURE); - { - float k = 0.25f / up->r; + /* If at least one material is reflective, mark it. */ - glPushMatrix(); - glTranslatef(0.5f - k * d[0], - 0.5f - k * d[2], 0.0f); - glScalef(k, k, 0.0f); + if (draw->base->mv[i].fl & M_REFLECTIVE) + draw->reflective = 1; + } + } } - glMatrixMode(GL_MODELVIEW); - /* Set up shadow clipping. */ + /* Initialize shadow state. */ - if (glActiveTextureARB_) - { - glActiveTextureARB_(GL_TEXTURE1_ARB); - glTexGenfv(GL_S, GL_OBJECT_PLANE, Y); - glActiveTextureARB_(GL_TEXTURE0_ARB); - } + draw->shadow_ui = -1; - /* Draw the body. */ + /* Initialize all bodies for this file. */ - glPushMatrix(); + if (draw->base->bc) { - glTranslatef(p[0], p[1], p[2]); - glRotatef(a, u[0], u[1], u[2]); + if ((draw->bv = calloc(draw->base->bc, sizeof (*draw->bv)))) + { + draw->bc = draw->base->bc; - glCallList(list); + for (i = 0; i < draw->bc; i++) + sol_load_body(draw->bv + i, draw->base->bv + i, draw); + } } - glPopMatrix(); - /* Pop the shadow translation. */ + sol_load_bill(draw); - glMatrixMode(GL_TEXTURE); - { - glPopMatrix(); - } - glMatrixMode(GL_MODELVIEW); + return 1; } -void sol_shad(const struct s_draw *draw, int ui) +void sol_free_draw(struct s_draw *draw) { - int bi; + int i; - /* Render all shadowed geometry. */ + sol_free_bill(draw); - glDepthMask(GL_FALSE); - { - for (bi = 0; bi < draw->bc; bi++) - if (draw->bv[bi].sl) - sol_shad_list(draw->vary, - draw->vary->uv + ui, - draw->vary->bv + bi, draw->bv[bi].sl); - } - glDepthMask(GL_TRUE); + for (i = 0; i < draw->bc; i++) + sol_free_body(draw->bv + i); + for (i = 0; i < draw->mc; i++) + sol_free_mtrl(draw->mv + i); } /*---------------------------------------------------------------------------*/ -static void sol_load_objects(struct s_draw *draw, int s) +static void sol_draw_all(const struct s_draw *draw, struct s_rend *rend, int p) { - int i; - - /* Here we sort geometry into display lists by material type. */ - - for (i = 0; i < draw->bc; i++) - { - struct d_body *bp = draw->bv + i; + int bi; - int on = sol_enum_body(draw->base, bp->base, M_OPAQUE); - int tn = sol_enum_body(draw->base, bp->base, M_TRANSPARENT); - int rn = sol_enum_body(draw->base, bp->base, M_REFLECTIVE); - int dn = sol_enum_body(draw->base, bp->base, M_DECAL); - int sn = sol_enum_body(draw->base, bp->base, M_SHADOWED); + /* Draw all meshes of all bodies matching the given material flags. */ - /* Draw all opaque geometry, decals last. */ + for (bi = 0; bi < draw->bc; ++bi) - if (on) + if (draw->bv[bi].pass[p]) { - bp->ol = glGenLists(1); - - glNewList(bp->ol, GL_COMPILE); + glPushMatrix(); { - const struct d_mtrl *mp = &default_draw_mtrl; - - mp = sol_draw_body(draw, bp->base, mp, M_OPAQUE, 0); - mp = sol_draw_body(draw, bp->base, mp, M_OPAQUE, M_DECAL); - mp = sol_draw_mtrl(draw, &default_draw_mtrl, mp); + sol_transform(draw->vary, draw->vary->bv + bi, draw->shadow_ui); + sol_draw_body(draw->bv + bi, rend, p); } - glEndList(); + glPopMatrix(); } - else bp->ol = 0; - - /* Draw all translucent geometry, decals first. */ - - if (tn) - { - bp->tl = glGenLists(1); +} - glNewList(bp->tl, GL_COMPILE); - { - const struct d_mtrl *mp = &default_draw_mtrl; +void sol_draw_enable(struct s_rend *rend) +{ + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_NORMAL_ARRAY); - mp = sol_draw_body(draw, bp->base, mp, M_TRANSPARENT, M_DECAL); - mp = sol_draw_body(draw, bp->base, mp, M_TRANSPARENT, 0); - mp = sol_draw_mtrl(draw, &default_draw_mtrl, mp); - } - glEndList(); - } - else bp->tl = 0; + if (gli.max_texture_units > 2) + tex_env_active(&tex_env_shadow_clip); + else if (gli.max_texture_units > 1) + tex_env_active(&tex_env_shadow); + else + tex_env_active(&tex_env_default); - /* Draw all reflective geometry. */ + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - if (rn) - { - bp->rl = glGenLists(1); + if (tex_env_stage(TEX_STAGE_CLIP)) + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - glNewList(bp->rl, GL_COMPILE); - { - const struct d_mtrl *mp = &default_draw_mtrl; + tex_env_stage(TEX_STAGE_TEXTURE); + } + glEnableClientState(GL_TEXTURE_COORD_ARRAY); - mp = sol_draw_body(draw, bp->base, mp, M_REFLECTIVE, 0); - mp = sol_draw_mtrl(draw, &default_draw_mtrl, mp); - } - glEndList(); + rend->mp = &default_draw_mtrl; +} - draw->reflective = 1; - } - else bp->rl = 0; +void sol_draw_disable(struct s_rend *rend) +{ + sol_apply_mtrl(&default_draw_mtrl, rend); - /* Draw all shadowed geometry. */ + if (tex_env_stage(TEX_STAGE_SHADOW)) + { + glDisableClientState(GL_TEXTURE_COORD_ARRAY); - if (s && (on || rn || sn)) - { - bp->sl = glGenLists(1); + if (tex_env_stage(TEX_STAGE_CLIP)) + glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glNewList(bp->sl, GL_COMPILE); - { - if (on) sol_shad_body(draw->base, bp->base, M_OPAQUE, 0); - if (rn) sol_shad_body(draw->base, bp->base, M_REFLECTIVE, 0); - if (dn) sol_shad_body(draw->base, bp->base, M_OPAQUE, M_DECAL); - if (sn) - { - /* Transparent shadowed geometry hack. */ + tex_env_stage(TEX_STAGE_TEXTURE); + } + glDisableClientState(GL_TEXTURE_COORD_ARRAY); - if (dn) - sol_shad_body(draw->base, bp->base, M_SHADOWED, M_DECAL); + tex_env_active(&tex_env_default); - sol_shad_body(draw->base, bp->base, M_SHADOWED, 0); - } - } - glEndList(); - } - else bp->sl = 0; - } + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); } -static GLuint sol_find_texture(const char *name) +/*---------------------------------------------------------------------------*/ + +void sol_draw(const struct s_draw *draw, struct s_rend *rend, int mask, int test) { - char png[MAXSTR]; - char jpg[MAXSTR]; + /* Render all opaque geometry, decals last. */ - GLuint o; + sol_draw_all(draw, rend, 0); + sol_draw_all(draw, rend, 1); - /* Prefer a lossless copy of the texture over a lossy compression. */ + /* Render all transparent geometry, decals first. */ - strncpy(png, name, PATHMAX); strcat(png, ".png"); - strncpy(jpg, name, PATHMAX); strcat(jpg, ".jpg"); + if (!test) glDisable(GL_DEPTH_TEST); + if (!mask) glDepthMask(GL_FALSE); + { + sol_draw_all(draw, rend, 2); + sol_draw_all(draw, rend, 3); + } + if (!mask) glDepthMask(GL_TRUE); + if (!test) glEnable(GL_DEPTH_TEST); - /* Check for a PNG. */ + /* Revert the buffer object state. */ - if ((o = make_image_from_file(png))) - return o; + glBindBuffer_(GL_ARRAY_BUFFER, 0); + glBindBuffer_(GL_ELEMENT_ARRAY_BUFFER, 0); +} - /* Check for a JPG. */ +void sol_refl(const struct s_draw *draw, struct s_rend *rend) +{ + /* Render all reflective geometry. */ - if ((o = make_image_from_file(jpg))) - return o; + sol_draw_all(draw, rend, 4); - return 0; + /* Revert the buffer object state. */ + + glBindBuffer_(GL_ARRAY_BUFFER, 0); + glBindBuffer_(GL_ELEMENT_ARRAY_BUFFER, 0); } -static void sol_load_textures(struct s_draw *draw) +void sol_back(const struct s_draw *draw, + struct s_rend *rend, + float n, float f, float t) { - int i; + if (!draw || !draw->base) + return; - /* Load the image referenced by each material. */ + glDisable(GL_LIGHTING); + glDepthMask(GL_FALSE); - for (i = 0; i < draw->mc; i++) + sol_bill_enable(draw); { - struct d_mtrl *mp = draw->mv + i; + int ri; - if ((mp->o = sol_find_texture(_(mp->base->f)))) + /* Consider each billboard. */ + + for (ri = 0; ri < draw->base->rc; ri++) { - /* Set the texture to clamp or repeat based on material type. */ + const struct b_bill *rp = draw->base->rv + ri; - if (mp->base->fl & M_CLAMPED) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - } - else + /* Render only billboards at distances between n and f. */ + + if (n <= rp->d && rp->d < f) { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - } - } - } -} + float T = (rp->t > 0.0f) ? (fmodf(t, rp->t) - rp->t / 2) : 0; -/*---------------------------------------------------------------------------*/ + float w = rp->w[0] + rp->w[1] * T + rp->w[2] * T * T; + float h = rp->h[0] + rp->h[1] * T + rp->h[2] * T * T; -int sol_load_draw(struct s_draw *draw, const struct s_vary *vary, int s) -{ - int i; + /* Render only billboards facing the viewer. */ - memset(draw, 0, sizeof (*draw)); + if (w > 0 && h > 0) + { + float rx = rp->rx[0] + rp->rx[1] * T + rp->rx[2] * T * T; + float ry = rp->ry[0] + rp->ry[1] * T + rp->ry[2] * T * T; + float rz = rp->rz[0] + rp->rz[1] * T + rp->rz[2] * T * T; - draw->vary = vary; - draw->base = draw->vary->base; + glPushMatrix(); + { + if (ry) glRotatef(ry, 0.0f, 1.0f, 0.0f); + if (rx) glRotatef(rx, 1.0f, 0.0f, 0.0f); - if (draw->base->mc) - { - draw->mv = calloc(draw->base->mc, sizeof (*draw->mv)); - draw->mc = draw->base->mc; + glTranslatef(0.0f, 0.0f, -rp->d); - for (i = 0; i < draw->base->mc; i++) - { - struct d_mtrl *mp = draw->mv + i; - struct b_mtrl *mq = draw->base->mv + i; + if (rp->fl & B_FLAT) + { + glRotatef(-rx - 90.0f, 1.0f, 0.0f, 0.0f); + glRotatef(-ry, 0.0f, 0.0f, 1.0f); + } + if (rp->fl & B_EDGE) + glRotatef(-rx, 1.0f, 0.0f, 0.0f); + + if (rz) glRotatef(rz, 0.0f, 0.0f, 1.0f); + + glScalef(w, h, 1.0f); + + sol_apply_mtrl(draw->mv + rp->mi, rend); - mp->base = mq; + if (rp->fl & B_EDGE) + glDrawArrays(GL_TRIANGLE_STRIP, 4, 4); + else + glDrawArrays(GL_TRIANGLE_STRIP, 8, 4); + } + glPopMatrix(); + } + } } } + sol_bill_disable(); - if (draw->base->bc) + glDepthMask(GL_TRUE); + glEnable(GL_LIGHTING); +} + +void sol_bill(const struct s_draw *draw, + struct s_rend *rend, const float *M, float t) +{ + sol_bill_enable(draw); { - draw->bv = calloc(draw->base->bc, sizeof (*draw->bv)); - draw->bc = draw->base->bc; + int ri; - for (i = 0; i < draw->base->bc; i++) + for (ri = 0; ri < draw->base->rc; ++ri) { - struct d_body *bp = draw->bv + i; - struct b_body *bq = draw->base->bv + i; + const struct b_bill *rp = draw->base->rv + ri; - bp->base = bq; - } - } + float T = rp->t * t; + float S = fsinf(T); - sol_load_textures(draw); - sol_load_objects (draw, s); + float w = rp->w [0] + rp->w [1] * T + rp->w [2] * S; + float h = rp->h [0] + rp->h [1] * T + rp->h [2] * S; + float rx = rp->rx[0] + rp->rx[1] * T + rp->rx[2] * S; + float ry = rp->ry[0] + rp->ry[1] * T + rp->ry[2] * S; + float rz = rp->rz[0] + rp->rz[1] * T + rp->rz[2] * S; - return 1; -} + sol_apply_mtrl(draw->mv + rp->mi, rend); -void sol_free_draw(struct s_draw *draw) -{ - int i; + glPushMatrix(); + { + glTranslatef(rp->p[0], rp->p[1], rp->p[2]); - for (i = 0; i < draw->mc; i++) - { - if (glIsTexture(draw->mv[i].o)) - glDeleteTextures(1, &draw->mv[i].o); + if (M && ((rp->fl & B_NOFACE) == 0)) glMultMatrixf(M); + + if (fabsf(rx) > 0.0f) glRotatef(rx, 1.0f, 0.0f, 0.0f); + if (fabsf(ry) > 0.0f) glRotatef(ry, 0.0f, 1.0f, 0.0f); + if (fabsf(rz) > 0.0f) glRotatef(rz, 0.0f, 0.0f, 1.0f); + + sol_draw_bill(w, h, GL_FALSE); + } + glPopMatrix(); + } } + sol_bill_disable(); +} - for (i = 0; i < draw->bc; i++) +void sol_fade(const struct s_draw *draw, float k) +{ + if (k > 0.0f) { - if (glIsList(draw->bv[i].ol)) - glDeleteLists(draw->bv[i].ol, 1); - if (glIsList(draw->bv[i].tl)) - glDeleteLists(draw->bv[i].tl, 1); - if (glIsList(draw->bv[i].rl)) - glDeleteLists(draw->bv[i].rl, 1); - if (glIsList(draw->bv[i].sl)) - glDeleteLists(draw->bv[i].sl, 1); - } + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glLoadIdentity(); + { + glEnable(GL_COLOR_MATERIAL); + glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + glDisable(GL_TEXTURE_2D); + + glColor4f(0.0f, 0.0f, 0.0f, k); - free(draw->mv); - free(draw->bv); + sol_bill_enable(draw); + glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + sol_bill_disable(); - memset(draw, 0, sizeof (*draw)); + glColor4f(1.0f, 1.0f, 1.0f, 1.0f); + + glEnable(GL_TEXTURE_2D); + glEnable(GL_DEPTH_TEST); + glEnable(GL_LIGHTING); + glDisable(GL_COLOR_MATERIAL); + } + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + } } /*---------------------------------------------------------------------------*/ diff --git a/share/solid_draw.h b/share/solid_draw.h index 30d1583..4a99fdd 100644 --- a/share/solid_draw.h +++ b/share/solid_draw.h @@ -15,6 +15,7 @@ #ifndef SOLID_DRAW_H #define SOLID_DRAW_H +#include "glext.h" #include "solid_base.h" #include "solid_vary.h" @@ -24,21 +25,51 @@ /*---------------------------------------------------------------------------*/ +struct d_vert +{ + float p[3]; + float n[3]; + float t[2]; +}; + +struct d_geom +{ + GLushort i; + GLushort j; + GLushort k; +}; + +/*---------------------------------------------------------------------------*/ + struct d_mtrl { const struct b_mtrl *base; - GLuint o; /* OpenGL texture object */ + GLuint d; /* 32-bit diffuse color cache */ + GLuint a; /* 32-bit ambient color cache */ + GLuint s; /* 32-bit specular color cache */ + GLuint e; /* 32-bit emissive color cache */ + GLuint h; /* 32-bit specular exponent cache */ + GLuint o; /* OpenGL texture object */ +}; + +struct d_mesh +{ + const struct d_mtrl *mp; + + GLuint vbo; /* Vertex buffer object */ + GLuint ebo; /* Element buffer object */ + GLuint ebc; /* Element buffer count */ }; struct d_body { const struct b_body *base; - GLuint ol; /* opaque geometry list */ - GLuint tl; /* transparent geometry list */ - GLuint rl; /* reflective geometry list */ - GLuint sl; /* shadowed geometry list */ + int pass[5]; + int mc; + + struct d_mesh *mv; }; struct s_draw @@ -52,7 +83,22 @@ struct s_draw struct d_mtrl *mv; struct d_body *bv; + GLuint bill; + int reflective; + int shadow_ui; +}; + +/*---------------------------------------------------------------------------*/ + +/* + * This structure holds rendering state shared between separate + * SOLs. I am aware that the name leaves much to be desired. + */ + +struct s_rend +{ + const struct d_mtrl *mp; }; /*---------------------------------------------------------------------------*/ @@ -60,11 +106,20 @@ struct s_draw int sol_load_draw(struct s_draw *, const struct s_vary *, int); void sol_free_draw(struct s_draw *); -void sol_back(const struct s_draw *, float, float, float); -void sol_refl(const struct s_draw *); -void sol_draw(const struct s_draw *, int, int); -void sol_bill(const struct s_draw *, const float *, float); -void sol_shad(const struct s_draw *, int); +void sol_draw_enable(struct s_rend *); +void sol_draw_disable(struct s_rend *); + +void sol_load_mtrl(struct d_mtrl *, const struct b_mtrl *); +void sol_free_mtrl(struct d_mtrl *); + +void sol_apply_mtrl(const struct d_mtrl *, struct s_rend *); + +void sol_back(const struct s_draw *, struct s_rend *, float, float, float); +void sol_refl(const struct s_draw *, struct s_rend *); +void sol_draw(const struct s_draw *, struct s_rend *, int, int); +void sol_bill(const struct s_draw *, struct s_rend *, const float *, float); + +void sol_fade(const struct s_draw *, float); /*---------------------------------------------------------------------------*/ diff --git a/share/st_resol.c b/share/st_resol.c index e0f9799..8e3d8da 100644 --- a/share/st_resol.c +++ b/share/st_resol.c @@ -17,7 +17,6 @@ #include #include "gui.h" -#include "back.h" #include "geom.h" #include "part.h" #include "audio.h" @@ -146,7 +145,7 @@ static void resol_paint(int id, float st) { video_push_persp((float) config_get_d(CONFIG_VIEW_FOV), 0.1f, FAR_DIST); { - back_draw(0); + back_draw_easy(); } video_pop_matrix(); gui_paint(id); diff --git a/share/state.c b/share/state.c index 991248f..a144527 100644 --- a/share/state.c +++ b/share/state.c @@ -60,13 +60,13 @@ int goto_state(struct state *st) void st_paint(float t) { - int stereo = config_get_d(CONFIG_STEREO); - state_drawn = 1; if (state && state->paint) { - if (stereo) + /* TODO: reimplement stereo using LR instead of quad-buffer. + + if (config_get_d(CONFIG_STEREO)) { glDrawBuffer(GL_BACK_LEFT); video_clear(); @@ -77,6 +77,7 @@ void st_paint(float t) state->paint(state->gui_id, t); } else + */ { video_clear(); state->paint(state->gui_id, t); diff --git a/share/sync.c b/share/sync.c index 7a7df36..0395ba9 100644 --- a/share/sync.c +++ b/share/sync.c @@ -30,7 +30,7 @@ void sync_init(void) void sync_init(void) { - long swap = 1; + GLint swap = 1; CGLSetParameter(CGLGetCurrentContext(), kCGLCPSwapInterval, &swap); } diff --git a/share/video.c b/share/video.c index b71cc95..b305ae1 100644 --- a/share/video.c +++ b/share/video.c @@ -56,27 +56,6 @@ int video_init(const char *title, const char *icon) /*---------------------------------------------------------------------------*/ -PFNGLACTIVETEXTUREARBPROC glActiveTextureARB_; - -int check_extension(const char *needle) -{ - const GLubyte *haystack, *c; - - /* Search for the given string in the OpenGL extension strings. */ - - for (haystack = glGetString(GL_EXTENSIONS); *haystack; haystack++) - { - for (c = (const GLubyte *) needle; *c && *haystack; c++, haystack++) - if (*c != *haystack) - break; - - if ((*c == 0) && (*haystack == ' ' || *haystack == '\0')) - return 1; - } - - return 0; -} - int video_mode(int f, int w, int h) { int stereo = config_get_d(CONFIG_STEREO) ? 1 : 0; @@ -107,8 +86,11 @@ int video_mode(int f, int w, int h) config_set_d(CONFIG_WIDTH, w); config_set_d(CONFIG_HEIGHT, h); + if (!glext_init()) + return 0; + glViewport(0, 0, w, h); - glClearColor(0.0f, 0.0f, 0.1f, 0.0f); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glEnable(GL_NORMALIZE); glEnable(GL_CULL_FACE); @@ -117,9 +99,10 @@ int video_mode(int f, int w, int h) glEnable(GL_LIGHTING); glEnable(GL_BLEND); +#if !ENABLE_OPENGLES glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR); - glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1); +#endif glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); @@ -129,28 +112,11 @@ int video_mode(int f, int w, int h) /* If GL supports multisample, and SDL got a multisample buffer... */ -#ifdef GL_ARB_multisample - if (check_extension("ARB_multisample")) + if (glext_check("ARB_multisample")) { SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &buffers); - if (buffers) - glEnable(GL_MULTISAMPLE_ARB); + if (buffers) glEnable(GL_MULTISAMPLE); } -#endif - - if (check_extension("ARB_multitexture")) - { - union - { - void *ob; - PFNGLACTIVETEXTUREARBPROC fn; - } cast; - - cast.ob = SDL_GL_GetProcAddress("glActiveTextureARB"); - glActiveTextureARB_ = cast.fn; - } - - glReadBuffer(GL_FRONT); /* Attempt manual swap control if SDL's is broken. */ @@ -281,52 +247,52 @@ int video_get_grab(void) void video_push_persp(float fov, float n, float f) { - GLdouble m[4][4]; + GLfloat m[4][4]; - GLdouble r = fov / 2 * V_PI / 180; - GLdouble s = sin(r); - GLdouble c = cos(r) / s; + GLfloat r = fov / 2 * V_PI / 180; + GLfloat s = sin(r); + GLfloat c = cos(r) / s; - GLdouble a = ((GLdouble) config_get_d(CONFIG_WIDTH) / - (GLdouble) config_get_d(CONFIG_HEIGHT)); + GLfloat a = ((GLfloat) config_get_d(CONFIG_WIDTH) / + (GLfloat) config_get_d(CONFIG_HEIGHT)); glMatrixMode(GL_PROJECTION); { glPushMatrix(); glLoadIdentity(); - m[0][0] = c/a; - m[0][1] = 0.0; - m[0][2] = 0.0; - m[0][3] = 0.0; - m[1][0] = 0.0; - m[1][1] = c; - m[1][2] = 0.0; - m[1][3] = 0.0; - m[2][0] = 0.0; - m[2][1] = 0.0; + m[0][0] = c / a; + m[0][1] = 0.0f; + m[0][2] = 0.0f; + m[0][3] = 0.0f; + m[1][0] = 0.0f; + m[1][1] = c; + m[1][2] = 0.0f; + m[1][3] = 0.0f; + m[2][0] = 0.0f; + m[2][1] = 0.0f; m[2][2] = -(f + n) / (f - n); - m[2][3] = -1.0; - m[3][0] = 0.0; - m[3][1] = 0.0; - m[3][2] = -2.0 * n * f / (f - n); - m[3][3] = 0.0; + m[2][3] = -1.0f; + m[3][0] = 0.0f; + m[3][1] = 0.0f; + m[3][2] = -2.0f * n * f / (f - n); + m[3][3] = 0.0f; - glMultMatrixd(&m[0][0]); + glMultMatrixf(&m[0][0]); } glMatrixMode(GL_MODELVIEW); } void video_push_ortho(void) { - GLdouble w = (GLdouble) config_get_d(CONFIG_WIDTH); - GLdouble h = (GLdouble) config_get_d(CONFIG_HEIGHT); + GLfloat w = (GLfloat) config_get_d(CONFIG_WIDTH); + GLfloat h = (GLfloat) config_get_d(CONFIG_HEIGHT); glMatrixMode(GL_PROJECTION); { glPushMatrix(); glLoadIdentity(); - glOrtho(0.0, w, 0.0, h, -1.0, +1.0); + glOrtho_(0.0, w, 0.0, h, -1.0, +1.0); } glMatrixMode(GL_MODELVIEW); } @@ -343,12 +309,10 @@ void video_pop_matrix(void) void video_clear(void) { if (config_get_d(CONFIG_REFLECTION)) - glClear(GL_COLOR_BUFFER_BIT | - GL_DEPTH_BUFFER_BIT | + glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); else - glClear(GL_COLOR_BUFFER_BIT | - GL_DEPTH_BUFFER_BIT); + glClear(GL_DEPTH_BUFFER_BIT); } /*---------------------------------------------------------------------------*/