summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2008-01-07 03:40:59 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2008-01-07 03:40:59 (GMT)
commit8dc29e0202fb48c078aebf271b31e903a1076d95 (patch)
tree6c0dc33a9ddc7ce1fcee675df16fb70a785af95c
parent5297d5f9565da695a6a9891f829118ecaea6ad8a (diff)
download2iv35-8dc29e0202fb48c078aebf271b31e903a1076d95.zip
2iv35-8dc29e0202fb48c078aebf271b31e903a1076d95.tar.gz
2iv35-8dc29e0202fb48c078aebf271b31e903a1076d95.tar.bz2
more normal drawing
-rw-r--r--Smoke/Makefile7
-rw-r--r--Smoke/fluids.c70
-rw-r--r--Smoke/gtk.c2
-rw-r--r--Smoke/gtk_heightplots.c6
-rw-r--r--Smoke/gtk_isolines.c158
-rw-r--r--Smoke/gtk_main.c28
-rw-r--r--Smoke/heightplots.c6
-rw-r--r--Smoke/normals.c28
-rw-r--r--Smoke/normals.h10
-rw-r--r--Smoke/renderer_gl.c74
-rw-r--r--Smoke/renderer_gl.h3
-rwxr-xr-xSmoke/smoke.binbin636173 -> 632507 bytes
12 files changed, 276 insertions, 116 deletions
diff --git a/Smoke/Makefile b/Smoke/Makefile
index d300bae..bc45cb4 100644
--- a/Smoke/Makefile
+++ b/Smoke/Makefile
@@ -3,10 +3,10 @@
CPP = g++
CC = gcc -Wall
-OBJ_GTK = funcs.o interact.o fluids.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o renderer_gl.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
+OBJ_GTK = funcs.o interact.o fluids.o normals.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o renderer_gl.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
OBJ_GLUT = glut.o fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o interact.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
LINKOBJ_GLUT = fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o interact.o glut.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
-LINKOBJ_GTK = funcs.o interact.o fluids.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o renderer_gl.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
+LINKOBJ_GTK = funcs.o interact.o fluids.o normals.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o renderer_gl.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES)
LIBS_GLUT = -lglut -lm
#INCS = -I"fftw-2.1.3/fftw" -I"fftw-2.1.3/rfftw"
LIBS_GTK = -lglut -lm `pkg-config --libs gtk+-2.0` /usr/lib/libgdkglext-x11-1.0.so /usr/lib/libgtkglext-x11-1.0.so
@@ -53,6 +53,9 @@ palette.o: palette.c
smoke.o: smoke.c
$(CC) -c smoke.c -o smoke.o $(CFLAGS)
+normals.o: normals.c
+ $(CC) -c normals.c -o normals.o $(CFLAGS)
+
colormap.o: colormap.c
$(CC) -c colormap.c -o colormap.o $(CFLAGS)
diff --git a/Smoke/fluids.c b/Smoke/fluids.c
index dcf0a08..eece203 100644
--- a/Smoke/fluids.c
+++ b/Smoke/fluids.c
@@ -220,8 +220,9 @@ void set_forces(void)
-void vector_normal(struct point vert1, struct point vert2, struct point vert3, struct point *normal)
+struct point vector_normal(struct point vert1, struct point vert2, struct point vert3)
{
+ struct point return_value;
struct point v1, v2;
float length;
@@ -236,11 +237,11 @@ void vector_normal(struct point vert1, struct point vert2, struct point vert3, s
v2.z = vert2.z - vert3.z;
// calculate cross produkt
- 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;
+ return_value.x = v1.y * v2.z - v1.z * v2.y;
+ return_value.y = v1.z * v2.x - v1.x * v2.z;
+ return_value.z = v1.x * v2.y - v1.y * v2.x;
- length = vec_len3f(normal->x, normal->y, normal->z);
+ length = vec_len3f(return_value.x, return_value.y, return_value.z);
if(length == 0.0f)
{
@@ -248,9 +249,11 @@ void vector_normal(struct point vert1, struct point vert2, struct point vert3, s
}
// normalize
- normal->x /= length;
- normal->y /= length;
- normal->z /= length;
+ return_value.x /= length;
+ return_value.y /= length;
+ return_value.z /= length;
+
+ return return_value;
}
@@ -283,17 +286,40 @@ void calculate_normal_vectors(void)
p3.y = py;
p3.z = height_array[idx + 1];
- vector_normal(p2, p1, p3, &normal_array[idx]);
+ normal_array[idx] = vector_normal(p2, p1, p3);
}
}
}
+struct point calculate_normal_vector(fftw_real *height, int index, int i, int j)
+{
+ struct point p1, p2, p3;
+
+ fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ float px = wn + (fftw_real)i * wn;
+ float py = hn + (fftw_real)(j + 1) * hn;
+
+ p1.x = px;
+ p1.y = py + hn;
+ p1.z = height[index + DIM];
+
+ p2.x = px;
+ p2.y = py;
+ p2.z = height[index];
+
+ p3.x = px + wn;
+ p3.y = py;
+ p3.z = height[index + 1];
+
+ return vector_normal(p1, p2, p3);
+}
void calculate_height_plots(void)
{
int i;
for (i = 0; i < DIM * DIM; i++)
- {
+ {
switch (vis_dataset)
{
case DATASET_FORCE:
@@ -314,21 +340,29 @@ void calculate_height_plots(void)
}
}
-void calculate_height_plot(struct vis_data_arrays *vis_data, int dataset, int index)
+fftw_real calculate_height_plot(int dataset, int index)
{
+ fftw_real return_value;
+
switch(dataset)
{
default:
case DATASET_RHO:
- vis_data->height[index] = rho[index];
+ return_value = rho[index];
break;
case DATASET_VEL:
- vis_data->height[index] = vec_len2f(vx[index], vy[index]);
+ return_value = vec_len2f(vx[index], vy[index]);
break;
case DATASET_FORCE:
- vis_data->height[index] = vec_len2f(fx[index], fy[index]);
+ return_value = vec_len2f(fx[index], fy[index]);
+ break;
+ case DATASET_DIVV:
+ case DATASET_DIVF:
+ return_value = 0.0f;
break;
}
+
+ return return_value;
}
void copy_frames(fftw_real *dataset)
@@ -347,7 +381,7 @@ void populate_arrays(struct vis_data_arrays *vis_data)
fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
-
+
for (j = 0; j < DIM; j++)
{
for (i = 0; i < DIM; i++)
@@ -362,7 +396,11 @@ void populate_arrays(struct vis_data_arrays *vis_data)
vis_data->div_force[idx] = par_der(fx[idx +1], fx[idx], hn)
+par_der(fy[idx +1], fy[idx], winHeight);
- calculate_height_plot(vis_data, heightplots_get_dataset(), idx);
+ vis_data->height[idx] = calculate_height_plot(heightplots_get_dataset(), idx);
+
+ //vis_data->normals[idx] = calculate_normal_vector(vis_data->height, idx, i, j);
+ // printf("vis: h: %lf n: %lf; old: h: %lf n: %lf\n",
+ // vis_data->height[idx], vis_data->normals[idx].x, height_array[idx], normal_array[idx].x);
}
}
}
diff --git a/Smoke/gtk.c b/Smoke/gtk.c
index bd04a8b..fc2971a 100644
--- a/Smoke/gtk.c
+++ b/Smoke/gtk.c
@@ -794,7 +794,7 @@ create_window (GdkGLConfig *glconfig, struct vis_data_arrays *vis_data)
notebook_page_label = gtk_label_new("Isolines");
gtk_widget_show(notebook_page_label);
-// notebook_page = create_isolines_page();
+ notebook_page = create_isolines_page();
gtk_widget_show(notebook_page);
gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label);
diff --git a/Smoke/gtk_heightplots.c b/Smoke/gtk_heightplots.c
index dadec94..c279094 100644
--- a/Smoke/gtk_heightplots.c
+++ b/Smoke/gtk_heightplots.c
@@ -66,15 +66,15 @@ static void init_adjustments(void)
heightplots_set_dataset(DATASET_RHO);
rho_adj = GTK_ADJUSTMENT(gtk_adjustment_new(
- heightplots_get_height(), 1, 500, 5, 50, 0));
+ heightplots_get_height(), 1, 400, 5, 50, 0));
g_object_ref(rho_adj);
heightplots_set_dataset(DATASET_VEL);
vel_adj = GTK_ADJUSTMENT(gtk_adjustment_new(
- heightplots_get_height(), 1, 2000, 5, 50, 0));
+ heightplots_get_height(), 1, 5000, 5, 50, 0));
g_object_ref(vel_adj);
heightplots_set_dataset(DATASET_FORCE);
force_adj = GTK_ADJUSTMENT(gtk_adjustment_new(
- heightplots_get_height(), 1, 2000, 5, 50, 0));
+ heightplots_get_height(), 1, 8000, 5, 50, 0));
g_object_ref(force_adj);
heightplots_set_dataset(DATASET_DIVV);
divv_adj = GTK_ADJUSTMENT(gtk_adjustment_new(
diff --git a/Smoke/gtk_isolines.c b/Smoke/gtk_isolines.c
index 9c5f4b3..d5a6681 100644
--- a/Smoke/gtk_isolines.c
+++ b/Smoke/gtk_isolines.c
@@ -43,119 +43,121 @@ GtkWidget *create_isolines_page(void)
page = gtk_vbox_new(FALSE, 0);
- frame = gtk_frame_new("Scalarset");
+#if 0
+ frame = gtk_frame_new("Scalarset");
- box = gtk_hbox_new(FALSE, 0);
+ box = gtk_hbox_new(FALSE, 0);
- button = gtk_radio_button_new_with_label (NULL, "Rho");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
- g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_RHO);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label (NULL, "Rho");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE);
+ g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_RHO);
+ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
+ dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
- button = gtk_radio_button_new_with_label(dataset_group, "Velocity");
- g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_VEL);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label(dataset_group, "Velocity");
+ g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_VEL);
+ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
- g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_FORCE);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
+ g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_FORCE);
+ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- gtk_container_add(GTK_CONTAINER(frame), box);
- gtk_widget_show(box);
+ gtk_container_add(GTK_CONTAINER(frame), box);
+ gtk_widget_show(box);
- gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0);
- gtk_widget_show(frame);
-
- frame = gtk_frame_new("Vectorset");
+ gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0);
+ gtk_widget_show(frame);
+
+ frame = gtk_frame_new("Vectorset");
- box = gtk_hbox_new(FALSE, 0);
+ box = gtk_hbox_new(FALSE, 0);
- button = gtk_radio_button_new_with_label(NULL, "Velocity");
- // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_VEL);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label(NULL, "Velocity");
+ // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_VEL);
+ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
+ dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button));
- button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
- // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_FORCE);
- gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
- gtk_widget_show(button);
+ button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force");
+ // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_FORCE);
+ gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
- gtk_container_add(GTK_CONTAINER(frame), box);
- gtk_widget_show(box);
+ gtk_container_add(GTK_CONTAINER(frame), box);
+ gtk_widget_show(box);
- gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0);
- gtk_widget_show(frame);
-
+ gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0);
+ gtk_widget_show(frame);
+
- frame = gtk_frame_new("Colors");
+ frame = gtk_frame_new("Colors");
- box = gtk_vbox_new(FALSE, 0);
-
+ box = gtk_vbox_new(FALSE, 0);
+
- label = gtk_label_new("Colormap");
+ label = gtk_label_new("Colormap");
- gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
- gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
+ gtk_widget_show(label);
- combo = gtk_combo_box_new_text();
+ combo = gtk_combo_box_new_text();
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Black & White");
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Rainbow");
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Bands");
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Wilrik");
- gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Oliver");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Black & White");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Rainbow");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Bands");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Wilrik");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Oliver");
- gtk_combo_box_set_active(GTK_COMBO_BOX(combo), isolines_get_colormap());
- g_signal_connect(combo, "changed", G_CALLBACK(select_colormap), (gpointer)NULL);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo), isolines_get_colormap());
+ g_signal_connect(combo, "changed", G_CALLBACK(select_colormap), (gpointer)NULL);
- gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0);
- gtk_widget_show(combo);
+ gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0);
+ gtk_widget_show(combo);
- label = gtk_label_new("Number of Colors");
+ label = gtk_label_new("Number of Colors");
- gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
- gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
+ gtk_widget_show(label);
- color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(
- isolines_get_num_colors(), 1, PALETTE_MAXCOLORS, 0.5, 5, 0.1));
- color_scale = gtk_hscale_new(color_adjustment);
- gtk_scale_set_digits(GTK_SCALE(color_scale), 0);
- g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_num_colors), NULL);
+ color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(
+ isolines_get_num_colors(), 1, PALETTE_MAXCOLORS, 0.5, 5, 0.1));
+ color_scale = gtk_hscale_new(color_adjustment);
+ gtk_scale_set_digits(GTK_SCALE(color_scale), 0);
+ g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_num_colors), NULL);
- gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0);
- gtk_widget_show(color_scale);
+ gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0);
+ gtk_widget_show(color_scale);
- label = gtk_label_new("Alpha");
+ label = gtk_label_new("Alpha");
- gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
- gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0);
+ gtk_widget_show(label);
- color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(
- isolines_get_alpha(), 0, 1, 0.05, 0.05, 0.01));
- color_scale = gtk_hscale_new(color_adjustment);
- gtk_scale_set_digits(GTK_SCALE(color_scale), 1);
- g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_alpha), NULL);
+ color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new(
+ isolines_get_alpha(), 0, 1, 0.05, 0.05, 0.01));
+ color_scale = gtk_hscale_new(color_adjustment);
+ gtk_scale_set_digits(GTK_SCALE(color_scale), 1);
+ g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_alpha), NULL);
- gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0);
- gtk_widget_show(color_scale);
+ gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0);
+ gtk_widget_show(color_scale);
- gtk_container_add(GTK_CONTAINER(frame), box);
- gtk_widget_show(box);
-
- gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(frame), box);
+ gtk_widget_show(box);
+
+ gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0);
- gtk_widget_show(frame);
+ gtk_widget_show(frame);
+#endif
return page;
}
diff --git a/Smoke/gtk_main.c b/Smoke/gtk_main.c
index 7635898..2cfd221 100644
--- a/Smoke/gtk_main.c
+++ b/Smoke/gtk_main.c
@@ -8,6 +8,7 @@
#include "gtk_main.h"
#include "renderer_gl.h"
#include "smoke.h"
+#include "normals.h"
#include "colormap.h"
#include "glyphs.h"
#include "divergence.h"
@@ -18,6 +19,13 @@
+static gboolean select_render_grid(GtkWidget *button, gpointer data) {
+ renderer_set_grid(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+
+ return TRUE;
+}
+
+
static gboolean select_render_smoke(GtkWidget *button, gpointer data) {
smoke_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
@@ -70,6 +78,12 @@ static gboolean select_normals(GtkWidget *button, gpointer data) {
return TRUE;
}
+static gboolean select_normals2(GtkWidget *button, gpointer data) {
+ normals_set_render2(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+
+ return TRUE;
+}
+
static gboolean reset_zoom(GtkWidget *button, gpointer data) {
renderer_reset_zoom();
@@ -141,6 +155,12 @@ GtkWidget *create_main_page(void)
page = gtk_vbox_new(FALSE, 0);
box = gtk_vbox_new(FALSE, 0);
+ button = gtk_check_button_new_with_label("Draw Grid");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), renderer_get_grid());
+ g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_grid), NULL);
+ gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0);
+ gtk_widget_show(button);
+
button = gtk_check_button_new_with_label("Draw Smoke");
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);
@@ -177,12 +197,18 @@ GtkWidget *create_main_page(void)
gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0);
gtk_widget_show(button);
- button = gtk_check_button_new_with_label("Draw Normal Vectors");
+ button = gtk_check_button_new_with_label("Draw Normals Vectors");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), normals_get_render());
g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_normals), NULL);
gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0);
gtk_widget_show(button);
+ button = gtk_check_button_new_with_label("Draw Normals2 Vectors");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), normals_get_render2());
+ g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_normals2), 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/heightplots.c b/Smoke/heightplots.c
index 61efea1..669bbfd 100644
--- a/Smoke/heightplots.c
+++ b/Smoke/heightplots.c
@@ -23,9 +23,9 @@ static float heightplots_alpha = 1.0f;
static int heightplots_dataset = DATASET_RHO;
-static int heightplots_rho = 100;
-static int heightplots_vel = 10;
-static int heightplots_force = 10;
+static int heightplots_rho = 16;
+static int heightplots_vel = 5000;
+static int heightplots_force = 100;
static int heightplots_divv = 100;
static int heightplots_divf = 100;
diff --git a/Smoke/normals.c b/Smoke/normals.c
new file mode 100644
index 0000000..0684b6a
--- /dev/null
+++ b/Smoke/normals.c
@@ -0,0 +1,28 @@
+#include "funcs.h"
+
+#include "normals.h"
+
+
+static int normals_render = FALSE;
+static int normals_render2 = FALSE;
+
+
+int normals_get_render(void)
+{
+ return normals_render;
+}
+
+void normals_set_render(int render_normals)
+{
+ normals_render = render_normals;
+}
+
+int normals_get_render2(void)
+{
+ return normals_render2;
+}
+
+void normals_set_render2(int render_normals)
+{
+ normals_render2 = render_normals;
+}
diff --git a/Smoke/normals.h b/Smoke/normals.h
new file mode 100644
index 0000000..4763c45
--- /dev/null
+++ b/Smoke/normals.h
@@ -0,0 +1,10 @@
+#ifndef _NORMALS_H
+#define _NORMALS_H
+
+void normals_set_render(int render_normals);
+int normals_get_render(void);
+
+void normals_set_render2(int render_normals);
+int normals_get_render2(void);
+
+#endif
diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c
index 1d722ce..1f6b9a4 100644
--- a/Smoke/renderer_gl.c
+++ b/Smoke/renderer_gl.c
@@ -15,6 +15,7 @@
#include "funcs.h"
#include "fluids.h"
#include "palette.h"
+#include "normals.h"
#include "smoke.h"
#include "colormap.h"
#include "glyphs.h"
@@ -47,8 +48,9 @@ float x_pos = DEFAULT_X_POS;
float y_pos = DEFAULT_Y_POS;
float z_pos = DEFAULT_ZOOM;
+static int renderer_grid = FALSE;
+
static int renderer_zoomspeed = DEFAULT_ZOOM_SPEED;
-static int normals_render = FALSE;
static void render_legend(void)
{
@@ -135,6 +137,10 @@ static void render_legend(void)
glEnable(GL_DEPTH_TEST);
}
+static void render_grid(void)
+{
+}
+
static void render_normal(void)
{
int i, j, idx, DIM;
@@ -169,6 +175,42 @@ static void render_normal(void)
}
+static void render_normals(void)
+{
+ int i, j, idx, DIM;
+ double px, py;
+ fftw_real wn, hn;
+ fftw_real *height;
+
+ DIM = fluids_get_dim();
+ wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ float normal_scale = 10.0f;
+
+ height = heightplots_get_frame();
+
+ glDisable(GL_LIGHTING);
+ glBegin(GL_LINES);
+ glColor3f(0.2f, 1.0f, 0.0f);
+
+ for (j = 0; j < DIM - 1; j++)
+ {
+ for (i = 0; i < DIM; i++)
+ {
+ idx = (j * DIM) + i;
+ px = wn + (fftw_real)i * wn;
+ py = hn + (fftw_real)(j + 1) * hn;
+
+ glVertex3f(px, py, height[idx]);
+ glVertex3f(px + normal_array[idx].x * normal_scale,
+ py + normal_array[idx].y * normal_scale,
+ height[idx] + normal_array[idx].z * normal_scale);
+ }
+ }
+ glEnable(GL_LIGHTING);
+ glEnd();
+}
+
static void render_smoke(void)
{
int i, j, idx, DIM;
@@ -636,6 +678,16 @@ void renderer_init_gl(void)
}
+void renderer_set_grid(grid)
+{
+ renderer_grid = grid;
+}
+
+int renderer_get_grid(void)
+{
+ return renderer_grid;
+}
+
void renderer_set_zoomspeed(int zoomspeed)
{
renderer_zoomspeed = zoomspeed;
@@ -700,8 +752,12 @@ void visualize(struct vis_data_arrays *vis_data)
glTranslatef(-winWidth/2, -winHeight/2, 0.0f);
+ if (render_grid) {
+ render_grid();
+ }
+
if (isolines_get_render()) {
- render_isolines();
+ render_isolines();
}
if (smoke_get_render()) {
@@ -726,15 +782,9 @@ void visualize(struct vis_data_arrays *vis_data)
render_normal();
}
- render_legend();
-}
-
-int normals_get_render(void)
-{
- return normals_render;
-}
+ if (normals_get_render2()) {
+ render_normals();
+ }
-void normals_set_render(int normals)
-{
- normals_render = normals;
+ render_legend();
}
diff --git a/Smoke/renderer_gl.h b/Smoke/renderer_gl.h
index 4d7d421..361ff79 100644
--- a/Smoke/renderer_gl.h
+++ b/Smoke/renderer_gl.h
@@ -9,6 +9,9 @@ void visualize(struct vis_data_arrays *vis_data);
void renderer_set_zoomspeed(int zoomspeed);
int renderer_get_zoomspeed(void);
+void renderer_set_grid(int grid);
+int renderer_get_grid(void);
+
void renderer_zoom_in(void);
void renderer_zoom_out(void);
void renderer_reset_zoom(void);
diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin
index da1d5b5..92bbf72 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ