diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-20 14:42:30 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-20 14:42:30 (GMT) |
commit | 94f66fc3270f049202b25d79622f9042a37359eb (patch) | |
tree | bc84c53d1b1d02215c0fdabc1fc48288f358e24f | |
parent | 88a86884cd1664a6820327c1ff8251bedaa947af (diff) | |
download | 2iv35-94f66fc3270f049202b25d79622f9042a37359eb.zip 2iv35-94f66fc3270f049202b25d79622f9042a37359eb.tar.gz 2iv35-94f66fc3270f049202b25d79622f9042a37359eb.tar.bz2 |
rotation seperated from 3D renderer
-rw-r--r-- | Smoke/fluids.c | 24 | ||||
-rw-r--r-- | Smoke/fluids.h | 3 | ||||
-rw-r--r-- | Smoke/gtk.c | 14 | ||||
-rw-r--r-- | Smoke/gtk_main.c | 20 | ||||
-rw-r--r-- | Smoke/renderer_gl.c | 54 | ||||
-rwxr-xr-x | Smoke/smoke.bin | bin | 617716 -> 620436 bytes | |||
-rw-r--r-- | Smoke/smoke.c | 2 |
7 files changed, 75 insertions, 42 deletions
diff --git a/Smoke/fluids.c b/Smoke/fluids.c index 4aa4b0e..9ae7d7f 100644 --- a/Smoke/fluids.c +++ b/Smoke/fluids.c @@ -54,6 +54,8 @@ float x_rot = 0.0f; float y_rot = 0.0f; float z_rot = 0.0f; +static int fluids_calculate = TRUE; + //------ SIMULATION CODE STARTS HERE ----------------------------------------------------------------- //init_simulation: Initialize simulation data structures as a function of the grid size 'n'. @@ -266,11 +268,13 @@ void copy_frame(fftw_real *field) void calculate_one_simulation_step(fftw_real *field) { - set_forces(); - solve(DIM, vx, vy, vx0, vy0, visc, dt); - diffuse_matter(DIM, vx, vy, rho, rho0, dt); - calculate_hight_plot(); - copy_frame(field); + if (fluids_calculate) { + set_forces(); + solve(DIM, vx, vy, vx0, vy0, visc, dt); + diffuse_matter(DIM, vx, vy, rho, rho0, dt); + calculate_hight_plot(); + copy_frame(field); + } } //------ VISUALIZATION CODE STARTS HERE ----------------------------------------------------------------- @@ -500,3 +504,13 @@ void set_glyph_sort(int sort) { glyph_sort = sort; } + +void fluids_set_calculate(int calculate) +{ + fluids_calculate = calculate; +} + +int fluids_get_calculate(void) +{ + return fluids_calculate; +} diff --git a/Smoke/fluids.h b/Smoke/fluids.h index 7f00a39..db487d4 100644 --- a/Smoke/fluids.h +++ b/Smoke/fluids.h @@ -92,4 +92,7 @@ extern int isolines_nr; extern float threshold1; extern float threshold2; +void fluids_set_calculate(int calculate); +int fluids_get_calculate(void); + #endif diff --git a/Smoke/gtk.c b/Smoke/gtk.c index d17d4ad..7f95865 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -415,23 +415,27 @@ key_press_event (GtkWidget *widget, case GDK_x: if (smoke_get_render()) { - smoke_set_render(TRUE); - } else { smoke_set_render(FALSE); + } else { + smoke_set_render(TRUE); } break; case GDK_y: if (glyphs_get_render()) { - glyphs_set_render(TRUE); - } else { glyphs_set_render(FALSE); + } else { + glyphs_set_render(TRUE); } break; case GDK_a: // g_print ("a key\n"); - toggle_animation (widget); + if (fluids_get_calculate()) { + fluids_set_calculate(FALSE); + } else { + fluids_set_calculate(TRUE); + } break; case GDK_q: diff --git a/Smoke/gtk_main.c b/Smoke/gtk_main.c index 7c8767f..0a9cf98 100644 --- a/Smoke/gtk_main.c +++ b/Smoke/gtk_main.c @@ -30,6 +30,10 @@ static gboolean select_render_flowvis(GtkWidget *button, gpointer data) { flowvis_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); } +static gboolean select_calculate(GtkWidget *button, gpointer data) { + fluids_set_calculate(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); +} + GtkWidget *create_main_page(void) { @@ -46,35 +50,41 @@ GtkWidget *create_main_page(void) box = gtk_vbox_new(FALSE, 0); button = gtk_check_button_new_with_label("Draw Smoke"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), smoke_get_render()); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_smoke), NULL); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_check_button_new_with_label("Draw Glyphs"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), glyphs_get_render()); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_glyphs), NULL); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_check_button_new_with_label("Draw Isolines"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), isolines_get_render()); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_isolines), NULL); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_check_button_new_with_label("Draw Streamlines"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), streamlines_get_render()); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_streamlines), NULL); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_check_button_new_with_label("Draw Flowvis"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), flowvis_get_render()); g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_flowvis), NULL); gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); + button = gtk_check_button_new_with_label("Toggle Calculation"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), fluids_get_calculate()); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_calculate), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + gtk_box_pack_start (GTK_BOX(page), box, FALSE, TRUE, 0); gtk_widget_show(box); diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c index 2906125..d02442b 100644 --- a/Smoke/renderer_gl.c +++ b/Smoke/renderer_gl.c @@ -35,31 +35,32 @@ float xPos = -298.0f; float yPos = -295.0f; float zPos = -725.0f; -void vector_normal(struct point vert1, struct point vert2, struct point vert3, struct point *normal)
-{
- struct point v1, v2;
- float length;
-
- v1.x = vert1.x - vert2.x;
- v1.y = vert1.y - vert2.y;
- v1.z = vert1.z - vert2.z;
-
- v2.x = vert2.x - vert3.x;
- v2.y = vert2.y - vert3.y;
- v2.z = vert2.z - vert3.z;
-
- normal->x = v1.y * v2.z - v1.z * v2.y;
- normal->y = v1.z * v2.x - v1.x * v2.z;
- normal->z = v1.x * v2.y - v1.y * v2.x;
-
- length = vec_len3f(normal->x, normal->y, normal->z);
-
- if(length == 0.0f)
- length = 1.0f;
-
- normal->x /= length;
- normal->y /= length;
- normal->z /= length;
+void vector_normal(struct point vert1, struct point vert2, struct point vert3, struct point *normal) +{ + struct point v1, v2; + float length; + + v1.x = vert1.x - vert2.x; + v1.y = vert1.y - vert2.y; + v1.z = vert1.z - vert2.z; + + v2.x = vert2.x - vert3.x; + v2.y = vert2.y - vert3.y; + v2.z = vert2.z - vert3.z; + + normal->x = v1.y * v2.z - v1.z * v2.y; + normal->y = v1.z * v2.x - v1.x * v2.z; + normal->z = v1.x * v2.y - v1.y * v2.x; + + length = vec_len3f(normal->x, normal->y, normal->z); + + if(length == 0.0f) { + length = 1.0f; + } + + normal->x /= length; + normal->y /= length; + normal->z /= length; } @@ -585,7 +586,8 @@ void render_flowvis(fftw_real *field) void init_gl(void) { - float LightAmbient[] = { 0.25f, 0.25f, 0.25f, 1.00f }; // Ambient light values + //float LightAmbient[] = { 0.25f, 0.25f, 0.25f, 1.00f }; // Ambient light values + float LightAmbient[] = { 0.0f, 0.0f, 0.0f, 1.00f }; // Ambient light values float LightDiffuse[] = { 0.50f, 0.50f, 0.50f, 1.00f }; // Diffuse light values float LightPosition[] = { 0.0f, 400.0f, -700, 1.00f }; // Position of the light source diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin Binary files differindex 4bea735..608496d 100755 --- a/Smoke/smoke.bin +++ b/Smoke/smoke.bin diff --git a/Smoke/smoke.c b/Smoke/smoke.c index c905dc4..1ccdb71 100644 --- a/Smoke/smoke.c +++ b/Smoke/smoke.c @@ -5,7 +5,7 @@ #include "funcs.h" -static int smoke_render_smoke = FALSE; +static int smoke_render_smoke = TRUE; void smoke_set_render(int render_smoke) |