#include <stdio.h>
#include <stdlib.h>
#include <math.h>
-#include <time.h>
+#include <string.h>
#ifdef WIN32
#include <windows.h>
#endif
#include <GL/glut.h>
-#include "../util/readtex.c"
-#include "tunneldat.c"
+#include "readtex.h"
+#include "tunneldat.h"
#ifdef FX
#endif
#endif
#ifdef FX
-GLboolean fxMesaSelectCurrentBoard(int);
+GLint fxMesaSelectCurrentBoard(int);
#endif
static int WIDTHC0 = 640;
#define M_PI 3.1415926535
#endif
-extern int striplength_skin_13[];
-extern float stripdata_skin_13[];
-
-extern int striplength_skin_12[];
-extern float stripdata_skin_12[];
-
-extern int striplength_skin_11[];
-extern float stripdata_skin_11[];
-
-extern int striplength_skin_9[];
-extern float stripdata_skin_9[];
-
-
static float obs[3] = { 1000.0, 0.0, 2.0 };
static float dir[3];
-static float v = 0.5;
+static float v = 30.;
static float alpha = 90.0;
static float beta = 90.0;
-static int fog = 0;
+static int fog = 1;
static int bfcull = 1;
static int usetex = 1;
static int cstrip = 0;
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
- GL_LINEAR_MIPMAP_NEAREST);
+ GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
static void
-drawobjs(int *l, float *f)
+drawobjs(const int *l, const float *f)
{
int mend, j;
static void
calcposobs(void)
{
+ static double t0 = -1.;
+ double dt, t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
+ if (t0 < 0.0)
+ t0 = t;
+ dt = t - t0;
+ t0 = t;
+
dir[0] = sin(alpha * M_PI / 180.0);
dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[2] = cos(beta * M_PI / 180.0);
- obs[0] += v * dir[0];
- obs[1] += v * dir[1];
- obs[2] += v * dir[2];
+ if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
+ dir[0] = 0;
+ if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
+ dir[1] = 0;
+ if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
+ dir[2] = 0;
+
+ obs[0] += v * dir[0] * dt;
+ obs[1] += v * dir[1] * dt;
+ obs[2] += v * dir[2] * dt;
}
static void
}
}
+static void
+cleanup(void)
+{
+ glDeleteTextures(1, &t1id);
+ glDeleteTextures(1, &t2id);
+}
+
static void
key(unsigned char k, int x, int y)
{
switch (k) {
case 27:
+ glutDestroyWindow(channel[0]);
+ glutDestroyWindow(channel[1]);
+ cleanup();
exit(0);
break;
case 'a':
- v += 0.01;
+ v += 5.;
break;
case 'z':
- v -= 0.01;
+ v -= 5.;
break;
#ifdef XMESA
printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Help");
glRasterPos2i(60, 390);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Togle Help");
+ printstring(GLUT_BITMAP_TIMES_ROMAN_24, "h - Toggle Help");
glRasterPos2i(60, 360);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Togle Textures");
+ printstring(GLUT_BITMAP_TIMES_ROMAN_24, "t - Toggle Textures");
glRasterPos2i(60, 330);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Togle Fog");
+ printstring(GLUT_BITMAP_TIMES_ROMAN_24, "f - Toggle Fog");
glRasterPos2i(60, 300);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Togle strips");
+ printstring(GLUT_BITMAP_TIMES_ROMAN_24, "m - Toggle strips");
glRasterPos2i(60, 270);
- printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Togle Back face culling");
+ printstring(GLUT_BITMAP_TIMES_ROMAN_24, "b - Toggle Back face culling");
glRasterPos2i(60, 240);
printstring(GLUT_BITMAP_TIMES_ROMAN_24, "Arrow Keys - Rotate");
glRasterPos2i(60, 210);
glRasterPos2i(60, 150);
if (joyavailable)
printstring(GLUT_BITMAP_TIMES_ROMAN_24,
- "j - Togle jostick control (Joystick control available)");
+ "j - Toggle jostick control (Joystick control available)");
else
printstring(GLUT_BITMAP_TIMES_ROMAN_24,
"(No Joystick control available)");
{
fprintf(stderr,
"Tunnel2 V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n");
- fprintf(stderr,
- "You need TWO Voodoo Graphics boards in order to run this demo !\n");
glutInitWindowPosition(0, 0);
glutInitWindowSize(WIDTHC0, HEIGHTC0);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
#ifdef FX
- if (!fxMesaSelectCurrentBoard(0)) {
+ if (fxMesaSelectCurrentBoard(0) < 0) {
fprintf(stderr, "The first Voodoo Graphics board is missing !?!?\n");
return -1;
}
glutSpecialFunc(special);
#ifdef FX
- if (!fxMesaSelectCurrentBoard(1)) {
+ if (fxMesaSelectCurrentBoard(1) < 0) {
fprintf(stderr, "The second Voodoo Graphics board is missing !\n");
exit(-1);
}
calcposobs();
glutMainLoop();
+ cleanup();
return 0;
}