#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 PI2
+#define PI2 (M_PI + M_PI)
+#endif
+
/* This is a record containing all the info for the aircraft currently
being operated */
struct aircraft_params current_aircraft;
GLint fgSceneryCompile();
static void fgSceneryDraw();
/* pointer to terrain mesh structure */
-static GLint mesh;
+static GLint terrain, runway;
/* Another hack */
double fogDensity = 2000.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);
void fgUpdateTimeDepCalcs(int multi_loop) {
struct flight_params *f;
+ int i;
f = ¤t_aircraft.flight;
/* update the flight model */
if ( multi_loop < 0 ) {
- printf("updating flight model with default = %d\n", DEFAULT_MULTILOOP);
- fgFlightModelUpdate(FG_LARCSIM, f, DEFAULT_MULTILOOP);
- } else {
- printf("updating flight model with dynamic = %d\n", multi_loop);
- fgFlightModelUpdate(FG_LARCSIM, f, multi_loop);
+ multi_loop = DEFAULT_MULTILOOP;
}
- if ( fabs(goal_view_offset - view_offset) < 0.09 ) {
- view_offset = goal_view_offset;
- } else {
- /* move view_offset towards goal_view_offset */
- if ( goal_view_offset > view_offset ) {
- if ( goal_view_offset - view_offset < M_PI ) {
- view_offset += 0.05;
- } else {
- view_offset -= 0.05;
- }
+ /* printf("updating flight model x %d\n", multi_loop); */
+ fgFlightModelUpdate(FG_LARCSIM, f, multi_loop);
+
+ for ( i = 0; i < multi_loop; i++ ) {
+ if ( fabs(goal_view_offset - view_offset) < 0.05 ) {
+ view_offset = goal_view_offset;
+ break;
} else {
- if ( view_offset - goal_view_offset < M_PI ) {
- view_offset -= 0.05;
+ /* move view_offset towards goal_view_offset */
+ if ( goal_view_offset > view_offset ) {
+ if ( goal_view_offset - view_offset < M_PI ) {
+ view_offset += 0.01;
+ } else {
+ view_offset -= 0.01;
+ }
} else {
- view_offset += 0.05;
+ if ( view_offset - goal_view_offset < M_PI ) {
+ view_offset -= 0.01;
+ } else {
+ view_offset += 0.01;
+ }
+ }
+ if ( view_offset > PI2 ) {
+ view_offset -= PI2;
+ } else if ( view_offset < 0 ) {
+ view_offset += PI2;
}
- }
- if ( view_offset > PI2 ) {
- view_offset -= PI2;
- } else if ( view_offset < 0 ) {
- view_offset += PI2;
}
}
}
static void fgSceneryInit() {
/* make terrain mesh */
- mesh = fgSceneryCompile();
+ terrain = fgSceneryCompile();
+ runway = fgRunwayHack(0.69, 53.07);
}
/* create the terrain mesh */
GLint fgSceneryCompile() {
- GLint mesh;
+ GLint terrain;
- mesh = mesh2GL(mesh_ptr);
+ terrain = mesh2GL(mesh_ptr);
- return(mesh);
+ return(terrain);
+}
+
+
+/* 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 terrain mesh */
static void fgSceneryDraw() {
- glCallList(mesh);
+ static float z = 32.35;
+
+ glPushMatrix();
+
+ glCallList(terrain);
+
+ 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();
}
elapsed = fgGetTimeInterval();
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);
/* $Log$
-/* 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.
+/* 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.
+ *
* Revision 1.14 1997/06/16 19:32:51 curt
* Starting to add general timer support.
*