summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2007-12-20 14:42:30 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2007-12-20 14:42:30 (GMT)
commit94f66fc3270f049202b25d79622f9042a37359eb (patch)
treebc84c53d1b1d02215c0fdabc1fc48288f358e24f
parent88a86884cd1664a6820327c1ff8251bedaa947af (diff)
download2iv35-94f66fc3270f049202b25d79622f9042a37359eb.zip
2iv35-94f66fc3270f049202b25d79622f9042a37359eb.tar.gz
2iv35-94f66fc3270f049202b25d79622f9042a37359eb.tar.bz2
rotation seperated from 3D renderer
-rw-r--r--Smoke/fluids.c24
-rw-r--r--Smoke/fluids.h3
-rw-r--r--Smoke/gtk.c14
-rw-r--r--Smoke/gtk_main.c20
-rw-r--r--Smoke/renderer_gl.c54
-rwxr-xr-xSmoke/smoke.binbin617716 -> 620436 bytes
-rw-r--r--Smoke/smoke.c2
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
index 4bea735..608496d 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ
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)