projects
/
meshfrac
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
updated files from meshfrac_alt
[meshfrac]
/
main.c
diff --git
a/main.c
b/main.c
index
724fd70
..
258cbd5
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-8,6
+8,7
@@
#include "meshgen.h"
#include "frac.h"
#include "sdr.h"
#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"
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 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)
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();
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);
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;
}
return 0;
}
@@
-135,7
+146,8
@@
static void update(void)
if(pending > cur) {
switch(cur) {
case 0:
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;
cur++;
} else {
pending = cur;
@@
-144,22
+156,28
@@
static void update(void)
break;
case 1:
break;
case 1:
+ printf("Build cells...\n");
if(frac_build_cells(&frac) != -1) {
cur++;
} else {
pending = cur;
}
if(frac_build_cells(&frac) != -1) {
cur++;
} else {
pending = cur;
}
+ show_planes = 1;
break;
case 2:
break;
case 2:
+ printf("Construct shell...\n");
if(frac_build_shell(&frac) != -1) {
cur++;
} else {
pending = cur;
}
if(frac_build_shell(&frac) != -1) {
cur++;
} else {
pending = cur;
}
+ show_orig = 0;
+ show_shell = 1;
break;
case 3:
break;
case 3:
+ printf("Construct walls...\n");
if(frac_build_walls(&frac) != -1) {
cur++;
} else {
if(frac_build_walls(&frac) != -1) {
cur++;
} else {
@@
-176,7
+194,8
@@
static void update(void)
static void display(void)
{
static void display(void)
{
- int i, num;
+ int i, j, num;
+ struct poly *poly;
update();
update();
@@
-189,24
+208,31
@@
static void display(void)
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(view_mat);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(view_mat);
+ bind_program(0);
+ glShadeModel(GL_FLAT);
+
if(show_orig) {
if(show_orig) {
- bind_program(sdr);
+ //bind_program(sdr);
cmesh_draw(mesh);
cmesh_draw(mesh);
+ bind_program(0);
}
if(show_points) {
num = frac_num_cells(&frac);
}
if(show_points) {
num = frac_num_cells(&frac);
- bind_program(0);
glPushAttrib(GL_ENABLE_BIT);
glPushAttrib(GL_ENABLE_BIT);
- glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_LIGHTING);
+ glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glPointSize(2.0f);
glBegin(GL_POINTS);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glPointSize(2.0f);
glBegin(GL_POINTS);
- glColor3f(0.1, 0.8, 0.1);
for(i=0; i<num; i++) {
for(i=0; i<num; i++) {
+ if(cur_cell == i) {
+ glColor3f(0.8, 1, 0.1);
+ } else {
+ glColor3f(0.1, 0.8, 0.1);
+ }
glVertex3fv(&frac.cells[i].pt.x);
}
glEnd();
glVertex3fv(&frac.cells[i].pt.x);
}
glEnd();
@@
-214,6
+240,30
@@
static void display(void)
glPopAttrib();
}
glPopAttrib();
}
+ if(show_planes) {
+ glPushAttrib(GL_ENABLE_BIT);
+ glDisable(GL_LIGHTING);
+
+ poly = frac.cells[cur_cell].polys;
+ for(i=0; i<frac.cells[cur_cell].num_polys; i++) {
+ glBegin(GL_LINE_LOOP);
+ glColor3f(0.5, 0.5, 0);
+ for(j=0; j<dynarr_size(poly->verts); 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();
}
assert(glGetError() == GL_NO_ERROR);
glutSwapBuffers();
}
@@
-247,6
+297,25
@@
static void keydown(unsigned char key, int x, int y)
glutPostRedisplay();
break;
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';
default:
if(key >= '1' && key <= '4') {
n = key - '0';