Trying to get fog to work ...
This commit is contained in:
parent
a104d9c820
commit
1d7a109e9a
6 changed files with 131 additions and 132 deletions
|
@ -15,6 +15,7 @@
|
|||
#include "GLUTkey.h"
|
||||
#include "../aircraft/aircraft.h"
|
||||
|
||||
extern double fogDensity;
|
||||
|
||||
/* Handle keyboard events */
|
||||
void GLUTkey(unsigned char k, int x, int y) {
|
||||
|
@ -48,6 +49,17 @@ void GLUTkey(unsigned char k, int x, int y) {
|
|||
return;
|
||||
case 4:
|
||||
c->throttle[0] += 0.05;
|
||||
return;
|
||||
case 122:
|
||||
fogDensity *= 1.10;
|
||||
glFogf(GL_FOG_DENSITY, fogDensity);
|
||||
printf("Fog density = %.4f\n", fogDensity);
|
||||
return;
|
||||
case 90:
|
||||
fogDensity /= 1.10;
|
||||
glFogf(GL_FOG_DENSITY, fogDensity);
|
||||
printf("Fog density = %.4f\n", fogDensity);
|
||||
return;
|
||||
case 27: /* ESC */
|
||||
exit(0);
|
||||
}
|
||||
|
@ -56,9 +68,12 @@ void GLUTkey(unsigned char k, int x, int y) {
|
|||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.1 1997/05/21 15:57:50 curt
|
||||
/* Renamed due to added GLUT support.
|
||||
/* Revision 1.2 1997/05/23 00:35:12 curt
|
||||
/* Trying to get fog to work ...
|
||||
/*
|
||||
* Revision 1.1 1997/05/21 15:57:50 curt
|
||||
* Renamed due to added GLUT support.
|
||||
*
|
||||
* Revision 1.2 1997/05/19 18:22:41 curt
|
||||
* Parameter tweaking ... starting to stub in fog support.
|
||||
*
|
||||
|
|
|
@ -44,26 +44,37 @@ static GLfloat win_ratio = 1.0;
|
|||
/* pointer to terrain mesh structure */
|
||||
static GLint mesh;
|
||||
|
||||
double fogDensity = 0.04;
|
||||
|
||||
/* init_view() -- Setup view parameters */
|
||||
static void init_view() {
|
||||
/* if the 4th field is 0.0, this specifies a direction ... */
|
||||
static GLfloat pos[4] = {-3.0, 1.0, 3.0, 0.0 };
|
||||
static GLfloat color[4] = { 0.3, 0.7, 0.2, 1.0 };
|
||||
static GLfloat fogColor[4] = {0.5, 0.5, 0.5, 1.0};
|
||||
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, pos );
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
glEnable( GL_CULL_FACE );
|
||||
|
||||
/* If enabled, normal vectors specified with glNormal are scaled
|
||||
to unit length after transformation. See glNormal. */
|
||||
glEnable( GL_NORMALIZE );
|
||||
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, pos );
|
||||
glEnable( GL_LIGHTING );
|
||||
glEnable( GL_LIGHT0 );
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color );
|
||||
glShadeModel( GL_FLAT ); /* glShadeModel( GL_SMOOTH ); */
|
||||
|
||||
glEnable( GL_FOG );
|
||||
glFogi (GL_FOG_MODE, GL_LINEAR);
|
||||
glFogi (GL_FOG_MODE, GL_EXP);
|
||||
/* glFogf (GL_FOG_START, 1.0); */
|
||||
glFogf (GL_FOG_END, 1000.0);
|
||||
/* glFogf (GL_FOG_END, 1000.0); */
|
||||
glFogfv (GL_FOG_COLOR, fogColor);
|
||||
glFogf (GL_FOG_DENSITY, 0.04);
|
||||
glHint(GL_FOG_HINT, GL_FASTEST);
|
||||
|
||||
glFogf (GL_FOG_DENSITY, fogDensity);
|
||||
/* glHint (GL_FOG_HINT, GL_FASTEST); */
|
||||
|
||||
glClearColor(0.6, 0.6, 0.9, 1.0);
|
||||
}
|
||||
|
||||
|
@ -73,10 +84,6 @@ static void init_scene() {
|
|||
|
||||
/* make terrain mesh */
|
||||
mesh = make_mesh();
|
||||
|
||||
/* If enabled, normal vectors specified with glNormal are scaled
|
||||
to unit length after transformation. See glNormal. */
|
||||
glEnable( GL_NORMALIZE );
|
||||
}
|
||||
|
||||
|
||||
|
@ -90,50 +97,6 @@ GLint make_mesh() {
|
|||
}
|
||||
|
||||
|
||||
/* create the terrain mesh */
|
||||
GLint make_mesh_old() {
|
||||
GLint mesh;
|
||||
static GLfloat color[4] = { 0.3, 0.7, 0.2, 1.0 };
|
||||
|
||||
mesh = glGenLists(1);
|
||||
glNewList(mesh, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color );
|
||||
glShadeModel( GL_FLAT ); /* glShadeModel( GL_SMOOTH ); */
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
glVertex3f(-10.0, -10.0, 0.0);
|
||||
glVertex3f(0.0, -10.0, 0.0);
|
||||
glVertex3f(0.0, 0.0, 1.0);
|
||||
glVertex3f(-10.0, 0.0, 1.0);
|
||||
glEnd();
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
glVertex3f(-10.0, 0.0, 1.0);
|
||||
glVertex3f(0.0, 0.0, 1.0);
|
||||
glVertex3f(0.0, 10.0, 0.0);
|
||||
glVertex3f(-10.0, 10.0, 0.0);
|
||||
glEnd();
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
glVertex3f(0.0, 0.0, 0.0);
|
||||
glVertex3f(10.0, 0.0, 2.0);
|
||||
glVertex3f(10.0, 10.0, 2.0);
|
||||
glVertex3f(0.0, 10.0, 0.0);
|
||||
glEnd();
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
glVertex3f(0.0, -10.0, -1.0);
|
||||
glVertex3f(10.0, -10.0, 0.0);
|
||||
glVertex3f(10.0, 0.0, -1.0);
|
||||
glVertex3f(0.0, 0.0, 0.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
|
||||
return(mesh);
|
||||
}
|
||||
|
||||
|
||||
/* update the view volume */
|
||||
static void update_view() {
|
||||
struct flight_params *f;
|
||||
|
@ -153,24 +116,18 @@ static void update_view() {
|
|||
|
||||
/* draw the scene */
|
||||
static void draw_scene( void ) {
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
/* update view volume parameters */
|
||||
update_view();
|
||||
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
/* Tell GL we are switching to model view parameters */
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
|
||||
/* glTranslatef(0.0, 0.0, -5.0); */
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
/* draw terrain mesh */
|
||||
draw_mesh();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
#ifdef GLUT
|
||||
glutSwapBuffers();
|
||||
#elif MESA_TK
|
||||
|
@ -225,12 +182,12 @@ int main( int argc, char *argv[] ) {
|
|||
/* initialize GLUT */
|
||||
glutInit(&argc, argv);
|
||||
|
||||
/* Define initial window size */
|
||||
glutInitWindowSize(640, 400);
|
||||
|
||||
/* Define Display Parameters */
|
||||
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
|
||||
|
||||
/* Define initial window size */
|
||||
glutInitWindowSize(640, 400);
|
||||
|
||||
/* Initialize the main window */
|
||||
glutCreateWindow("Terrain Demo");
|
||||
#elif MESA_TK
|
||||
|
@ -254,7 +211,8 @@ int main( int argc, char *argv[] ) {
|
|||
|
||||
/* Set initial position and slew parameters */
|
||||
/* slew_init(-398391.3, 120070.4, 244, 3.1415); */ /* GLOBE Airport */
|
||||
slew_init(-398673.28,120625.64, 53, 4.38);
|
||||
/* slew_init(-398673.28,120625.64, 53, 4.38); */
|
||||
slew_init(0.0, 0.0, 53, 0.77);
|
||||
|
||||
#ifdef GLUT
|
||||
/* call reshape() on window resizes */
|
||||
|
@ -297,9 +255,12 @@ int main( int argc, char *argv[] ) {
|
|||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.1 1997/05/21 15:57:51 curt
|
||||
/* Renamed due to added GLUT support.
|
||||
/* Revision 1.2 1997/05/23 00:35:12 curt
|
||||
/* Trying to get fog to work ...
|
||||
/*
|
||||
* Revision 1.1 1997/05/21 15:57:51 curt
|
||||
* Renamed due to added GLUT support.
|
||||
*
|
||||
* Revision 1.3 1997/05/19 18:22:42 curt
|
||||
* Parameter tweaking ... starting to stub in fog support.
|
||||
*
|
||||
|
|
|
@ -37,12 +37,12 @@ INTERFACE_FILES = GLUTkey.c
|
|||
#---------------------------------------------------------------------------
|
||||
|
||||
# For OpenGL
|
||||
GRAPHICS_LIBS = -lGLU -lGL -lXmu -lX11
|
||||
# GRAPHICS_LIBS = -lGLU -lGL -lXmu -lX11
|
||||
|
||||
# For Mesa
|
||||
# MESA_LIBS = -L/usr/lib/mesa -lMesaaux -lMesatk -lMesaGLU -lMesaGL
|
||||
# X11_LIBS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11
|
||||
# GRAPHICS_LIBS = $(MESA_LIBS) $(X11_LIBS)
|
||||
MESA_LIBS = -L/usr/lib/mesa -lMesaaux -lMesatk -lMesaGLU -lMesaGL
|
||||
X11_LIBS = -L/usr/X11R6/lib -lXext -lXmu -lXi -lX11
|
||||
GRAPHICS_LIBS = $(MESA_LIBS) $(X11_LIBS)
|
||||
|
||||
|
||||
CFLAGS = $(STD_CFLAGS) $(INTERFACE_FLAGS)
|
||||
|
@ -86,6 +86,9 @@ mesh2GL.o: mesh2GL.c ../scenery/mesh.h
|
|||
|
||||
#---------------------------------------------------------------------------
|
||||
# $Log$
|
||||
# Revision 1.3 1997/05/23 00:35:13 curt
|
||||
# Trying to get fog to work ...
|
||||
#
|
||||
# Revision 1.2 1997/05/21 15:57:52 curt
|
||||
# Renamed due to added GLUT support.
|
||||
#
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**************************************************************************
|
||||
* mesh2ogl.c -- walk through a mesh data structure and make ogl calls
|
||||
* mesh2GL.c -- walk through a mesh data structure and make GL calls
|
||||
*
|
||||
* Written by Curtis Olson, started May 1997.
|
||||
*
|
||||
|
@ -37,28 +37,27 @@ static void mat3_cross_product(float result_vec[3], register float vec1[3],
|
|||
/* walk through mesh and make ogl calls */
|
||||
GLint mesh_to_ogl(struct mesh *m) {
|
||||
GLint mesh;
|
||||
static GLfloat color[4] = { 0.3, 0.7, 0.2, 1.0 };
|
||||
/* static GLfloat color[4] = { 0.3, 0.7, 0.2, 1.0 }; */
|
||||
|
||||
float x1, y1, x2, y2, z11, z12, z21, z22;
|
||||
float v1[3], v2[3], normal[3];
|
||||
int i, j, istep, jstep, iend, jend;
|
||||
float temp;
|
||||
|
||||
istep = jstep = 10; /* Detail level 1 -- 1200 ... */
|
||||
istep = jstep = 25; /* Detail level 1 -- 1200 ... */
|
||||
|
||||
mesh = glGenLists(1);
|
||||
glNewList(mesh, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color );
|
||||
glShadeModel( GL_FLAT ); /* glShadeModel( GL_SMOOTH ); */
|
||||
/* glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color ); */
|
||||
|
||||
iend = m->cols - 1;
|
||||
jend = m->rows - 1;
|
||||
|
||||
y1 = m->originy;
|
||||
y1 = 0.0; /* y1 = m->originy; */
|
||||
y2 = y1 + (m->col_step * istep);
|
||||
|
||||
for ( i = 0; i < iend; i += istep ) {
|
||||
x1 = m->originx;
|
||||
x1 = 0.0; /* x1 = m->originx; */
|
||||
x2 = x1 + (m->row_step * jstep);
|
||||
for ( j = 0; j < jend; j += jstep ) {
|
||||
z11 = 0.03 * m->mesh_data[j * m->rows + i ];
|
||||
|
@ -75,8 +74,8 @@ GLint mesh_to_ogl(struct mesh *m) {
|
|||
v2[0] = x2 - x1; v2[1] = y2 - y1; v2[2] = z22 - z11;
|
||||
mat3_cross_product(normal, v1, v2);
|
||||
MAT3_NORMALIZE_VEC(normal,temp);
|
||||
glNormal3fv(normal);
|
||||
glBegin(GL_POLYGON);
|
||||
glNormal3fv(normal);
|
||||
glVertex3f(x1, y1, z11);
|
||||
glVertex3f(x2, y1, z21);
|
||||
glVertex3f(x2, y2, z22);
|
||||
|
@ -89,8 +88,8 @@ GLint mesh_to_ogl(struct mesh *m) {
|
|||
v2[0] = 0; v2[1] = y2 - y1; v2[2] = z12 - z11;
|
||||
mat3_cross_product(normal, v1, v2);
|
||||
MAT3_NORMALIZE_VEC(normal,temp);
|
||||
glNormal3fv(normal);
|
||||
glBegin(GL_POLYGON);
|
||||
glNormal3fv(normal);
|
||||
glVertex3f(x1, y1, z11);
|
||||
glVertex3f(x2, y2, z22);
|
||||
glVertex3f(x1, y2, z12);
|
||||
|
@ -113,9 +112,12 @@ GLint mesh_to_ogl(struct mesh *m) {
|
|||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.1 1997/05/21 15:57:52 curt
|
||||
/* Renamed due to added GLUT support.
|
||||
/* Revision 1.2 1997/05/23 00:35:13 curt
|
||||
/* Trying to get fog to work ...
|
||||
/*
|
||||
* Revision 1.1 1997/05/21 15:57:52 curt
|
||||
* Renamed due to added GLUT support.
|
||||
*
|
||||
* Revision 1.3 1997/05/19 18:22:42 curt
|
||||
* Parameter tweaking ... starting to stub in fog support.
|
||||
*
|
||||
|
|
|
@ -19,14 +19,6 @@
|
|||
|
||||
/* custom print routine */
|
||||
static int scanner_debug = 0;
|
||||
static int scanner_msg_len;
|
||||
static char scanner_msg[1024];
|
||||
|
||||
static void scanner_print(char *s) {
|
||||
if ( scanner_debug ) {
|
||||
printf("%s", s);
|
||||
}
|
||||
}
|
||||
|
||||
/* Routines to manage a stack of nested input buffers (for
|
||||
processing the #include directive */
|
||||
|
@ -100,87 +92,111 @@ other .
|
|||
/* Rules */
|
||||
%%
|
||||
|
||||
include { scanner_print("return IncludeSym\n");
|
||||
include { if ( scanner_debug ) {
|
||||
printf("return IncludeSym\n");
|
||||
}
|
||||
return IncludeSym;
|
||||
}
|
||||
|
||||
mesh { scanner_print("return MeshSym\n");
|
||||
mesh { if ( scanner_debug ) {
|
||||
printf("return MeshSym\n");
|
||||
}
|
||||
return MeshSym;
|
||||
}
|
||||
|
||||
row { scanner_print("return RowSym\n");
|
||||
row { if ( scanner_debug ) {
|
||||
printf("return RowSym\n");
|
||||
}
|
||||
return RowSym;
|
||||
}
|
||||
|
||||
chunk { scanner_print("return ChunkSym\n");
|
||||
chunk { if ( scanner_debug ) {
|
||||
printf("return ChunkSym\n");
|
||||
}
|
||||
return ChunkSym;
|
||||
}
|
||||
|
||||
bounds { scanner_print("return BoundsSym\n");
|
||||
bounds { if ( scanner_debug ) {
|
||||
printf("return BoundsSym\n");
|
||||
}
|
||||
return BoundsSym;
|
||||
}
|
||||
|
||||
place { scanner_print("return PlaceSym\n");
|
||||
place { if ( scanner_debug ) {
|
||||
printf("return PlaceSym\n");
|
||||
}
|
||||
return PlaceSym;
|
||||
}
|
||||
|
||||
{ident} { scanner_msg_len = snprintf(scanner_msg, 1024,
|
||||
"return Identifier = %s\n", yytext);
|
||||
scanner_msg[scanner_msg_len] = '\0';
|
||||
scanner_print(scanner_msg);
|
||||
{ident} { if ( scanner_debug ) {
|
||||
printf("return Identifier = %s\n", yytext);
|
||||
}
|
||||
return Identifier;
|
||||
}
|
||||
|
||||
{number} { scanner_print("return Number\n");
|
||||
{number} { if ( scanner_debug ) {
|
||||
printf("return Number\n");
|
||||
}
|
||||
return Number;
|
||||
}
|
||||
|
||||
{string} { scanner_msg_len = snprintf(scanner_msg, 1024,
|
||||
"return StringLiteral = %s\n", yytext);
|
||||
scanner_msg[scanner_msg_len] = '\0';
|
||||
scanner_print(scanner_msg);
|
||||
{string} { if ( scanner_debug ) {
|
||||
printf("return StringLiteral = %s\n", yytext);
|
||||
}
|
||||
return StringLiteral;
|
||||
}
|
||||
|
||||
{bad_string} { scanner_msg_len = snprintf(scanner_msg, 1024,
|
||||
"return BadStringLiteral = %s\n", yytext);
|
||||
scanner_msg[scanner_msg_len] = '\0';
|
||||
scanner_print(scanner_msg);
|
||||
{bad_string} { if ( scanner_debug ) {
|
||||
printf("return BadStringLiteral = %s\n", yytext);
|
||||
}
|
||||
return BadStringLiteral;
|
||||
}
|
||||
|
||||
"\n" { line_num++;
|
||||
scanner_msg_len = snprintf(scanner_msg, 1024,
|
||||
"Line number = %d\n", line_num);
|
||||
scanner_msg[scanner_msg_len] = '\0';
|
||||
scanner_print(scanner_msg);
|
||||
}
|
||||
if ( scanner_debug ) {
|
||||
printf("Line number = %d\n", line_num);
|
||||
}
|
||||
}
|
||||
|
||||
"#" { scanner_print("return HashSym\n");
|
||||
"#" { if ( scanner_debug ) {
|
||||
printf("return HashSym\n");
|
||||
}
|
||||
return HashSym;
|
||||
}
|
||||
|
||||
"=" { scanner_print("return EqualSym\n");
|
||||
"=" { if ( scanner_debug ) {
|
||||
printf("return EqualSym\n");
|
||||
}
|
||||
return EqualSym;
|
||||
}
|
||||
|
||||
"," { scanner_print("return CommaSym\n");
|
||||
"," { if ( scanner_debug ) {
|
||||
printf("return CommaSym\n");
|
||||
}
|
||||
return CommaSym;
|
||||
}
|
||||
|
||||
"{" { scanner_print("return LBraceSym\n");
|
||||
"{" { if ( scanner_debug ) {
|
||||
printf("return LBraceSym\n");
|
||||
}
|
||||
return LBraceSym;
|
||||
}
|
||||
|
||||
"}" { scanner_print("return RBraceSym\n");
|
||||
"}" { if ( scanner_debug ) {
|
||||
printf("return RBraceSym\n");
|
||||
}
|
||||
return RBraceSym;
|
||||
}
|
||||
|
||||
"(" { scanner_print("return LParenSym\n");
|
||||
"(" { if ( scanner_debug ) {
|
||||
printf("return LParenSym\n");
|
||||
}
|
||||
return LParenSym;
|
||||
}
|
||||
|
||||
")" { scanner_print("return RParenSym\n");
|
||||
")" { if ( scanner_debug ) {
|
||||
printf("return RParenSym\n");
|
||||
}
|
||||
return RParenSym;
|
||||
}
|
||||
|
||||
|
@ -196,10 +212,9 @@ place { scanner_print("return PlaceSym\n");
|
|||
|
||||
{ws} { ; }
|
||||
|
||||
{other} { scanner_msg_len = snprintf(scanner_msg, 1024,
|
||||
"Scanned some unexpected text = `%s'\n", yytext);
|
||||
scanner_msg[scanner_msg_len] = '\0';
|
||||
scanner_print(scanner_msg);
|
||||
{other} { if ( scanner_debug ) {
|
||||
printf("Scanned some unexpected text = `%s'\n", yytext);
|
||||
}
|
||||
return ErrorMisc;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,18 +12,18 @@ CC = gcc
|
|||
|
||||
|
||||
SUBDIRS = aircraft controls flight scenery
|
||||
MAIN = gltk
|
||||
MAIN = OpenGL
|
||||
|
||||
|
||||
all:
|
||||
for dir in $(SUBDIRS) $(MAIN); do \
|
||||
( cd $$dir; make CC=$(CC) CFLAGS=$(CFLAGS) ) ; \
|
||||
( cd $$dir; make CC=$(CC) ) ; \
|
||||
done
|
||||
|
||||
|
||||
install:
|
||||
for dir in $(SUBDIRS) $(MAIN); do \
|
||||
( cd $$dir; make CC=$(CC) CFLAGS=$(CFLAGS) install) ; \
|
||||
( cd $$dir; make CC=$(CC) install) ; \
|
||||
done
|
||||
|
||||
|
||||
|
@ -36,6 +36,9 @@ clean:
|
|||
|
||||
#---------------------------------------------------------------------------
|
||||
# $Log$
|
||||
# Revision 1.2 1997/05/23 00:35:09 curt
|
||||
# Trying to get fog to work ...
|
||||
#
|
||||
# Revision 1.1 1997/05/16 15:51:13 curt
|
||||
# Initial revision.
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue