From 8dc29e0202fb48c078aebf271b31e903a1076d95 Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Mon, 7 Jan 2008 03:40:59 +0000 Subject: more normal drawing --- Smoke/Makefile | 7 ++- Smoke/fluids.c | 70 ++++++++++++++++----- Smoke/gtk.c | 2 +- Smoke/gtk_heightplots.c | 6 +- Smoke/gtk_isolines.c | 158 ++++++++++++++++++++++++------------------------ Smoke/gtk_main.c | 28 ++++++++- Smoke/heightplots.c | 6 +- Smoke/normals.c | 28 +++++++++ Smoke/normals.h | 10 +++ Smoke/renderer_gl.c | 74 +++++++++++++++++++---- Smoke/renderer_gl.h | 3 + Smoke/smoke.bin | Bin 636173 -> 632507 bytes 12 files changed, 276 insertions(+), 116 deletions(-) create mode 100644 Smoke/normals.c create mode 100644 Smoke/normals.h 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 Binary files a/Smoke/smoke.bin and b/Smoke/smoke.bin differ -- cgit v0.12