X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=main.c;h=258cbd52c37dd1908df2c2b538316471aa35e962;hb=HEAD;hp=724fd70e5c1394e14183e68c5e698bdf978d4d5b;hpb=0b9d8564e9c3785a69829a8faa67f5169185d8fd;p=meshfrac diff --git a/main.c b/main.c index 724fd70..258cbd5 100644 --- a/main.c +++ b/main.c @@ -8,6 +8,7 @@ #include "meshgen.h" #include "frac.h" #include "sdr.h" +#include "dynarr.h" static const char *vsdr_src = "varying vec3 v_norm, v_ldir, v_vdir;\n" @@ -57,7 +58,8 @@ static unsigned int sdr; static int cur, pending; static int show_orig = 1; -static int show_points; +static int show_points, show_planes, show_shell; +static int cur_cell; int main(int argc, char **argv) @@ -114,12 +116,21 @@ static int init(void) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 60); mesh = cmesh_alloc(); - gen_torus(mesh, 2, 0.8, 24, 12, 1, 1); + //gen_torus(mesh, 2, 0.8, 24, 12, 1, 1); + //gen_sphere(mesh, 2, 12, 6, 1, 1); + gen_box(mesh, 2, 2, 2, 0, 0); if(frac_init(&frac) == -1) { return -1; } frac_mesh(&frac, mesh); + frac.cell_gap = 0.1; + + //frac_gen_points(&frac, 16); + frac_point(&frac, -5, 0, 0); + frac_point(&frac, 5, 0, 0); + show_points = 1; + cur = 1; return 0; } @@ -135,7 +146,8 @@ static void update(void) if(pending > cur) { switch(cur) { case 0: - if(frac_gen_points(&frac, 16) == -1) { + printf("Generate points...\n"); + if(frac_gen_points(&frac, 2) != -1) { cur++; } else { pending = cur; @@ -144,22 +156,28 @@ static void update(void) break; case 1: + printf("Build cells...\n"); if(frac_build_cells(&frac) != -1) { cur++; } else { pending = cur; } + show_planes = 1; break; case 2: + printf("Construct shell...\n"); if(frac_build_shell(&frac) != -1) { cur++; } else { pending = cur; } + show_orig = 0; + show_shell = 1; break; case 3: + printf("Construct walls...\n"); if(frac_build_walls(&frac) != -1) { cur++; } else { @@ -176,7 +194,8 @@ static void update(void) static void display(void) { - int i, num; + int i, j, num; + struct poly *poly; update(); @@ -189,24 +208,31 @@ static void display(void) glMatrixMode(GL_MODELVIEW); glLoadMatrixf(view_mat); + bind_program(0); + glShadeModel(GL_FLAT); + if(show_orig) { - bind_program(sdr); + //bind_program(sdr); cmesh_draw(mesh); + bind_program(0); } if(show_points) { num = frac_num_cells(&frac); - bind_program(0); glPushAttrib(GL_ENABLE_BIT); - glDisable(GL_DEPTH_TEST); glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE); glPointSize(2.0f); glBegin(GL_POINTS); - glColor3f(0.1, 0.8, 0.1); for(i=0; iverts); j++) { + glVertex3fv(&poly->verts[j].pos.x); + } + glEnd(); + poly++; + } + + glPopAttrib(); + } + + if(show_shell) { + //bind_program(sdr); + cmesh_draw(frac.cells[cur_cell].mesh); + bind_program(0); + } + assert(glGetError() == GL_NO_ERROR); glutSwapBuffers(); } @@ -247,6 +297,25 @@ static void keydown(unsigned char key, int x, int y) glutPostRedisplay(); break; + case 'P': + show_planes ^= 1; + glutPostRedisplay(); + break; + + case ']': + cur_cell = (cur_cell + 1) % frac_num_cells(&frac); + printf("current cell: %d\n", cur_cell); + glutPostRedisplay(); + break; + + case '[': + if(--cur_cell < 0) { + cur_cell = frac_num_cells(&frac) - 1; + printf("current cell: %d\n", cur_cell); + glutPostRedisplay(); + } + break; + default: if(key >= '1' && key <= '4') { n = key - '0';