+++ /dev/null
-/**************************************************************************
- * gltkmain.c -- top level sim routines
- *
- * Written by Curtis Olson for Mesa (OpenGL), started May 1997.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/time.h>
-
-#ifdef MESA
- /* assumes -I/usr/include/mesa in compile command */
- #include "gltk.h"
-#else
- #include <GL/gl.h>
-/* #include "aux.h" */
-#endif
-
-#include "gltkkey.h"
-#include "../aircraft/aircraft.h"
-#include "../scenery/scenery.h"
-
-
-/* This a record containing all the info for the aircraft currently
- being operated */
-struct aircraft_params current_aircraft;
-
-/* temporary hack */
-extern struct mesh *mesh_ptr;
-
-/* Function prototypes */
-GLint make_mesh();
-static void draw_mesh();
-
-
-/* view parameters */
-static GLfloat win_ratio = 1.0;
-
-/* pointer to terrain mesh structure */
-static GLint mesh;
-
-/* 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 fogColor[4] = {0.5, 0.5, 0.5, 1.0};
- static GLfloat local_view[] = { 0.0 };
-
- glLightfv( GL_LIGHT0, GL_POSITION, pos );
- glEnable( GL_CULL_FACE );
- glEnable( GL_LIGHTING );
- glEnable( GL_LIGHT0 );
-/**/glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
- glEnable( GL_DEPTH_TEST );
-/**/glDepthFunc(GL_LEQUAL);
-
-/* glEnable( GL_FOG );
- glFogi (GL_FOG_MODE, GL_LINEAR);
- glFogf (GL_FOG_START, 1.0);
- glFogf (GL_FOG_END, 100.0);
- glFogfv (GL_FOG_COLOR, fogColor);
- glFogf (GL_FOG_DENSITY, 0.35);
- glHint (GL_FOG_HINT, GL_DONT_CARE);
- */
-
- glClearColor(0.6, 0.6, 0.9, 1.0);
-}
-
-
-/* init_scene() -- build all objects */
-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 );
-}
-
-
-/* create the terrain mesh */
-GLint make_mesh() {
- GLint mesh;
-
- mesh = mesh_to_ogl(mesh_ptr);
-
- return(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;
-
- f = ¤t_aircraft.flight;
-
- /* Tell GL we are about to modify the projection parameters */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-
- gluPerspective(45.0, 1.0/win_ratio, 1.0, 6000.0);
- gluLookAt(f->pos_x, f->pos_y, f->pos_z,
- f->pos_x + cos(f->Psi), f->pos_y + sin(f->Psi), f->pos_z,
- 0.0, 0.0, 1.0);
-}
-
-
-/* draw the scene */
-static void draw_scene( void ) {
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
- /* update view volume parameters */
- update_view();
-
- /* 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();
-
- tkSwapBuffers();
-}
-
-
-/* draw the terrain mesh */
-static void draw_mesh() {
- glCallList(mesh);
-}
-
-
-/* What should we do when we have nothing else to do? How about get
- * ready for the next move?*/
-static void idle( void )
-{
- slew_update();
- aircraft_debug(1);
-
- draw_scene();
-}
-
-
-/* new window size or exposure */
-static void reshape( int width, int height ) {
- /* Do this so we can call reshape(0,0) ourselves without having to know
- * what the values of width & height are. */
- if ( (height > 0) && (width > 0) ) {
- win_ratio = (GLfloat) height / (GLfloat) width;
- }
-
- /* Inform gl of our view window size */
- glViewport(0, 0, (GLint)width, (GLint)height);
-
- update_view();
-
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-}
-
-
-/**************************************************************************
- * Main ...
- **************************************************************************/
-
-int main( int argc, char *argv[] ) {
-
- /* parse the scenery file */
- parse_scenery(argv[1]);
-
- /* Define initial window size */
- tkInitPosition(0, 0, 640, 400);
-
- /* Define Display Parameters */
- tkInitDisplayMode( TK_RGB | TK_DEPTH | TK_DOUBLE | TK_DIRECT );
-
- /* Initialize the main window */
- if (tkInitWindow("Terrain Demo") == GL_FALSE) {
- tkQuit();
- }
-
- /* setup view parameters */
- init_view();
-
- /* build all objects */
- init_scene();
-
- /* 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);
-
- /* call reshape() on expose events */
- tkExposeFunc( reshape );
-
- /* call reshape() on window resizes */
- tkReshapeFunc( reshape );
-
- /* call key() on keyboard event */
- tkKeyDownFunc( key );
-
- /* call idle() whenever there is nothing else to do */
- tkIdleFunc( idle );
-
- /* draw the scene */
- tkDisplayFunc( draw_scene );
-
- /* pass control off to the tk event handler */
- tkExec();
-
- return(0);
-}
-
-
-/* $Log$
-/* Revision 1.3 1997/05/19 18:22:42 curt
-/* Parameter tweaking ... starting to stub in fog support.
-/*
- * Revision 1.2 1997/05/17 00:17:34 curt
- * Trying to stub in support for standard OpenGL.
- *
- * Revision 1.1 1997/05/16 16:05:52 curt
- * Initial revision.
- *
- */
+++ /dev/null
-/**************************************************************************
- * mesh2ogl.c -- walk through a mesh data structure and make ogl calls
- *
- * Written by Curtis Olson, started May 1997.
- *
- * $Id$
- * (Log is kept at end of this file)
- **************************************************************************/
-
-
-/* assumes -I/usr/include/mesa in compile command */
-#include "gltk.h"
-
-#include "../scenery/mesh.h"
-#include "mat3.h"
-
-
-/* Sets the first vector to be the cross-product of the last two
- vectors. */
-static void mat3_cross_product(float result_vec[3], register float vec1[3],
- register float vec2[3]) {
- float tempvec[3];
- register float *temp = tempvec;
-
- temp[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1];
- temp[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2];
- temp[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0];
-
- MAT3_COPY_VEC(result_vec, temp);
-}
-
-
-/* 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 };
-
- 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 = 4; /* 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 ); */
-
- iend = m->cols - 1;
- jend = m->rows - 1;
-
- y1 = m->originy;
- y2 = y1 + (m->col_step * istep);
-
- for ( i = 0; i < iend; i += istep ) {
- 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 ];
- z12 = 0.03 * m->mesh_data[j * m->rows + (i+istep)];
- z21 = 0.03 * m->mesh_data[(j+jstep) * m->rows + i ];
- z22 = 0.03 * m->mesh_data[(j+jstep) * m->rows + (i+istep)];
-
- /* printf("x1 = %f y1 = %f\n", x1, y1);
- printf("x2 = %f y2 = %f\n", x2, y2);
- printf("z11 = %f z12 = %f z21 = %f z22 = %f\n",
- z11, z12, z21, z22); */
-
- v1[0] = x2 - x1; v1[1] = 0; v1[2] = z21 - z11;
- 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);
- glVertex3f(x1, y1, z11);
- glVertex3f(x2, y1, z21);
- glVertex3f(x2, y2, z22);
- /* printf("(%f, %f, %f)\n", x1, y1, z11);
- printf("(%f, %f, %f)\n", x2, y1, z21);
- printf("(%f, %f, %f)\n", x2, y2, z22); */
- glEnd();
-
- v1[0] = x2 - x1; v1[1] = y2 - y1; v1[2] = z22 - z11;
- 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);
- glVertex3f(x1, y1, z11);
- glVertex3f(x2, y2, z22);
- glVertex3f(x1, y2, z12);
- /* printf("(%f, %f, %f)\n", x1, y1, z11);
- printf("(%f, %f, %f)\n", x2, y2, z22);
- printf("(%f, %f, %f)\n", x1, y2, z12); */
- glEnd();
-
- x1 = x2;
- x2 = x1 + (m->row_step * jstep);
- }
- y1 = y2;
- y2 = y1 + (m->col_step * istep);
- }
-
- glEndList();
-
- return(mesh);
-}
-
-
-/* $Log$
-/* Revision 1.3 1997/05/19 18:22:42 curt
-/* Parameter tweaking ... starting to stub in fog support.
-/*
- * Revision 1.2 1997/05/17 00:17:35 curt
- * Trying to stub in support for standard OpenGL.
- *
- * Revision 1.1 1997/05/16 16:05:52 curt
- * Initial revision.
- *
- */