* (Log is kept at end of this file)
**************************************************************************/
+
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "GLTKkey.h"
#endif
-#include "../aircraft/aircraft.h"
-#include "../scenery/scenery.h"
+#include "../Aircraft/aircraft.h"
+#include "../Scenery/scenery.h"
#include "../mat3/mat3.h"
-#include "../timer/fg_timer.h"
+#include "../Timer/fg_timer.h"
#define DEG_TO_RAD 0.017453292
#define RAD_TO_DEG 57.29577951
+#ifndef M_PI
+#define M_PI 3.14159265358979323846 /* pi */
+#endif
+
+#ifndef PI2
+#define PI2 (M_PI + M_PI)
+#endif
+
+
+#ifndef M_PI_2
+#define M_PI_2 1.57079632679489661923 /* pi/2 */
+#endif
+
/* This is a record containing all the info for the aircraft currently
being operated */
struct aircraft_params current_aircraft;
/* Function prototypes */
GLint fgSceneryCompile();
static void fgSceneryDraw();
-/* pointer to terrain mesh structure */
-static GLint mesh;
+
+/* pointer to scenery structure */
+static GLint scenery, runway;
/* Another hack */
double fogDensity = 2000.0;
double Simtime;
/* Another hack */
-int use_signals = 1;
+int use_signals = 0;
/**************************************************************************
static void fgInitVisuals() {
/* if the 4th field is 0.0, this specifies a direction ... */
- static GLfloat color[4] = { 0.3, 0.7, 0.2, 1.0 };
static GLfloat fogColor[4] = {0.65, 0.65, 0.85, 1.0};
glEnable( GL_DEPTH_TEST );
glEnable( GL_LIGHTING );
glEnable( GL_LIGHT0 );
- glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color );
glShadeModel( GL_FLAT ); /* glShadeModel( GL_SMOOTH ); */
glEnable( GL_FOG );
/* 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);
+ gluPerspective(45.0, 1.0/win_ratio, 0.01, 6000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
pos_y = (FG_Latitude * RAD_TO_DEG) * 3600.0;
pos_z = FG_Altitude * 0.01; /* (Convert feet to aproximate arcsecs) */
+ printf("*** pos_z = %.2f\n", pos_z);
+
/* build current rotation matrix */
MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
MAT3rotate(R, vec, FG_Phi);
glMatrixMode(GL_MODELVIEW);
/* glLoadIdentity(); */
- /* draw terrain mesh */
+ /* draw scenery */
fgSceneryDraw();
#ifdef GLUT
void fgInitTimeDepCalcs() {
/* initialize timer */
+
+#ifdef USE_ITIMER
fgTimerInit( 1.0 / DEFAULT_TIMER_HZ, fgUpdateTimeDepCalcs );
+#endif USE_ITIMER
+
}
**************************************************************************/
static void fgSceneryInit() {
- /* make terrain mesh */
- mesh = fgSceneryCompile();
+ /* make scenery */
+ scenery = fgSceneryCompile();
+ runway = fgRunwayHack(0.69, 53.07);
}
-/* create the terrain mesh */
+/* create the scenery */
GLint fgSceneryCompile() {
- GLint mesh;
+ GLint scenery;
- mesh = mesh2GL(mesh_ptr);
+ scenery = mesh2GL(mesh_ptr);
- return(mesh);
+ return(scenery);
}
-/* draw the terrain mesh */
+/* hack in a runway */
+GLint fgRunwayHack(double width, double length) {
+ static GLfloat concrete[4] = { 0.5, 0.5, 0.5, 1.0 };
+ static GLfloat line[4] = { 0.9, 0.9, 0.9, 1.0 };
+ int i;
+ int num_lines = 16;
+ float line_len, line_width_2, cur_pos;
+
+ runway = glGenLists(1);
+ glNewList(runway, GL_COMPILE);
+
+ /* draw concrete */
+ glBegin(GL_POLYGON);
+ glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, concrete );
+ glNormal3f(0.0, 0.0, 1.0);
+
+ glVertex3d( 0.0, -width/2.0, 0.0);
+ glVertex3d( 0.0, width/2.0, 0.0);
+ glVertex3d(length, width/2.0, 0.0);
+ glVertex3d(length, -width/2.0, 0.0);
+ glEnd();
+
+ /* draw center line */
+ glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, line );
+ line_len = length / ( 2 * num_lines + 1);
+ printf("line_len = %.3f\n", line_len);
+ line_width_2 = 0.02;
+ cur_pos = line_len;
+ for ( i = 0; i < num_lines; i++ ) {
+ glBegin(GL_POLYGON);
+ glVertex3d( cur_pos, -line_width_2, 0.005);
+ glVertex3d( cur_pos, line_width_2, 0.005);
+ cur_pos += line_len;
+ glVertex3d( cur_pos, line_width_2, 0.005);
+ glVertex3d( cur_pos, -line_width_2, 0.005);
+ cur_pos += line_len;
+ glEnd();
+ }
+
+ glEndList();
+
+ return(runway);
+}
+
+
+/* draw the scenery */
static void fgSceneryDraw() {
- glCallList(mesh);
+ static float z = 32.35;
+
+ glPushMatrix();
+
+ glCallList(scenery);
+
+ printf("*** Drawing runway at %.2f\n", z);
+
+ glTranslatef( -398391.28, 120070.41, 32.35);
+ glRotatef(170.0, 0.0, 0.0, 1.0);
+ glCallList(runway);
+
+ glPopMatrix();
}
int elapsed, multi_loop;
elapsed = fgGetTimeInterval();
- /* printf("Time interval is = %d, previous remainder is = %d\n", elapsed,
- remainder); */
+ printf("Time interval is = %d, previous remainder is = %d\n", elapsed,
+ remainder);
printf("--> Frame rate is = %.2f\n", 1000.0 / (float)elapsed);
elapsed += remainder;
multi_loop = ((float)elapsed * 0.001) * DEFAULT_MODEL_HZ;
remainder = elapsed - ((multi_loop*1000) / DEFAULT_MODEL_HZ);
- /* printf("Model iterations needed = %d, new remainder = %d\n", multi_loop,
- remainder); */
+ printf("Model iterations needed = %d, new remainder = %d\n", multi_loop,
+ remainder);
aircraft_debug(1);
fgUpdateVisuals();
f = ¤t_aircraft.flight;
- /* parse the scenery file */
- parse_scenery(argv[1]);
+ printf("Flight Gear: prototype code to test OpenGL, LaRCsim, and VRML\n\n");
#ifdef GLUT
/* initialize GLUT */
glutInitWindowSize(640, 480);
/* Initialize the main window */
- glutCreateWindow("Terrain Demo");
+ glutCreateWindow("Flight Gear");
#elif MESA_TK
/* Define initial window size */
tkInitPosition(0, 0, 640, 480);
tkInitDisplayMode( TK_RGB | TK_DEPTH | TK_DOUBLE | TK_DIRECT );
/* Initialize the main window */
- if (tkInitWindow("Terrain Demo") == GL_FALSE) {
+ if (tkInitWindow("Flight Gear") == GL_FALSE) {
tkQuit();
}
#endif
}
/* build all objects */
+
+ /* parse the scenery file, and build the OpenGL call list */
+ /* this function will eventually move to the scenery management system */
+ if ( strlen(argv[1]) ) {
+ parse_scenery(argv[1]);
+ }
+
+ /* initialize the scenery */
fgSceneryInit();
#ifdef GLUT
/* $Log$
-/* Revision 1.16 1997/06/17 04:19:16 curt
-/* More timer related tweaks with respect to view direction changes.
+/* Revision 1.23 1997/06/26 19:08:33 curt
+/* Restructuring make, adding automatic "make dep" support.
/*
+ * Revision 1.22 1997/06/25 15:39:47 curt
+ * Minor changes to compile with rsxnt/win32.
+ *
+ * Revision 1.21 1997/06/22 21:44:41 curt
+ * Working on intergrating the VRML (subset) parser.
+ *
+ * Revision 1.20 1997/06/21 17:12:53 curt
+ * Capitalized subdirectory names.
+ *
+ * Revision 1.19 1997/06/18 04:10:31 curt
+ * A couple more runway tweaks ...
+ *
+ * Revision 1.18 1997/06/18 02:21:24 curt
+ * Hacked in a runway
+ *
+ * Revision 1.17 1997/06/17 16:51:58 curt
+ * Timer interval stuff now uses gettimeofday() instead of ftime()
+ *
+ * Revision 1.16 1997/06/17 04:19:16 curt
+ * More timer related tweaks with respect to view direction changes.
+ *
* Revision 1.15 1997/06/17 03:41:10 curt
* Nonsignal based interval timing is now working.
* This would be a good time to look at cleaning up the code structure a bit.