summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2008-01-09 10:16:09 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2008-01-09 10:16:09 (GMT)
commit95276812f04f5bf47d4c69da8bafed5563ff082b (patch)
treecc26056f5017856e4368ef3c34a741645ea391a1
parentd2dfa01936d3d6e2a9ce7213ab4471e03b6a62e3 (diff)
download2iv35-95276812f04f5bf47d4c69da8bafed5563ff082b.zip
2iv35-95276812f04f5bf47d4c69da8bafed5563ff082b.tar.gz
2iv35-95276812f04f5bf47d4c69da8bafed5563ff082b.tar.bz2
smoke!
-rw-r--r--Smoke/fluids.c8
-rw-r--r--Smoke/renderer_gl.c215
-rwxr-xr-xSmoke/smoke.binbin637207 -> 637668 bytes
3 files changed, 116 insertions, 107 deletions
diff --git a/Smoke/fluids.c b/Smoke/fluids.c
index 2113357..21bb554 100644
--- a/Smoke/fluids.c
+++ b/Smoke/fluids.c
@@ -399,10 +399,10 @@ void populate_arrays(struct vis_data_arrays *vis_data)
vis_data->height[idx] = calculate_height_plot(heightplots_get_dataset(), idx);
vis_data->normals[idx] = calculate_normal_vector(vis_data->height, idx, i, j);
-// if (normal_array[idx].x != vis_data->normals[idx].x) {
- // printf("n: %lf; old: %lf\n",
- // vis_data->normals[idx].x, normal_array[idx].x);
- //}
+// if (normal_array[idx].z != vis_data->normals[idx].z) {
+// printf("n: %lf; old: %lf\n",
+// vis_data->normals[idx].z, normal_array[idx].z);
+// }
}
}
}
diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c
index 5a33093..a2b6a6f 100644
--- a/Smoke/renderer_gl.c
+++ b/Smoke/renderer_gl.c
@@ -65,6 +65,51 @@ static int renderer_zoomspeed = DEFAULT_ZOOM_SPEED;
static GLuint texture;
+
+GLuint load_textures(char *filename)
+{
+ GLuint return_value;
+ FILE *bitmap;
+
+ return_value = 0;
+
+ bitmap = fopen(filename, "rb");
+ if (bitmap > 0) {
+ unsigned int dataoffset, filesize;
+ GLsizei width, height;
+ unsigned char *imagedata;
+
+ fseek(bitmap, BITMAP_FILESIZE, SEEK_SET);
+ fread(&filesize, 4, 1, bitmap);
+ fseek(bitmap, BITMAP_OFFSET, SEEK_SET);
+ fread(&dataoffset, 4, 1, bitmap);
+/* fseek(bitmap, BITMAP_HEADERSIZE, SEEK_SET); */
+/* fread(&headersize, 4, 1, bitmap); */
+ fseek(bitmap, BITMAP_WIDTH, SEEK_SET);
+ fread(&width, 4, 1, bitmap);
+/* fseek(bitmap, BITMAP_HEIGHT, SEEK_SET); */
+ fread(&height, 4, 1, bitmap);
+
+ imagedata = (unsigned char *)malloc((size_t)(filesize -dataoffset) /* *(char *) */);
+
+ fseek(bitmap, dataoffset, SEEK_SET);
+ fread(imagedata, (size_t)(filesize -dataoffset), 1, bitmap);
+
+ glGenTextures(1, &texture);
+ glBindTexture(GL_TEXTURE_2D, texture);
+ gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_BGR, GL_UNSIGNED_BYTE, imagedata);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ return_value = texture;
+
+ free(imagedata);
+ fclose(bitmap);
+ }
+
+ return return_value;
+}
+
+
static void render_legend(void)
{
int i, s, c;
@@ -225,14 +270,14 @@ static void render_normals(void)
int i, j, idx, DIM;
fftw_real wn, hn;
fftw_real *height;
- struct point *normals;
+ struct point *normal;
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
height = heightplots_get_frame();
- normals = normals_get_frame();
+ normal = normals_get_frame();
glDisable(GL_LIGHTING);
glBegin(GL_LINES);
@@ -252,27 +297,33 @@ static void render_normals(void)
pz = height[idx] *height_multiplier;
glVertex3f(px, py, pz);
- glVertex3f(px +(normal_array[idx].x *NORMAL_SCALE),
- py +(normal_array[idx].y *NORMAL_SCALE),
- pz +(normal_array[idx].z *NORMAL_SCALE));
+ glVertex3f(px +(normal[idx].x *NORMAL_SCALE),
+ py +(normal[idx].y *NORMAL_SCALE),
+ pz +(normal[idx].z *NORMAL_SCALE));
}
}
glEnable(GL_LIGHTING);
glEnd();
}
-static void render_smoke(void)
+
+void render_smoke(void)
{
- int i, j, idx, DIM;
- double px,py;
+ int i, j, idx, DIM;
+ double px, py, pz;
fftw_real wn, hn;
struct color4f color;
+ fftw_real *frame, *height;
+ struct point *normal;
-
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
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
+ frame = smoke_get_frame();
+ height = heightplots_get_frame();
+ normal = normals_get_frame();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
for (j = 0; j < DIM - 1; j++) //draw smoke
@@ -280,92 +331,49 @@ static void render_smoke(void)
glBegin(GL_TRIANGLE_STRIP);
i = 0;
+ idx = (j * DIM) + i;
px = wn + (fftw_real)i * wn;
py = hn + (fftw_real)j * hn;
- idx = (j * DIM) + i;
+ pz = height[idx] *heightplots_get_height();
- color = colormap_get_color(get_dataset(idx));
- glColor4f(color.r, color.g, color.b, color.a);
- glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
- glVertex3f(px, py, height_array[idx]); // vertex 1
-
+ color = colormap_get_color(frame[idx]);
+ glColor3f(frame[idx], frame[idx], frame[idx]);
+ glNormal3f(normal[idx].x, normal[idx].y, normal[idx].z);
+ glVertex3f(px, py, pz);
+
for (i = 0; i < DIM - 1; i++)
{
+ idx = ((j + 1) * DIM) + i;
px = wn + (fftw_real)i * wn;
py = hn + (fftw_real)(j + 1) * hn;
- idx = ((j + 1) * DIM) + i;
- get_dataset(idx);
- color = colormap_get_color(get_dataset(idx));
- glColor4f(color.r, color.g, color.b, color.a);
- glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
- glVertex3f(px, py, height_array[idx]); // vertex 2
-
+ pz = height[idx] *heightplots_get_height();
+ color = colormap_get_color(frame[idx]);
+ glColor4f(color.r, color.g, color.b, color.a);
+ glNormal3f(normal[idx].x, normal[idx].y, normal[idx].z);
+ glVertex3f(px, py, pz);
+ idx = (j * DIM) + (i + 1);
px = wn + (fftw_real)(i + 1) * wn;
py = hn + (fftw_real)j * hn;
- idx = (j * DIM) + (i + 1);
- color = colormap_get_color(get_dataset(idx));
+ pz = height[idx] *heightplots_get_height();
+ color = colormap_get_color(frame[idx]);
glColor4f(color.r, color.g, color.b, color.a);
- glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
- glVertex3f(px, py, height_array[idx]); // vertex 3
+ glNormal3f(normal[idx].x, normal[idx].y, normal[idx].z);
+ glVertex3f(px, py, pz);
}
+ idx = ((j + 1) * DIM) + (DIM - 1);
px = wn + (fftw_real)(DIM - 1) * wn;
py = hn + (fftw_real)(j + 1) * hn;
- idx = ((j + 1) * DIM) + (DIM - 1);
- color = colormap_get_color(get_dataset(idx));
+ pz = height[idx] *heightplots_get_height();
+ color = colormap_get_color(frame[idx]);
glColor4f(color.r, color.g, color.b, color.a);
- glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
- glVertex3f(px, py, height_array[idx]); // vertex 4
-
+ glNormal3f(normal[idx].x, normal[idx].y, normal[idx].z);
+ glVertex3f(px, py, pz);
glEnd();
}
}
-GLuint LoadTextures(char *filename)
-{
- GLuint return_value;
- FILE *bitmap;
-
- return_value = 0;
-
- bitmap = fopen(filename, "rb");
- if (bitmap > 0) {
- unsigned int dataoffset, filesize;
- GLsizei width, height;
- unsigned char *imagedata;
-
- fseek(bitmap, BITMAP_FILESIZE, SEEK_SET);
- fread(&filesize, 4, 1, bitmap);
- fseek(bitmap, BITMAP_OFFSET, SEEK_SET);
- fread(&dataoffset, 4, 1, bitmap);
-/* fseek(bitmap, BITMAP_HEADERSIZE, SEEK_SET); */
-/* fread(&headersize, 4, 1, bitmap); */
- fseek(bitmap, BITMAP_WIDTH, SEEK_SET);
- fread(&width, 4, 1, bitmap);
-/* fseek(bitmap, BITMAP_HEIGHT, SEEK_SET); */
- fread(&height, 4, 1, bitmap);
-
- imagedata = (unsigned char *)malloc((size_t)(filesize -dataoffset) /* *(char *) */);
-
- fseek(bitmap, dataoffset, SEEK_SET);
- fread(imagedata, (size_t)(filesize -dataoffset), 1, bitmap);
-
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_BGR, GL_UNSIGNED_BYTE, imagedata);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- return_value = texture;
-
- free(imagedata);
- fclose(bitmap);
- }
-
- return return_value;
-}
-
-
static void render_glyph(GLUquadricObj *qobj, float x_value, float y_value, float i, float j)
{
float x0, y0, z0, x1, y1, z1, x_dev, y_dev, size, length;
@@ -781,21 +789,17 @@ static void render_streamlines(void)
}
-void render_flowvis(void)
+static void render_flowvis(void)
{
- int i, j, idx, DIM;
- double px, py, pz;
+ int i, j, idx, DIM;
+ double px,py;
fftw_real wn, hn;
struct color4f color;
- fftw_real *frame, *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
-
- frame = smoke_get_frame();
- height = heightplots_get_frame();
+ hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
@@ -804,44 +808,49 @@ void render_flowvis(void)
glBegin(GL_TRIANGLE_STRIP);
i = 0;
- idx = (j * DIM) + i;
px = wn + (fftw_real)i * wn;
py = hn + (fftw_real)j * hn;
- pz = height[idx] *heightplots_get_height();
+ idx = (j * DIM) + i;
- glColor3f(frame[idx],frame[idx],frame[idx]);
- glVertex3f(px, py, pz);
+ color = flowvis_get_color(get_dataset(idx));
+ glColor4f(color.r, color.g, color.b, color.a);
+ glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
+ glVertex3f(px, py, height_array[idx]); // vertex 1
for (i = 0; i < DIM - 1; i++)
{
- idx = ((j + 1) * DIM) + i;
px = wn + (fftw_real)i * wn;
py = hn + (fftw_real)(j + 1) * hn;
- pz = height[idx] *heightplots_get_height();
- color = flowvis_get_color(frame[idx]);
- glColor4f(color.r, color.g, color.b, color.a);
- glVertex3f(px, py, pz);
- idx = (j * DIM) + (i + 1);
+ idx = ((j + 1) * DIM) + i;
+ get_dataset(idx);
+ color = flowvis_get_color(get_dataset(idx));
+ glColor4f(color.r, color.g, color.b, color.a);
+ glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
+ glVertex3f(px, py, height_array[idx]); // vertex 2
+
px = wn + (fftw_real)(i + 1) * wn;
py = hn + (fftw_real)j * hn;
- pz = height[idx] *heightplots_get_height();
- color = flowvis_get_color(frame[idx]);
+ idx = (j * DIM) + (i + 1);
+ color = flowvis_get_color(get_dataset(idx));
glColor4f(color.r, color.g, color.b, color.a);
- glVertex3f(px, py, pz);
+ glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
+ glVertex3f(px, py, height_array[idx]); // vertex 3
}
- idx = ((j + 1) * DIM) + (DIM - 1);
px = wn + (fftw_real)(DIM - 1) * wn;
py = hn + (fftw_real)(j + 1) * hn;
- pz = height[idx] *heightplots_get_height();
- color = flowvis_get_color(frame[idx]);
+ idx = ((j + 1) * DIM) + (DIM - 1);
+ color = flowvis_get_color(get_dataset(idx));
glColor4f(color.r, color.g, color.b, color.a);
- glVertex3f(px, py, pz);
+ glNormal3f(normal_array[idx].x, normal_array[idx].y, normal_array[idx].z);
+ glVertex3f(px, py, height_array[idx]); // vertex 4
+
glEnd();
}
}
+
void renderer_init_gl(void)
{
float LightAmbient[] = { 0.10f, 0.10f, 0.10f, 1.00f }; // Ambient light values
@@ -869,7 +878,7 @@ void renderer_init_gl(void)
glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
glLightfv(GL_LIGHT0, GL_POSITION, LightPosition);
- texture = LoadTextures(BITMAP_SOURCE);
+ texture = load_textures(BITMAP_SOURCE);
}
diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin
index 580da38..df62b48 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ