From 5e44c9dd0a9e8cce5f7470525871fd4904b50a51 Mon Sep 17 00:00:00 2001 From: curt <curt> Date: Sat, 31 Jan 1998 00:42:57 +0000 Subject: [PATCH] Added MetroWorks patches from Carmen Volpe. --- Cockpit/cockpit.c | 10 +- Cockpit/depend | 8 +- Cockpit/hud.c | 42 ++-- LaRCsim/Makefile | 3 +- LaRCsim/depend | 2 + Main/GLUTmain.c | 16 +- Main/fg_debug.c | 11 +- Main/fg_init.c | 20 +- Scenery/Makefile | 3 +- Scenery/geometry.c | 150 ------------- Scenery/geometry.h | 75 ------- Scenery/mesh.c | 491 ------------------------------------------- Scenery/mesh.h | 113 ---------- Scenery/obj.c | 23 +- Scenery/obj.h | 11 +- Scenery/scenery.c | 10 +- Scenery/tilecache.c | 37 ++-- Scenery/tilecache.h | 8 +- Scenery/tilemgr.c | 11 +- Simulator/Done | 11 + Simulator/Thanks | 4 + Simulator/Todo | 13 +- Simulator/commondefs | 2 +- Time/depend | 2 - Time/event.c | 42 +++- Time/fg_timer.c | 22 +- 26 files changed, 203 insertions(+), 937 deletions(-) delete mode 100644 Scenery/geometry.c delete mode 100644 Scenery/geometry.h delete mode 100644 Scenery/mesh.c delete mode 100644 Scenery/mesh.h diff --git a/Cockpit/cockpit.c b/Cockpit/cockpit.c index 164c33f99..c3502d6b6 100644 --- a/Cockpit/cockpit.c +++ b/Cockpit/cockpit.c @@ -32,7 +32,6 @@ #include <Include/fg_constants.h> #include <Aircraft/aircraft.h> -#include <Scenery/mesh.h> #include <Scenery/scenery.h> #include <Math/mat3.h> #include <Math/polar.h> @@ -95,10 +94,13 @@ void fgCockpitUpdate( void ) /* $Log$ -/* Revision 1.7 1998/01/27 00:47:51 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. +/* Revision 1.8 1998/01/31 00:43:03 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.7 1998/01/27 00:47:51 curt + * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message + * system and commandline/config file processing code. + * * Revision 1.6 1998/01/19 19:27:01 curt * Merged in make system changes from Bob Kuehne <rpk@sgi.com> * This should simplify things tremendously. diff --git a/Cockpit/depend b/Cockpit/depend index 7872ed1fc..daa26b6c6 100644 --- a/Cockpit/depend +++ b/Cockpit/depend @@ -1,8 +1,2 @@ cockpit.o: cockpit.c -hud.o: hud.c hud.h ../Include/constants.h ../Aircraft/aircraft.h \ - ../Scenery/mesh.h ../Scenery/scenery.h ../Math/mat3.h ../Math/polar.h \ - ../Time/fg_timer.h ../Math/fg_random.h ../Weather/weather.h -test.o: test.c test.h ../Aircraft/aircraft.h ../Flight/flight.h \ - ../Controls/controls.h ../Include/constants.h ../Scenery/mesh.h \ - ../Scenery/scenery.h ../Math/mat3.h ../Math/polar.h \ - ../Time/fg_timer.h ../Math/fg_random.h ../Weather/weather.h +hud.o: hud.c hud.h diff --git a/Cockpit/hud.c b/Cockpit/hud.c index c602600f2..5425d21b2 100644 --- a/Cockpit/hud.c +++ b/Cockpit/hud.c @@ -34,7 +34,7 @@ #include <Include/fg_constants.h> #include <Aircraft/aircraft.h> -#include <Scenery/mesh.h> +/* #include <Scenery/mesh.h> */ #include <Scenery/scenery.h> #include <Math/mat3.h> #include <Math/polar.h> @@ -59,18 +59,17 @@ static void textString(int x, int y, char *msg, void *font) } /* strokeString - Stroke font string */ - -static void strokeString(int x, int y, char *msg, void *font) -{ - glPushMatrix(); - glTranslatef(x, y, 0); - glScalef(.04, .04, .04); - while (*msg) { - glutStrokeCharacter(font, *msg); - msg++; - } - glPopMatrix(); -} +/* static void strokeString(int x, int y, char *msg, void *font) */ +/* { */ +/* glPushMatrix(); */ +/* glTranslatef(x, y, 0); */ +/* glScalef(.04, .04, .04); */ +/* while (*msg) { */ +/* glutStrokeCharacter(font, *msg); */ +/* msg++; */ +/* } */ +/* glPopMatrix(); */ +/* } */ /* @@ -226,7 +225,7 @@ static void drawladder( struct HUD_ladder ladder ) { double vmin, vmax; double roll_value, pitch_value; - double cos_roll, sin_roll; + /* double cos_roll, sin_roll; */ int marker_x, marker_y; int mid_scr; int scr_min, scr_max; @@ -336,7 +335,7 @@ static void drawladder( struct HUD_ladder ladder ) new_x_ini = ladder.x_pos+(x_ini-ladder.x_pos)*cos(roll_value)-\ (y_ini-ladder.y_pos)*sin(roll_value); new_y_ini = ladder.y_pos+(x_ini-ladder.x_pos)*sin(roll_value)+\ - (y_ini-ladder.y_pos)*cos(roll_value); + (y_ini-ladder.y_pos)*cos(roll_value); new_x_end = ladder.x_pos+(x_end-ladder.x_pos)*cos(roll_value)-\ (y_end-ladder.y_pos)*sin(roll_value); new_y_end = ladder.y_pos+(x_end-ladder.x_pos)*sin(roll_value)+\ @@ -386,11 +385,11 @@ static void drawhorizon( struct HUD_horizon horizon ) { int x_inc1, y_inc1; int x_inc2, y_inc2; - struct fgFLIGHT *f; + /* struct fgFLIGHT *f; */ double sin_bank, cos_bank; double bank_angle; - // f = ¤t_aircraft.flight; + /* f = ¤t_aircraft.flight; */ bank_angle = (*horizon.load_value)(); @@ -802,10 +801,13 @@ void fgUpdateHUD( Hptr hud ) /* $Log$ -/* Revision 1.8 1998/01/27 00:47:51 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. +/* Revision 1.9 1998/01/31 00:43:04 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.8 1998/01/27 00:47:51 curt + * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message + * system and commandline/config file processing code. + * * Revision 1.7 1998/01/19 18:40:20 curt * Tons of little changes to clean up the code and to remove fatal errors * when building with the c++ compiler. diff --git a/LaRCsim/Makefile b/LaRCsim/Makefile index 7fd734cd7..0e6d92238 100644 --- a/LaRCsim/Makefile +++ b/LaRCsim/Makefile @@ -2,7 +2,8 @@ ARLIBRARY = libLaRCsim.a TARGETS = $(ARLIBRARY) LaRCsimFILES = atmos_62.c ls_accel.c ls_aux.c ls_geodesy.c ls_gravity.c \ - ls_step.c ls_model.c default_model_routines.c ls_init.c # ls_sync.c + ls_step.c ls_matrix.c ls_model.c default_model_routines.c ls_init.c \ + ls_trim.c NavionFILES = navion_aero.c navion_engine.c navion_gear.c navion_init.c InterfaceFILES = ls_interface.c CFILES = $(LaRCsimFILES) $(NavionFILES) $(InterfaceFILES) diff --git a/LaRCsim/depend b/LaRCsim/depend index f1d12c0b8..4e21e3128 100644 --- a/LaRCsim/depend +++ b/LaRCsim/depend @@ -12,9 +12,11 @@ ls_init.o: ls_init.c ls_types.h ls_sym.h ls_step.h ls_init.h \ ls_interface.o: ls_interface.c ls_types.h ls_constants.h ls_generic.h \ ls_sim_control.h ls_cockpit.h ls_interface.h ls_step.h ls_accel.h \ ls_aux.h ls_model.h ls_init.h +ls_matrix.o: ls_matrix.c ls_matrix.h ls_model.o: ls_model.c ls_types.h ls_model.h default_model_routines.h ls_step.o: ls_step.c ls_types.h ls_constants.h ls_generic.h ls_accel.h \ ls_aux.h ls_model.h ls_step.h ls_geodesy.h ls_gravity.h +ls_trim.o: ls_trim.c ls_constants.h ls_types.h ls_sym.h ls_matrix.h mymain.o: mymain.c ls_types.h ls_cockpit.h ls_generic.h navion_aero.o: navion_aero.c ls_types.h ls_generic.h ls_cockpit.h navion_engine.o: navion_engine.c ls_types.h ls_constants.h \ diff --git a/Main/GLUTmain.c b/Main/GLUTmain.c index 68a902d09..ead4b3555 100644 --- a/Main/GLUTmain.c +++ b/Main/GLUTmain.c @@ -50,7 +50,6 @@ #include <Math/fg_geodesy.h> #include <Math/mat3.h> #include <Math/polar.h> -#include <Scenery/mesh.h> #include <Scenery/scenery.h> #include <Scenery/tilemgr.h> #include <Time/event.h> @@ -502,8 +501,12 @@ static void fgMainLoop( void ) { /* I'm just sticking this here for now, it should probably move * eventually */ - cur_elev = mesh_altitude(FG_Longitude * RAD_TO_ARCSEC, - FG_Latitude * RAD_TO_ARCSEC); + /* cur_elev = mesh_altitude(FG_Longitude * RAD_TO_ARCSEC, + FG_Latitude * RAD_TO_ARCSEC); */ + /* there is no ground collision detection really, so for now I + * just hard code the ground elevation to be 0 */ + cur_elev = 0; + /* printf("Ground elevation is %.2f meters here.\n", cur_elev); */ /* FG_Runway_altitude = cur_elev * METER_TO_FEET; */ @@ -630,9 +633,12 @@ int main( int argc, char *argv[] ) { /* $Log$ -/* Revision 1.53 1998/01/27 18:35:54 curt -/* Minor tweaks. +/* Revision 1.54 1998/01/31 00:43:10 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.53 1998/01/27 18:35:54 curt + * Minor tweaks. + * * Revision 1.52 1998/01/27 00:47:56 curt * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message * system and commandline/config file processing code. diff --git a/Main/fg_debug.c b/Main/fg_debug.c index 4940d499c..16498d7c3 100644 --- a/Main/fg_debug.c +++ b/Main/fg_debug.c @@ -32,7 +32,12 @@ static int fg_DebugSem = 1; static fgDebugClass fg_DebugClass = FG_ALL; static fgDebugPriority fg_DebugPriority = FG_INFO; static fgDebugCallback fg_DebugCallback = NULL; -static FILE *fg_DebugOutput = stderr; + +#ifndef __CYGWIN32__ + static FILE *fg_DebugOutput = stderr; +#else /* __CYGWIN32__ */ + static FILE *fg_DebugOutput = NULL; +#endif /* __CYGWIN32 */ /* TODO: Actually make this thing thread safe */ #ifdef USETHREADS @@ -73,6 +78,10 @@ void fgInitDebug( void ) { char *pszClass, *pszPrio; +#ifdef __CYGWIN32__ + fg_DebugOutput = stderr; +#endif /* __CYGWIN32 */ + FG_GRABDEBUGSEM; fg_DebugSem=fg_DebugSem; /* shut up GCC */ diff --git a/Main/fg_init.c b/Main/fg_init.c index d89e25ad4..518ffd60d 100644 --- a/Main/fg_init.c +++ b/Main/fg_init.c @@ -41,7 +41,6 @@ #include <Cockpit/cockpit.h> #include <Joystick/joystick.h> #include <Math/fg_random.h> -#include <Scenery/mesh.h> #include <Scenery/scenery.h> #include <Scenery/tilemgr.h> #include <Time/event.h> @@ -257,10 +256,12 @@ void fgInitSubsystems( void ) { /* I'm just sticking this here for now, it should probably move * eventually */ - cur_elev = mesh_altitude(FG_Longitude * RAD_TO_DEG * 3600.0, - FG_Latitude * RAD_TO_DEG * 3600.0); - fgPrintf( FG_GENERAL, FG_INFO, "True ground elevation is %.2f meters here.\n", - cur_elev); + /* cur_elev = mesh_altitude(FG_Longitude * RAD_TO_DEG * 3600.0, + FG_Latitude * RAD_TO_DEG * 3600.0); */ + /* fgPrintf( FG_GENERAL, FG_INFO, + "True ground elevation is %.2f meters here.\n", + cur_elev); */ + cur_elev = FG_Runway_altitude * FEET_TO_METER; if ( cur_elev > -9990.0 ) { FG_Runway_altitude = cur_elev * METER_TO_FEET; } @@ -295,10 +296,13 @@ void fgInitSubsystems( void ) { /* $Log$ -/* Revision 1.35 1998/01/27 00:47:57 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. +/* Revision 1.36 1998/01/31 00:43:13 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.35 1998/01/27 00:47:57 curt + * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message + * system and commandline/config file processing code. + * * Revision 1.34 1998/01/22 02:59:37 curt * Changed #ifdef FILE_H to #ifdef _FILE_H * diff --git a/Scenery/Makefile b/Scenery/Makefile index 22abe6c73..034cf545d 100644 --- a/Scenery/Makefile +++ b/Scenery/Makefile @@ -27,8 +27,7 @@ ARLIBRARY = libScenery.a TARGETS = $(ARLIBRARY) -CFILES = bucketutils.c common.c geometry.c mesh.c obj.c scenery.c texload.c \ - tilecache.c tilemgr.c +CFILES = bucketutils.c common.c obj.c scenery.c texload.c tilecache.c tilemgr.c CXXFILES = LDIRT = $(FG_ROOT_LIB)/$(ARLIBRARY) diff --git a/Scenery/geometry.c b/Scenery/geometry.c deleted file mode 100644 index b4cc0ae83..000000000 --- a/Scenery/geometry.c +++ /dev/null @@ -1,150 +0,0 @@ -/************************************************************************** - * geometry.c -- data structures and routines for processing vrml geometry - * - * Written by Curtis Olson, started June 1997. - * - * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - **************************************************************************/ - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <Scenery/geometry.h> -#include <Scenery/mesh.h> - - -static vrmlGeometryType; -struct MESH eg; - - -/* Begin a new vrml geometry statement */ -int vrmlInitGeometry(char *type) { - printf("Beginning geometry item = %s\n", type); - - if ( strcmp(type, "ElevationGrid") == 0 ) { - vrmlGeometryType = VRML_ELEV_GRID; - mesh_init(&eg); - } else { - vrmlGeometryType = -1; - printf("Unimplemented geometry type = %s\n", type); - } - - return(vrmlGeometryType); -} - - -/* Set current vrml geometry option name */ -void vrmlGeomOptionName(char *name) { - /* printf("Found vrml geometry option = %s\n", name); */ - - switch(vrmlGeometryType) { - case VRML_ELEV_GRID: - if ( strcmp(name, "xOrigin") == 0 ) { - mesh_set_option_name(&eg, "origin_lon"); - } else if ( strcmp(name, "zOrigin") == 0 ) { - mesh_set_option_name(&eg, "origin_lat"); - } else if ( strcmp(name, "xDimension") == 0 ) { - mesh_set_option_name(&eg, "rows"); - } else if ( strcmp(name, "zDimension") == 0 ) { - mesh_set_option_name(&eg, "cols"); - } else if ( strcmp(name, "xSpacing") == 0 ) { - mesh_set_option_name(&eg, "row_step"); - } else if ( strcmp(name, "zSpacing") == 0 ) { - mesh_set_option_name(&eg, "col_step"); - } else if ( strcmp(name, "height") == 0 ) { - eg.mesh_data = new_mesh_data(eg.rows, eg.cols); - mesh_set_option_name(&eg, "do_data"); - } else { - printf("Unknown ElevationGrid option = %s\n", name); - } - break; - } -} - - -/* Set current vrml geometry value */ -void vrmlGeomOptionsValue(char *value) { - /* printf("Found vrml geometry value = %s\n", value); */ - - switch(vrmlGeometryType) { - case VRML_ELEV_GRID: - mesh_set_option_value(&eg, value); - } -} - - -/* We've finished parsing the current geometry. Now do whatever needs - * to be done with it (like generating the OpenGL call list for - * instance */ -void vrmlHandleGeometry( void ) { - switch(vrmlGeometryType) { - case VRML_ELEV_GRID: - mesh_do_it(&eg); - } -} - - -/* Finish up the current vrml geometry statement */ -int vrmlFreeGeometry( void ) { - printf("Freeing geometry type = %d\n", vrmlGeometryType); - - switch(vrmlGeometryType) { - case VRML_ELEV_GRID: - /* We need to rethink this here, we can't just free the data, - * because we need it to calculate current ground elevation - * ... */ - /* free(eg.mesh_data); */ - ; - } - return(vrmlGeometryType); -} - - -/* $Log$ -/* Revision 1.7 1998/01/19 19:27:15 curt -/* Merged in make system changes from Bob Kuehne <rpk@sgi.com> -/* This should simplify things tremendously. -/* - * Revision 1.6 1998/01/19 18:40:35 curt - * Tons of little changes to clean up the code and to remove fatal errors - * when building with the c++ compiler. - * - * Revision 1.5 1998/01/06 01:20:23 curt - * Tweaks to help building with MSVC++ - * - * Revision 1.4 1997/08/27 03:30:26 curt - * Changed naming scheme of basic shared structures. - * - * Revision 1.3 1997/07/08 18:20:13 curt - * Working on establishing a hard ground. - * - * Revision 1.2 1997/07/07 20:59:51 curt - * Working on scenery transformations to enable us to fly fluidly over the - * poles with no discontinuity/distortion in scenery. - * - * Revision 1.1 1997/06/29 21:16:48 curt - * More twiddling with the Scenery Management system. - * - * Revision 1.1 1997/06/22 21:42:35 curt - * Initial revision of VRML (subset) parser. - * - */ diff --git a/Scenery/geometry.h b/Scenery/geometry.h deleted file mode 100644 index f62a22f87..000000000 --- a/Scenery/geometry.h +++ /dev/null @@ -1,75 +0,0 @@ -/************************************************************************** - * geometry.h -- data structures and routines for handling vrml geometry - * - * Written by Curtis Olson, started June 1997. - * - * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - **************************************************************************/ - - -#ifndef _GEOMETRY_H -#define _GEOMETRY_H - - -#define VRML_BOX 0 -#define VRML_CYLINDER 1 -#define VRML_CONE 2 -#define VRML_ELEV_GRID 3 - - -/* Begin a new vrml geometry statement */ -int vrmlInitGeometry(char *type); - -/* Set current vrml geometry option name */ -void vrmlGeomOptionName(char *name); - -/* Set current vrml geometry value */ -void vrmlGeomOptionsValue(char *value); - -/* We've finished parsing the current geometry. Now do whatever needs - * to be done with it (like generating the OpenGL call list for - * instance */ -void vrmlHandleGeometry( void ); - -/* Finish up the current vrml geometry statement */ -int vrmlFreeGeometry( void ); - - -#endif /* _GEOMETRY_H */ - - -/* $Log$ -/* Revision 1.4 1998/01/22 02:59:40 curt -/* Changed #ifdef FILE_H to #ifdef _FILE_H -/* - * Revision 1.3 1998/01/19 18:40:36 curt - * Tons of little changes to clean up the code and to remove fatal errors - * when building with the c++ compiler. - * - * Revision 1.2 1997/07/23 21:52:25 curt - * Put comments around the text after an #endif for increased portability. - * - * Revision 1.1 1997/06/29 21:16:48 curt - * More twiddling with the Scenery Management system. - * - * Revision 1.1 1997/06/22 21:42:35 curt - * Initial revision of VRML (subset) parser. - * - */ diff --git a/Scenery/mesh.c b/Scenery/mesh.c deleted file mode 100644 index 7fb319853..000000000 --- a/Scenery/mesh.c +++ /dev/null @@ -1,491 +0,0 @@ -/************************************************************************** - * mesh.c -- data structures and routines for processing terrain meshes - * - * Written by Curtis Olson, started May 1997. - * - * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - **************************************************************************/ - - -#ifndef __CYGWIN32__ -# include <malloc.h> -#endif - -#ifdef WIN32 -# include <windows.h> -#endif - -#include <stdio.h> -#include <stdlib.h> /* atof(), atoi() */ -#include <string.h> - -#include <GL/glut.h> - -#include <Include/fg_constants.h> -#include <Include/fg_types.h> -#include <Math/fg_geodesy.h> -#include <Math/fg_random.h> -#include <Math/mat3.h> -#include <Math/polar.h> - -#include <Scenery/mesh.h> -#include <Scenery/common.h> -#include <Scenery/scenery.h> - - -/* Temporary hack until we get the scenery management system running */ -extern GLint area_terrain; -extern struct MESH eg; - -/* initialize the non-array mesh values */ -void mesh_init(struct MESH *m) { - m->originx = 0.0; - m->originy = 0.0; - - m->rows = 0; - m->cols = 0; - - m->row_step = 0.0; - m->col_step = 0.0; - - m->cur_row = 0; - m->cur_col = 0; - m->do_data = 0; -} - - -/* return a pointer to a new mesh structure (no data array allocated yet) */ -struct MESH *(new_mesh)( void ) { - struct MESH *mesh_ptr; - - mesh_ptr = (struct MESH *)malloc(sizeof(struct MESH)); - - if ( mesh_ptr == 0 ) { - printf("Virtual memory exceeded\n"); - exit(-1); - } - - mesh_ptr->cur_row = 0; - mesh_ptr->cur_col = 0; - - return(mesh_ptr); -} - - -/* return a pointer to a dynamically allocated array */ -float *(new_mesh_data)(int nrows, int ncols) { - float *mesh_data_ptr; - - mesh_data_ptr = (float *)malloc(nrows * ncols * sizeof(float)); - - if ( mesh_data_ptr == 0 ) { - printf("Virtual memory exceeded\n"); - exit(-1); - } - - printf("Allocated float(%d, %d)\n", nrows, ncols); - - return(mesh_data_ptr); -} - - -/* set the option name in the mesh data structure */ -void mesh_set_option_name(struct MESH *m, char *name) { - if ( strlen(name) < MAX_IDENT_LEN ) { - strcpy(m->option_name, name); - } else { - strncpy(m->option_name, name, MAX_IDENT_LEN - 1); - m->option_name[MAX_IDENT_LEN - 1] = '\0'; - } - if ( strcmp(m->option_name, "do_data") == 0 ) { - m->do_data = 1; - } else { - m->do_data = 0; - } -} - - -/* set an option value in the mesh data structure */ -void mesh_set_option_value(struct MESH *m, char *value) { - /* printf("Setting %s to %s\n", m->option_name, value); */ - - if ( m->do_data ) { - /* mesh data is a pseudo 2d array */ - /* printf("Setting mesh_data[%d][%d] to %s\n", m->cur_row, m->cur_col, - value); */ - m->mesh_data[m->cur_row * m->cols + m->cur_col] = atof(value); - m->cur_col++; - if ( m->cur_col >= m->cols ) { - m->cur_col = 0; - m->cur_row++; - if ( m->cur_row > m->rows ) { - m->do_data = 0; - } - } - } else if ( strcmp(m->option_name, "origin_lon") == 0 ) { - m->originx = atof(value); - } else if ( strcmp(m->option_name, "origin_lat") == 0 ) { - m->originy = atof(value); - } else if ( strcmp(m->option_name, "rows") == 0 ) { - m->rows = atoi(value); - } else if ( strcmp(m->option_name, "cols") == 0 ) { - m->cols = atoi(value); - } else if ( strcmp(m->option_name, "row_step") == 0 ) { - m->row_step = atof(value); - } else if ( strcmp(m->option_name, "col_step") == 0 ) { - m->col_step = atof(value); - } else { - printf("Unknown option %s with value %s, ignoring ...\n", - m->option_name, value); - } -} - - -/* do whatever needs to be done with the mesh now that it's been - loaded, such as generating the OpenGL call list. */ -void mesh_do_it(struct MESH *m) { - area_terrain = mesh_to_OpenGL(m); -} - - -/* return the current altitude based on mesh data. We should rewrite - * this to interpolate exact values, but for now this is good enough */ -double mesh_altitude(double lon, double lat) { - /* we expect incoming (lon,lat) to be in arcsec for now */ - - double xlocal, ylocal, dx, dy, zA, zB, elev; - int x1, y1, z1, x2, y2, z2, x3, y3, z3; - int xindex, yindex; - int skip; - - skip = scenery.terrain_skip; - /* determine if we are in the lower triangle or the upper triangle - ______ - | /| - | / | - | / | - |/ | - ------ - - then calculate our end points - */ - - xlocal = (lon - eg.originx) / eg.col_step; - ylocal = (lat - eg.originy) / eg.row_step; - - xindex = (int)(xlocal / skip) * skip; - yindex = (int)(ylocal / skip) * skip; - - if ( (xindex < 0) || (xindex + skip >= eg.cols) || - (yindex < 0) || (yindex + skip >= eg.rows) ) { - return(-9999); - } - - dx = xlocal - xindex; - dy = ylocal - yindex; - - if ( dx > dy ) { - /* lower triangle */ - /* printf(" Lower triangle\n"); */ - - x1 = xindex; - y1 = yindex; - z1 = eg.mesh_data[y1 * eg.cols + x1]; - - x2 = xindex + skip; - y2 = yindex; - z2 = eg.mesh_data[y2 * eg.cols + x2]; - - x3 = xindex + skip; - y3 = yindex + skip; - z3 = eg.mesh_data[y3 * eg.cols + x3]; - - /* printf(" dx = %.2f dy = %.2f\n", dx, dy); - printf(" (x1,y1,z1) = (%d,%d,%d)\n", x1, y1, z1); - printf(" (x2,y2,z2) = (%d,%d,%d)\n", x2, y2, z2); - printf(" (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3); */ - - zA = dx * (z2 - z1) / skip + z1; - zB = dx * (z3 - z1) / skip + z1; - - /* printf(" zA = %.2f zB = %.2f\n", zA, zB); */ - - if ( dx > FG_EPSILON ) { - elev = dy * (zB - zA) / dx + zA; - } else { - elev = zA; - } - } else { - /* upper triangle */ - /* printf(" Upper triangle\n"); */ - - x1 = xindex; - y1 = yindex; - z1 = eg.mesh_data[y1 * eg.cols + x1]; - - x2 = xindex; - y2 = yindex + skip; - z2 = eg.mesh_data[y2 * eg.cols + x2]; - - x3 = xindex + skip; - y3 = yindex + skip; - z3 = eg.mesh_data[y3 * eg.cols + x3]; - - /* printf(" dx = %.2f dy = %.2f\n", dx, dy); - printf(" (x1,y1,z1) = (%d,%d,%d)\n", x1, y1, z1); - printf(" (x2,y2,z2) = (%d,%d,%d)\n", x2, y2, z2); - printf(" (x3,y3,z3) = (%d,%d,%d)\n", x3, y3, z3); */ - - zA = dy * (z2 - z1) / skip + z1; - zB = dy * (z3 - z1) / skip + z1; - - /* printf(" zA = %.2f zB = %.2f\n", zA, zB ); - printf(" xB - xA = %.2f\n", eg.col_step * dy / eg.row_step); */ - - if ( dy > FG_EPSILON ) { - elev = dx * (zB - zA) / dy + zA; - } else { - elev = zA; - } - } - - return(elev); -} - - -/* walk through mesh and make opengl calls */ -GLint mesh_to_OpenGL(struct MESH *m) { - GLint mesh; - /* static GLfloat color[4] = { 0.5, 0.4, 0.25, 1.0 }; */ /* dark desert */ - /* static GLfloat color[4] = { 0.5, 0.5, 0.25, 1.0 }; */ - static GLfloat color[4] = { 1.0, 0.0, 0.0, 1.0 }; - double centerx, centery; - double randx, randy; - - float x1, y1, x2, y2, z11, z12, z21, z22; - struct fgCartesianPoint p11, p12, p21, p22, c; - double gc_lon, gc_lat, sl_radius; - - MAT3vec v1, v2, normal; - int i, j, istep, jstep, iend, jend; - float temp; - - printf("In mesh2GL(), generating GL call list.\n"); - - /* Detail level. This is how big a step we take as we walk - * through the DEM data set. This value is initialized in - * .../Scenery/scenery.c:fgSceneryInit() */ - istep = jstep = scenery.terrain_skip ; - - centerx = m->originx + (m->rows * m->row_step) / 2.0; - centery = m->originy + (m->cols * m->col_step) / 2.0; - fgGeodToGeoc(centery*ARCSEC_TO_RAD, 0, &sl_radius, &gc_lat); - c = fgPolarToCart(centerx*ARCSEC_TO_RAD, gc_lat, sl_radius); - scenery.center = c; - - mesh = glGenLists(1); - glNewList(mesh, GL_COMPILE); - - /* glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, color ); */ - glColor3fv(color); - - 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); - - glBegin(GL_TRIANGLE_STRIP); - - for ( j = 0; j < jend; j += jstep ) { - z11 = m->mesh_data[i * m->cols + j ]; - z12 = m->mesh_data[(i+istep) * m->cols + j ]; - z21 = m->mesh_data[i * m->cols + (j+jstep)]; - z22 = m->mesh_data[(i+istep) * m->cols + (j+jstep)]; - - /* printf("A geodetic point is (%.2f, %.2f, %.2f)\n", - x1, y1, z11); */ - gc_lon = x1*ARCSEC_TO_RAD; - fgGeodToGeoc(y1*ARCSEC_TO_RAD, z11, &sl_radius, &gc_lat); - /* printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon, - gc_lat, sl_radius+z11); */ - p11 = fgPolarToCart(gc_lon, gc_lat, sl_radius+z11); - /* printf("A cart point is (%.8f, %.8f, %.8f)\n", - p11.x, p11.y, p11.z); */ - - gc_lon = x1*ARCSEC_TO_RAD; - fgGeodToGeoc(y2*ARCSEC_TO_RAD, z12, &sl_radius, &gc_lat); - p12 = fgPolarToCart(gc_lon, gc_lat, sl_radius+z12); - - gc_lon = x2*ARCSEC_TO_RAD; - fgGeodToGeoc(y1*ARCSEC_TO_RAD, z21, &sl_radius, &gc_lat); - p21 = fgPolarToCart(gc_lon, gc_lat, sl_radius+z21); - - gc_lon = x2*ARCSEC_TO_RAD; - fgGeodToGeoc(y2*ARCSEC_TO_RAD, z22, &sl_radius, &gc_lat); - p22 = fgPolarToCart(gc_lon, gc_lat, sl_radius+z22); - - v1[0] = p22.y - p11.y; v1[1] = p22.z - p11.z; v1[2] = z22 - z11; - v2[0] = p12.y - p11.y; v2[1] = p12.z - p11.z; v2[2] = z12 - z11; - MAT3cross_product(normal, v1, v2); - MAT3_NORMALIZE_VEC(normal,temp); - glNormal3d(normal[0], normal[1], normal[2]); - /* printf("normal 1 = (%.2f %.2f %.2f\n", normal[0], normal[1], - normal[2]); */ - - if ( j == 0 ) { - /* first time through */ - glVertex3d(p12.x - c.x, p12.y - c.y, p12.z - c.z); - glVertex3d(p11.x - c.x, p11.y - c.y, p11.z - c.z); - } - - glVertex3d(p22.x - c.x, p22.y - c.y, p22.z - c.z); - - v2[0] = p21.y - p11.y; v2[1] = p21.z - p11.z; v2[2] = z21 - z11; - MAT3cross_product(normal, v2, v1); - MAT3_NORMALIZE_VEC(normal,temp); - glNormal3d(normal[0], normal[1], normal[2]); - /* printf("normal 2 = (%.2f %.2f %.2f\n", normal[0], normal[1], - normal[2]); */ - - glVertex3d(p21.x - c.x, p21.y - c.y, p21.z - c.z); - - x1 += m->row_step * jstep; - x2 += m->row_step * jstep; - } - glEnd(); - - y1 += m->col_step * istep; - y2 += m->col_step * istep; - } - - /* this will go, it's only here for testing/debugging */ - - for ( i = 0; i < 200; i++ ) { - randx = fg_random() * 3600.0; - randy = fg_random() * 3600.0; - - /* mesh_make_test_object(m->originx + randx, m->originy + randy); */ - } - - glEndList(); - - return(mesh); -} - - -/* $Log$ -/* Revision 1.28 1998/01/27 00:48:02 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. -/* - * Revision 1.27 1998/01/19 19:27:15 curt - * Merged in make system changes from Bob Kuehne <rpk@sgi.com> - * This should simplify things tremendously. - * - * Revision 1.26 1998/01/19 18:40:36 curt - * Tons of little changes to clean up the code and to remove fatal errors - * when building with the c++ compiler. - * - * Revision 1.25 1998/01/07 03:31:27 curt - * Miscellaneous tweaks. - * - * Revision 1.24 1997/12/15 23:54:59 curt - * Add xgl wrappers for debugging. - * Generate terrain normals on the fly. - * - * Revision 1.23 1997/10/30 12:38:44 curt - * Working on new scenery subsystem. - * - * Revision 1.22 1997/10/28 21:00:21 curt - * Changing to new terrain format. - * - * Revision 1.21 1997/08/27 03:30:27 curt - * Changed naming scheme of basic shared structures. - * - * Revision 1.20 1997/08/19 23:55:08 curt - * Worked on better simulating real lighting. - * - * Revision 1.19 1997/08/06 00:24:28 curt - * Working on correct real time sun lighting. - * - * Revision 1.18 1997/08/02 19:10:14 curt - * Incorporated mesh2GL.c into mesh.c - * - * Revision 1.17 1997/07/18 23:41:26 curt - * Tweaks for building with Cygnus Win32 compiler. - * - * Revision 1.16 1997/07/16 20:04:51 curt - * Minor tweaks to aid Win32 port. - * - * Revision 1.15 1997/07/14 16:26:04 curt - * Testing/playing -- placed objects randomly across the entire terrain. - * - * Revision 1.14 1997/07/12 04:01:14 curt - * Added #include <Windows32/Base.h> to help Win32 compiling. - * - * Revision 1.13 1997/07/12 02:27:11 curt - * Looking at potential scenery transformation/coordinate system problems. - * - * Revision 1.12 1997/07/11 03:23:19 curt - * Solved some scenery display/orientation problems. Still have a positioning - * (or transformation?) problem. - * - * Revision 1.11 1997/07/11 01:30:02 curt - * More tweaking of terrian floor. - * - * Revision 1.10 1997/07/10 04:26:38 curt - * We now can interpolated ground elevation for any position in the grid. We - * can use this to enforce a "hard" ground. We still need to enforce some - * bounds checking so that we don't try to lookup data points outside the - * grid data set. - * - * Revision 1.9 1997/07/10 02:22:10 curt - * Working on terrain elevation interpolation routine. - * - * Revision 1.8 1997/07/09 21:31:15 curt - * Working on making the ground "hard." - * - * Revision 1.7 1997/07/08 18:20:13 curt - * Working on establishing a hard ground. - * - * Revision 1.6 1997/06/29 21:16:49 curt - * More twiddling with the Scenery Management system. - * - * Revision 1.5 1997/06/22 21:44:41 curt - * Working on intergrating the VRML (subset) parser. - * - * Revision 1.4 1997/05/30 19:30:17 curt - * The LaRCsim flight model is starting to look like it is working. - * - * Revision 1.3 1997/05/23 15:40:41 curt - * Added GNU copyright headers. - * - * Revision 1.2 1997/05/19 18:20:50 curt - * Slight change to origin key words. - * - * Revision 1.1 1997/05/16 16:07:04 curt - * Initial revision. - * - */ diff --git a/Scenery/mesh.h b/Scenery/mesh.h deleted file mode 100644 index e08c539e2..000000000 --- a/Scenery/mesh.h +++ /dev/null @@ -1,113 +0,0 @@ -/************************************************************************** - * mesh.h -- data structures and routines for processing terrain meshes - * - * Written by Curtis Olson, started May 1997. - * - * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - **************************************************************************/ - - -#ifndef _MESH_H -#define _MESH_H - - -#include <GL/glut.h> - - -struct MESH { - /* start coordinates (in arc seconds) */ - double originx, originy; - - /* number of rows and columns */ - int rows, cols; - - /* Distance between row and column data points (in arc seconds) */ - double row_step, col_step; - - /* pointer to the actual mesh data dynamically allocated */ - float *mesh_data; - - /* a temporary values for the parser to use */ - char option_name[32]; - int do_data; - int cur_row, cur_col; -}; - - -/* return a pointer to a new mesh structure (no data array allocated yet) */ -struct MESH *(new_mesh)( void ); - -/* initialize the non-array mesh values */ -void mesh_init(struct MESH *m); - -/* return a pointer to a dynamically allocated array */ -float *(new_mesh_data)(int nrows, int ncols); - -/* set the option name in the mesh data structure */ -void mesh_set_option_name(struct MESH *m, char *name); - -/* set an option value in the mesh data structure */ -void mesh_set_option_value(struct MESH *m, char *value); - -/* do whatever needs to be done with the mesh now that it's been - * loaded, such as generating the OpenGL call list. */ -void mesh_do_it(struct MESH *m); - -/* return the current altitude based on mesh data. We should rewrite - * this to interpolate exact values, but for now this is good enough */ -double mesh_altitude(double lon, double lat); - -/* walk through mesh and make opengl calls */ -GLint mesh_to_OpenGL(struct MESH *m); - - -#endif /* _MESH_H */ - - -/* $Log$ -/* Revision 1.9 1998/01/22 02:59:41 curt -/* Changed #ifdef FILE_H to #ifdef _FILE_H -/* - * Revision 1.8 1998/01/19 18:40:37 curt - * Tons of little changes to clean up the code and to remove fatal errors - * when building with the c++ compiler. - * - * Revision 1.7 1997/08/27 03:30:29 curt - * Changed naming scheme of basic shared structures. - * - * Revision 1.6 1997/08/02 19:10:15 curt - * Incorporated mesh2GL.c into mesh.c - * - * Revision 1.5 1997/07/23 21:52:25 curt - * Put comments around the text after an #endif for increased portability. - * - * Revision 1.4 1997/07/08 18:20:14 curt - * Working on establishing a hard ground. - * - * Revision 1.3 1997/06/22 21:44:41 curt - * Working on intergrating the VRML (subset) parser. - * - * Revision 1.2 1997/05/23 15:40:42 curt - * Added GNU copyright headers. - * - * Revision 1.1 1997/05/16 16:07:05 curt - * Initial revision. - * - */ diff --git a/Scenery/obj.c b/Scenery/obj.c index 316c7af2e..6ebaf113b 100644 --- a/Scenery/obj.c +++ b/Scenery/obj.c @@ -42,15 +42,15 @@ #define MAXNODES 100000 -float nodes[MAXNODES][3]; -float normals[MAXNODES][3]; +double nodes[MAXNODES][3]; +double normals[MAXNODES][3]; /* given three points defining a triangle, calculate the normal */ -void calc_normal(float p1[3], float p2[3], float p3[3], double normal[3]) +void calc_normal(double p1[3], double p2[3], double p3[3], double normal[3]) { double v1[3], v2[3]; - float temp; + double temp; v1[0] = p2[0] - p1[0]; v1[1] = p2[1] - p1[1]; v1[2] = p2[2] - p1[2]; v2[0] = p3[0] - p1[0]; v2[1] = p3[1] - p1[1]; v2[2] = p3[2] - p1[2]; @@ -64,10 +64,10 @@ void calc_normal(float p1[3], float p2[3], float p3[3], double normal[3]) /* Load a .obj file and generate the GL call list */ -GLint fgObjLoad(char *path, struct fgCartesianPoint *ref) { +GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) { char line[256], winding_str[256]; double approx_normal[3], normal[3], scale; - float x, y, z, xmax, xmin, ymax, ymin, zmax, zmin; + double x, y, z, xmax, xmin, ymax, ymin, zmax, zmin; GLint tile; FILE *f; int first, ncount, vncount, n1, n2, n3, n4; @@ -97,7 +97,7 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref) { /* node (vertex) */ if ( ncount < MAXNODES ) { /* fgPrintf( FG_TERRAIN, FG_DEBUG, "vertex = %s", line); */ - sscanf(line, "v %f %f %f\n", &x, &y, &z); + sscanf(line, "v %lf %lf %lf\n", &x, &y, &z); nodes[ncount][0] = x; nodes[ncount][1] = y; nodes[ncount][2] = z; @@ -137,7 +137,7 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref) { /* vertex normal */ if ( vncount < MAXNODES ) { /* fgPrintf( FG_TERRAIN, FG_DEBUG, "vertex normal = %s", line); */ - sscanf(line, "vn %f %f %f\n", + sscanf(line, "vn %lf %lf %lf\n", &normals[vncount][0], &normals[vncount][1], &normals[vncount][2]); vncount++; @@ -355,9 +355,12 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref) { /* $Log$ -/* Revision 1.20 1998/01/29 00:51:39 curt -/* First pass at tile cache, dynamic tile loading and tile unloading now works. +/* Revision 1.21 1998/01/31 00:43:25 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.20 1998/01/29 00:51:39 curt + * First pass at tile cache, dynamic tile loading and tile unloading now works. + * * Revision 1.19 1998/01/27 03:26:42 curt * Playing with new fgPrintf command. * diff --git a/Scenery/obj.h b/Scenery/obj.h index 622d46b8b..81e0deb4b 100644 --- a/Scenery/obj.h +++ b/Scenery/obj.h @@ -38,17 +38,20 @@ /* Load a .obj file and generate the GL call list */ -GLint fgObjLoad(char *file, struct fgCartesianPoint *ref); +GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius); #endif /* _OBJ_H */ /* $Log$ -/* Revision 1.5 1998/01/27 00:48:03 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. +/* Revision 1.6 1998/01/31 00:43:25 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.5 1998/01/27 00:48:03 curt + * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message + * system and commandline/config file processing code. + * * Revision 1.4 1998/01/22 02:59:41 curt * Changed #ifdef FILE_H to #ifdef _FILE_H * diff --git a/Scenery/scenery.c b/Scenery/scenery.c index 23dc0f861..1753d69b7 100644 --- a/Scenery/scenery.c +++ b/Scenery/scenery.c @@ -61,6 +61,7 @@ void fgSceneryInit( void ) { * build the proper structures. */ void fgSceneryUpdate(double lon, double lat, double elev) { struct fgGENERAL *g; + double max_radius; char path[1024]; g = &general; @@ -76,7 +77,7 @@ void fgSceneryUpdate(double lon, double lat, double elev) { fgPrintf(FG_TERRAIN, FG_DEBUG, " Loading Scenery: %s\n", path); - area_terrain = fgObjLoad(path, &scenery.center); + area_terrain = fgObjLoad(path, &scenery.center, &max_radius); } @@ -100,9 +101,12 @@ void fgSceneryRender( void ) { /* $Log$ -/* Revision 1.34 1998/01/27 03:26:43 curt -/* Playing with new fgPrintf command. +/* Revision 1.35 1998/01/31 00:43:26 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.34 1998/01/27 03:26:43 curt + * Playing with new fgPrintf command. + * * Revision 1.33 1998/01/19 19:27:17 curt * Merged in make system changes from Bob Kuehne <rpk@sgi.com> * This should simplify things tremendously. diff --git a/Scenery/tilecache.c b/Scenery/tilecache.c index 49b203903..c30d36438 100644 --- a/Scenery/tilecache.c +++ b/Scenery/tilecache.c @@ -64,7 +64,8 @@ int fgTileCacheExists( struct fgBUCKET *p ) { if ( tile_cache[i].tile_bucket.lat == p->lat ) { if ( tile_cache[i].tile_bucket.x == p->x ) { if ( tile_cache[i].tile_bucket.y == p->y ) { - printf("TILE EXISTS in cache ... index = %d\n", i); + fgPrintf( FG_TERRAIN, FG_DEBUG, + "TILE EXISTS in cache ... index = %d\n", i ); return( i ); } } @@ -98,7 +99,8 @@ void fgTileCacheEntryFillIn( int index, struct fgBUCKET *p ) { sprintf(file_name, "%s/Scenery/%s/%ld.obj", g->root_dir, base_path, fgBucketGenIndex(p)); tile_cache[index].display_list = - fgObjLoad(file_name, &tile_cache[index].local_ref); + fgObjLoad(file_name, &tile_cache[index].local_ref, + &tile_cache[index].bounding_radius); } @@ -108,10 +110,12 @@ void fgTileCacheEntryFree( int index ) { tile_cache[index].used = 0; /* Update the bucket */ - printf( "FREEING TILE = (%d %d %d %d)\n", - tile_cache[index].tile_bucket.lon, - tile_cache[index].tile_bucket.lat, tile_cache[index].tile_bucket.x, - tile_cache[index].tile_bucket.y ); + fgPrintf( FG_TERRAIN, FG_DEBUG, + "FREEING TILE = (%d %d %d %d)\n", + tile_cache[index].tile_bucket.lon, + tile_cache[index].tile_bucket.lat, + tile_cache[index].tile_bucket.x, + tile_cache[index].tile_bucket.y ); /* Load the appropriate area and get the display list pointer */ xglDeleteLists( tile_cache[index].display_list, 1 ); @@ -148,11 +152,13 @@ int fgTileCacheNextAvail( void ) { return(i); } else { /* calculate approximate distance from view point */ - printf( "DIST Abs view pos = %.4f, %.4f, %.4f\n", - v->abs_view_pos.x, v->abs_view_pos.y, v->abs_view_pos.z); - printf( " ref point = %.4f, %.4f, %.4f\n", - tile_cache[i].local_ref.x, tile_cache[i].local_ref.y, - tile_cache[i].local_ref.z); + fgPrintf( FG_TERRAIN, FG_DEBUG, + "DIST Abs view pos = %.4f, %.4f, %.4f\n", + v->abs_view_pos.x, v->abs_view_pos.y, v->abs_view_pos.z ); + fgPrintf( FG_TERRAIN, FG_DEBUG, + " ref point = %.4f, %.4f, %.4f\n", + tile_cache[i].local_ref.x, tile_cache[i].local_ref.y, + tile_cache[i].local_ref.z); dx = fabs(tile_cache[i].local_ref.x - v->abs_view_pos.x); dy = fabs(tile_cache[i].local_ref.y - v->abs_view_pos.y); @@ -167,7 +173,7 @@ int fgTileCacheNextAvail( void ) { } dist = max + (med + min) / 4; - printf(" distance = %.2f\n", dist); + fgPrintf( FG_TERRAIN, FG_DEBUG, " distance = %.2f\n", dist); if ( dist > max_dist ) { max_dist = dist; @@ -186,9 +192,12 @@ int fgTileCacheNextAvail( void ) { /* $Log$ -/* Revision 1.5 1998/01/29 00:51:39 curt -/* First pass at tile cache, dynamic tile loading and tile unloading now works. +/* Revision 1.6 1998/01/31 00:43:26 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.5 1998/01/29 00:51:39 curt + * First pass at tile cache, dynamic tile loading and tile unloading now works. + * * Revision 1.4 1998/01/27 03:26:43 curt * Playing with new fgPrintf command. * diff --git a/Scenery/tilecache.h b/Scenery/tilecache.h index ed143392b..0cfa79b24 100644 --- a/Scenery/tilecache.h +++ b/Scenery/tilecache.h @@ -49,6 +49,7 @@ struct fgTILE { struct fgBUCKET tile_bucket; GLint display_list; struct fgCartesianPoint local_ref; + double bounding_radius; int used; int priority; }; @@ -78,9 +79,12 @@ void fgTileCacheEntryInfo( int index, GLint *display_list, /* $Log$ -/* Revision 1.3 1998/01/29 00:51:40 curt -/* First pass at tile cache, dynamic tile loading and tile unloading now works. +/* Revision 1.4 1998/01/31 00:43:27 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.3 1998/01/29 00:51:40 curt + * First pass at tile cache, dynamic tile loading and tile unloading now works. + * * Revision 1.2 1998/01/27 00:48:04 curt * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message * system and commandline/config file processing code. diff --git a/Scenery/tilemgr.c b/Scenery/tilemgr.c index 324f2f89c..e116bb181 100644 --- a/Scenery/tilemgr.c +++ b/Scenery/tilemgr.c @@ -55,8 +55,6 @@ int tiles[FG_LOCAL_X_Y]; /* Initialize the Tile Manager subsystem */ void fgTileMgrInit( void ) { fgPrintf( FG_TERRAIN, FG_INFO, "Initializing Tile Manager subsystem.\n"); - - fgTileCacheInit(); } @@ -71,9 +69,7 @@ void fgTileMgrLoadTile( struct fgBUCKET *p, int *index) { fgTileCacheEntryFillIn(*index, p); } - printf( "SELECTED cache index of %d\n", *index); fgPrintf( FG_TERRAIN, FG_DEBUG, "Selected cache index of %d\n", *index); - } @@ -213,9 +209,12 @@ void fgTileMgrRender( void ) { /* $Log$ -/* Revision 1.10 1998/01/29 00:51:40 curt -/* First pass at tile cache, dynamic tile loading and tile unloading now works. +/* Revision 1.11 1998/01/31 00:43:27 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.10 1998/01/29 00:51:40 curt + * First pass at tile cache, dynamic tile loading and tile unloading now works. + * * Revision 1.9 1998/01/27 03:26:44 curt * Playing with new fgPrintf command. * diff --git a/Simulator/Done b/Simulator/Done index 7b846dacd..5737f626b 100644 --- a/Simulator/Done +++ b/Simulator/Done @@ -2,6 +2,17 @@ | Done -------------------------------------------------------------------------- +1/30/98 - remove Scenery/geometry.c and Scenery/mesh.c + +1/28/98 - Dynamic unloading of scenery. + +1/26/98 - Debug message system. + +1/26/98 - Dynamic loading of scenery + +1/24/98 - Remove some of the unused files such as ls_sync.c + +1/23/98 - in all .h's change #ifdef FILE_H -> #ifdef _FILE_H -------------------------------------------------------------------------- diff --git a/Simulator/Thanks b/Simulator/Thanks index 27d105368..245bde7cb 100644 --- a/Simulator/Thanks +++ b/Simulator/Thanks @@ -64,6 +64,10 @@ U.S. Geological Survey - http://edcwww.cr.usgs.gov/doc/edchome/ndcdb/ndcdb.html Provided geographic data used by this project +Carmelo Volpe <carmelo.volpe@csb.ki.se> + Porting Flight Gear to the Metro Works development environment (PC/Mac) + + Robert Allan Zeh <raz@cmg.FCNBD.COM> Helped me tremendously in figuring out the Cygnus win32 compiler and how to link with .dll's. With out him the first runable win32 diff --git a/Simulator/Todo b/Simulator/Todo index 97ac36f59..12f907c9b 100644 --- a/Simulator/Todo +++ b/Simulator/Todo @@ -2,22 +2,13 @@ | Todo -------------------------------------------------------------------------- -1/17/98 - in all .h's change #ifdef FILE_H -> #ifdef _FILE_H - -1/21/98 - Fix warning when compiling with c++ - -1/17/98 - Remove some of the unused files such as ls_sync.c - -12/29/97 - Scenery area manager - 12/29/97 - View frustum culling -1/17/98 - See about building with C++ compiler +1/21/98 - Fix warning when compiling with c++ ... still can't build + with cygnus-g++ 1/5/98 - Create a development "roadmap" -1/5/98 - remove Scenery/geometry.c and Scenery/mesh.c - 12/30/97 - fix winding problem with tri-strips in obj.c (invert normals) 12/29/97 - Unify sun position render code with existing sunpos diff --git a/Simulator/commondefs b/Simulator/commondefs index d9ecc2b0b..4ceb86aea 100644 --- a/Simulator/commondefs +++ b/Simulator/commondefs @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- FG_VERSION_MAJOR = 0 -FG_VERSION_MINOR = 27 +FG_VERSION_MINOR = 28 FG_VERSION = $(FG_VERSION_MAJOR).$(FG_VERSION_MINOR) diff --git a/Time/depend b/Time/depend index 0ad13a2c4..b3cc3332f 100644 --- a/Time/depend +++ b/Time/depend @@ -1,8 +1,6 @@ event.o: event.c fg_time.o: fg_time.c fg_timer.o: fg_timer.c -old-sidereal.o: old-sidereal.c ../Include/constants.h -scheduler.o: scheduler.c sunpos.o: sunpos.c test_event.o: test_event.c event.h ttest.o: ttest.c diff --git a/Time/event.c b/Time/event.c index ca362dfb3..bb5bbe339 100644 --- a/Time/event.c +++ b/Time/event.c @@ -30,6 +30,10 @@ #ifdef USE_FTIME # include <stdlib.h> # include <sys/timeb.h> /* for ftime() and struct timeb */ +#elif defined(__MWERKS__) +# include <windows.h> /* For Metrowerks environment */ +# include <winbase.h> /* There is no ANSI/MSL time function that */ + /* contains milliseconds */ #else # include <sys/time.h> /* for get/setitimer, gettimeofday, struct timeval */ #endif /* USE_FTIME */ @@ -54,6 +58,10 @@ struct fgEVENT { struct timeb last_run; /* absolute time for last run */ struct timeb current; /* current time */ struct timeb next_run; /* absolute time for next run */ +#elif defined(__MWERKS__) + SYSTEMTIME last_run; /* A type defed structure that holds */ + SYSTEMTIME current; /* the only structure that contains */ + SYSTEMTIME next_run; /* millisecond timing */ #else struct timeval last_run; /* absolute time for last run */ struct timeval current; /* current time */ @@ -149,6 +157,8 @@ void fgEventRun(int ptr) { /* record starting time */ #ifdef USE_FTIME ftime(&e->last_run); +#elif defined(__MWERKS__) + GetLocalTime(&e->last_run); #else gettimeofday(&e->last_run, &e->tz); #endif /* USE_FTIME */ @@ -167,6 +177,10 @@ void fgEventRun(int ptr) { ftime(&e->current); duration = 1000 * (e->current.time - e->last_run.time) + (e->current.millitm - e->last_run.millitm); +#elif defined(__MWERKS__) + GetLocalTime(&e->current); + duration = 1000 * (e->current.wSecond - e->last_run.wSecond) + + (e->current.wMilliseconds - e->last_run.wMilliseconds); #else gettimeofday(&e->current, &e->tz); duration = 1000000 * (e->current.tv_sec - e->last_run.tv_sec) + @@ -189,12 +203,16 @@ void fgEventRun(int ptr) { e->next_run.time = e->last_run.time + (e->last_run.millitm + e->interval) / 1000; e->next_run.millitm = (e->last_run.millitm + e->interval) % 1000; +#elif defined(__MWERKS__) + e->next_run.wSecond = e->last_run.wSecond + + (e->last_run.wMilliseconds + e->interval) / 1000; + e->next_run.wMilliseconds = + (e->last_run.wMilliseconds + e->interval) % 1000; #else e->next_run.tv_sec = e->last_run.tv_sec + (e->last_run.tv_usec + e->interval * 1000) / 1000000; e->next_run.tv_usec = (e->last_run.tv_usec + e->interval * 1000) % 1000000; #endif /* USE_FTIME */ - } @@ -289,6 +307,8 @@ void fgEventPrintStats( void ) { void fgEventProcess( void ) { #ifdef USE_FTIME struct timeb current; +#elif defined(__MWERKS__) + SYSTEMTIME current; /* current time */ #else struct timeval current; struct timezone tz; @@ -300,6 +320,8 @@ void fgEventProcess( void ) { /* get the current time */ #ifdef USE_FTIME ftime(¤t); +#elif defined(__MWERKS__) + GetLocalTime(¤t); #else gettimeofday(¤t, &tz); #endif /* USE_FTIME */ @@ -316,6 +338,15 @@ void fgEventProcess( void ) { (current.millitm >= events[i].next_run.millitm) ) { addq(i); } +#elif defined(__MWERKS__) + if (current.wSecond > events[i].next_run.wSecond) { + addq(i); + } + else if ( (current.wSecond == events[i].next_run.wSecond) && + (current.wMilliseconds >= + events[i].next_run.wMilliseconds)) { + addq(i); + } #else if ( current.tv_sec > events[i].next_run.tv_sec ) { addq(i); @@ -339,10 +370,13 @@ void fgEventProcess( void ) { /* $Log$ -/* Revision 1.8 1998/01/27 00:48:05 curt -/* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message -/* system and commandline/config file processing code. +/* Revision 1.9 1998/01/31 00:43:44 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.8 1998/01/27 00:48:05 curt + * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message + * system and commandline/config file processing code. + * * Revision 1.7 1998/01/19 19:27:19 curt * Merged in make system changes from Bob Kuehne <rpk@sgi.com> * This should simplify things tremendously. diff --git a/Time/fg_timer.c b/Time/fg_timer.c index db9d477e7..1cf5e660f 100644 --- a/Time/fg_timer.c +++ b/Time/fg_timer.c @@ -29,6 +29,10 @@ #ifdef USE_FTIME # include <sys/timeb.h> /* for ftime() and struct timeb */ +#elif defined(__MWERKS__) +# include <windows.h> /* For Metrowerks environment */ +# include <winbase.h> /* There is no ANSI/MSL time function that */ + /* contains milliseconds */ #else # include <sys/time.h> /* for get/setitimer, gettimeofday, struct timeval */ #endif /* USE_FTIME */ @@ -94,6 +98,9 @@ int fgGetTimeInterval( void ) { #ifdef USE_FTIME static struct timeb last; static struct timeb current; +#elif defined (__MWERKS__) + SYSTEMTIME last; + SYSTEMTIME current; #else static struct timeval last; static struct timeval current; @@ -105,6 +112,8 @@ int fgGetTimeInterval( void ) { #ifdef USE_FTIME ftime(&last); +#elif defined (__MWERKS__) + GetLocalTime(&last); #else gettimeofday(&last, &tz); #endif /* USE_FTIME */ @@ -116,6 +125,10 @@ int fgGetTimeInterval( void ) { ftime(¤t); interval = 1000 * (current.time - last.time) + (current.millitm - last.millitm); +#elif defined (__MWERKS__) + GetLocalTime(¤t); + interval = 1000 * (current.wSecond - last.wSecond) + + (current.wMilliseconds - last.wMilliseconds); #else gettimeofday(¤t, &tz); interval = 1000000 * (current.tv_sec - last.tv_sec) + @@ -131,10 +144,13 @@ int fgGetTimeInterval( void ) { /* $Log$ -/* Revision 1.9 1998/01/19 19:27:21 curt -/* Merged in make system changes from Bob Kuehne <rpk@sgi.com> -/* This should simplify things tremendously. +/* Revision 1.10 1998/01/31 00:43:45 curt +/* Added MetroWorks patches from Carmen Volpe. /* + * Revision 1.9 1998/01/19 19:27:21 curt + * Merged in make system changes from Bob Kuehne <rpk@sgi.com> + * This should simplify things tremendously. + * * Revision 1.8 1998/01/19 18:40:39 curt * Tons of little changes to clean up the code and to remove fatal errors * when building with the c++ compiler.