X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fpolytest.c;h=0b0531372d640dfa653c9376226428e721279b80;hp=dfca5ef2a5978aeb3e52d1e3287ccdd5bc290525;hb=5f36e95f19ad8d7a5a1dd546ffeb54ce95d51749;hpb=45f6f46fe758d15aafccdb69ae837fc7d84ee466 diff --git a/src/polytest.c b/src/polytest.c index dfca5ef..0b05313 100644 --- a/src/polytest.c +++ b/src/polytest.c @@ -16,6 +16,7 @@ static void destroy(void); static void start(long trans_time); static void draw(void); static void draw_lowres_raster(void); +static void keypress(int key); static int gen_texture(struct pimage *img, int xsz, int ysz); static struct screen scr = { @@ -23,7 +24,8 @@ static struct screen scr = { init, destroy, start, 0, - draw + draw, + keypress }; static float cam_theta, cam_phi = 25; @@ -33,6 +35,8 @@ static struct bsptree torus_bsp; static struct pimage tex; +static int use_bsp = 0; + #define LOWRES_SCALE 10 static uint16_t *lowres_pixels; static int lowres_width, lowres_height; @@ -54,11 +58,13 @@ static int init(void) torus.varr[i].v *= 2.0; } + /* init_bsp(&torus_bsp); if(bsp_add_mesh(&torus_bsp, &torus) == -1) { fprintf(stderr, "failed to construct torus BSP tree\n"); return -1; } + */ gen_texture(&tex, 128, 128); @@ -78,7 +84,9 @@ static void destroy(void) free(cube.varr); free(torus.varr); free(torus.iarr); + /* destroy_bsp(&torus_bsp); + */ } static void start(long trans_time) @@ -91,7 +99,8 @@ static void start(long trans_time) g3d_enable(G3D_LIGHTING); g3d_enable(G3D_LIGHT0); - g3d_polygon_mode(G3D_TEX_GOURAUD); + g3d_polygon_mode(G3D_GOURAUD); + g3d_enable(G3D_TEXTURE_2D); } static void update(void) @@ -103,7 +112,7 @@ static void update(void) static void draw(void) { float vdir[3]; - float mat[16]; + const float *mat; update(); @@ -119,23 +128,24 @@ static void draw(void) g3d_rotate(cam_theta, 0, 1, 0); } - /* calc world-space view direction */ - g3d_get_matrix(G3D_MODELVIEW, mat); - /* transform (0, 0, -1) with transpose(mat3x3) */ - vdir[0] = -mat[2]; - vdir[1] = -mat[6]; - vdir[2] = -mat[10]; - - g3d_light_pos(0, -10, 10, 20); - zsort_mesh(&torus); - g3d_mtl_diffuse(0.4, 0.7, 1.0); g3d_set_texture(tex.width, tex.height, tex.pixels); - /*draw_mesh(&torus);*/ - draw_bsp(&torus_bsp, vdir[0], vdir[1], vdir[2]); + if(use_bsp) { + /* calc world-space view direction */ + mat = g3d_get_matrix(G3D_MODELVIEW, 0); + /* transform (0, 0, -1) with transpose(mat3x3) */ + vdir[0] = -mat[2]; + vdir[1] = -mat[6]; + vdir[2] = -mat[10]; + + draw_bsp(&torus_bsp, vdir[0], vdir[1], vdir[2]); + } else { + zsort_mesh(&torus); + draw_mesh(&torus); + } /*draw_mesh(&cube);*/ swap_buffers(fb_pixels); @@ -198,6 +208,16 @@ static void draw_lowres_raster(void) } } +static void keypress(int key) +{ + switch(key) { + case 'b': + use_bsp = !use_bsp; + printf("drawing with %s\n", use_bsp ? "BSP tree" : "z-sorting"); + break; + } +} + static int gen_texture(struct pimage *img, int xsz, int ysz) { int i, j;