X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fpolytest.c;h=1815bb95b17a4769062c56374c2eeda0f0cbdda8;hp=800dd465ba2aeb732df84bf4623caca36116684e;hb=6c5e65928b425dd6a7f5192841e1d4ef9d90789a;hpb=07ce18b114e1e01b2a85a04079128f3eb754de1d diff --git a/src/polytest.c b/src/polytest.c index 800dd46..1815bb9 100644 --- a/src/polytest.c +++ b/src/polytest.c @@ -7,6 +7,7 @@ #include "3dgfx.h" #include "gfxutil.h" #include "polyfill.h" /* just for struct pimage */ +#include "cfgopt.h" struct mesh { int prim; @@ -34,7 +35,8 @@ static struct screen scr = { draw }; -static float theta, phi = 25; +static float cam_theta, cam_phi = 25; +static float cam_dist = 3; static struct mesh cube, torus; static struct pimage tex; @@ -104,11 +106,18 @@ static void update(void) int dy = mouse_y - prev_my; if(dx || dy) { - theta += dx * 2.0; - phi += dy * 2.0; - - if(phi < -90) phi = -90; - if(phi > 90) phi = 90; + if(mouse_bmask & 1) { + cam_theta += dx * 1.0; + cam_phi += dy * 1.0; + + if(cam_phi < -90) cam_phi = -90; + if(cam_phi > 90) cam_phi = 90; + } + if(mouse_bmask & 4) { + cam_dist += dy * 0.5; + + if(cam_dist < 0) cam_dist = 0; + } } } } @@ -126,9 +135,13 @@ static void draw(void) g3d_matrix_mode(G3D_MODELVIEW); g3d_load_identity(); - g3d_translate(0, 0, -3); - g3d_rotate(phi, 1, 0, 0); - g3d_rotate(theta, 0, 1, 0); + g3d_translate(0, 0, -cam_dist); + if(opt.sball) { + g3d_mult_matrix(sball_matrix); + } else { + g3d_rotate(cam_phi, 1, 0, 0); + g3d_rotate(cam_theta, 0, 1, 0); + } g3d_light_pos(0, -10, 10, 20); @@ -151,9 +164,9 @@ static void draw_debug(void) g3d_matrix_mode(G3D_MODELVIEW); g3d_load_identity(); - g3d_translate(0, 0, -3); - g3d_rotate(phi, 1, 0, 0); - g3d_rotate(theta, 0, 1, 0); + g3d_translate(0, 0, -cam_dist); + g3d_rotate(cam_phi, 1, 0, 0); + g3d_rotate(cam_theta, 0, 1, 0); g3d_framebuffer(lowres_width, lowres_height, lowres_pixels); /*zsort(&torus);*/ @@ -283,6 +296,8 @@ static int gen_torus(struct mesh *mesh, float rad, float ringrad, int usub, int nfaces = usub * vsub; mesh->icount = nfaces * 4; + printf("generating torus with %d faces (%d vertices)\n", nfaces, mesh->vcount); + if(!(mesh->varr = malloc(mesh->vcount * sizeof *mesh->varr))) { return -1; }