Cleaned up initialization sequence to eliminate interdependencies
between sun position, lighting, and view position. This creates a valid single pass initialization path.
This commit is contained in:
parent
1603c2f3f8
commit
dd4a17a011
11 changed files with 435 additions and 467 deletions
|
@ -174,13 +174,12 @@ void GLUTkey(unsigned char k, int x, int y) {
|
|||
"Fog density = %.4f\n", w->visibility);
|
||||
return;
|
||||
case 27: /* ESC */
|
||||
if( fg_DebugOutput ) {
|
||||
fclose( fg_DebugOutput );
|
||||
}
|
||||
// if( fg_DebugOutput ) {
|
||||
// fclose( fg_DebugOutput );
|
||||
// }
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -266,9 +265,14 @@ void GLUTspecialkey(int k, int x, int y) {
|
|||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.3 1998/04/24 14:19:29 curt
|
||||
/* Fog tweaks.
|
||||
/* Revision 1.4 1998/04/25 20:24:00 curt
|
||||
/* Cleaned up initialization sequence to eliminate interdependencies
|
||||
/* between sun position, lighting, and view position. This creates a
|
||||
/* valid single pass initialization path.
|
||||
/*
|
||||
* Revision 1.3 1998/04/24 14:19:29 curt
|
||||
* Fog tweaks.
|
||||
*
|
||||
* Revision 1.2 1998/04/24 00:49:17 curt
|
||||
* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
* Trying out some different option parsing code.
|
||||
|
|
|
@ -322,7 +322,6 @@ static void fgRenderFrame( void ) {
|
|||
struct fgVIEW *v;
|
||||
double angle;
|
||||
GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
|
||||
GLfloat black[4] = { 0.0, 0.0, 0.0, 1.0 };
|
||||
|
||||
l = &cur_light_params;
|
||||
o = ¤t_options;
|
||||
|
@ -694,6 +693,11 @@ extern "C" {
|
|||
|
||||
|
||||
// $Log$
|
||||
// Revision 1.5 1998/04/25 20:24:01 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.4 1998/04/24 14:19:30 curt
|
||||
// Fog tweaks.
|
||||
//
|
||||
|
|
173
Main/fg_init.cxx
173
Main/fg_init.cxx
|
@ -71,48 +71,13 @@ int fgInitPosition( void ) {
|
|||
f = current_aircraft.flight;
|
||||
o = ¤t_options;
|
||||
|
||||
// Initial Position at (P13) Globe, AZ
|
||||
// If nothing else is specified, default initial position is
|
||||
// Globe, AZ (P13)
|
||||
FG_Longitude = ( -110.6642444 ) * DEG_TO_RAD;
|
||||
FG_Latitude = ( 33.3528917 ) * DEG_TO_RAD;
|
||||
FG_Runway_altitude = (3234.5 + 300);
|
||||
FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at (E81) Superior, AZ
|
||||
// FG_Longitude = ( -111.1270650 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 33.2778339 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = (2646 + 100);
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at (TUS) Tucson, AZ
|
||||
// FG_Longitude = ( -110.9412597 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 32.1162439 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = (2641 + 0);
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at (SEZ) SEDONA airport
|
||||
// FG_Longitude = (-111.7884614 + 0.01) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 34.8486289 - 0.015) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = (4827 + 450);
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at near Anchoraze, AK
|
||||
// FG_Longitude = ( -152.00 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 61.17 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = (0);
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at (HSP) Hot Springs, VA
|
||||
// FG_Longitude = (-79.8338964 + 0.01) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 37.9514564 + 0.008) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = (3792 + 1300);
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position at (ANE) Anoka County airport
|
||||
// FG_Longitude = -93.2113889 * DEG_TO_RAD;
|
||||
// FG_Latitude = 45.145 * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = 912;
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position north of the city of Globe
|
||||
// FG_Longitude = ( -398673.28 / 3600.0 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 120625.64 / 3600.0 ) * DEG_TO_RAD;
|
||||
|
@ -138,12 +103,6 @@ int fgInitPosition( void ) {
|
|||
// FG_Runway_altitude = 8000.0;
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position: (GCN) Grand Canyon Airport, AZ
|
||||
// FG_Longitude = ( -112.1469647 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 35.9523539 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = 6606.0;
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position: Jim Brennon's Kingmont Observatory
|
||||
// FG_Longitude = ( -121.1131667 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 38.8293917 ) * DEG_TO_RAD;
|
||||
|
@ -153,18 +112,6 @@ int fgInitPosition( void ) {
|
|||
// probably interesting for european team members
|
||||
// That is: If I can get the scenery to work -;) (Durk)
|
||||
|
||||
// Initial Position: Groningen Airport Eelde, the netherlands
|
||||
// FG_Longitude = ( 6.583333 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 53.125 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = 920.0;
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Initial Position: Schiphol Amsterdam Airport, the netherlands
|
||||
// FG_Longitude = ( -4.7641667 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 52.308056 ) * DEG_TO_RAD;
|
||||
// FG_Runway_altitude = 920.0;
|
||||
// FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
|
||||
// Eclipse Watching w73.5 n10 (approx) 18:00 UT
|
||||
// FG_Longitude = ( -73.5 ) * DEG_TO_RAD;
|
||||
// FG_Latitude = ( 10.0 ) * DEG_TO_RAD;
|
||||
|
@ -188,7 +135,7 @@ int fgInitPosition( void ) {
|
|||
airports.load("Airports");
|
||||
a = airports.search(o->airport_id);
|
||||
if ( strcmp(a.id, "none") == 0 ) {
|
||||
fgPrintf( FG_GENERAL, FG_INFO,
|
||||
fgPrintf( FG_GENERAL, FG_EXIT,
|
||||
"Failed to find %s in database.\n", o->airport_id);
|
||||
} else {
|
||||
FG_Longitude = ( a.longitude ) * DEG_TO_RAD;
|
||||
|
@ -202,6 +149,8 @@ int fgInitPosition( void ) {
|
|||
"Initial position is: (%.4f, %.4f, %.2f)\n",
|
||||
FG_Longitude * RAD_TO_DEG, FG_Latitude * RAD_TO_DEG,
|
||||
FG_Altitude * FEET_TO_METER);
|
||||
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -211,6 +160,9 @@ int fgInitGeneral( void ) {
|
|||
|
||||
g = &general;
|
||||
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "General Initialization\n" );
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "======= ==============\n" );
|
||||
|
||||
// determine the fg root path.
|
||||
if( !(g->root_dir) ) {
|
||||
// If not set by command line test for environmental var..
|
||||
|
@ -225,12 +177,6 @@ int fgInitGeneral( void ) {
|
|||
}
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "FG_ROOT = %s\n\n", g->root_dir);
|
||||
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "General Initialization\n" );
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "======= ==============\n" );
|
||||
|
||||
// seed the random number generater
|
||||
fg_srandom();
|
||||
|
||||
return ( 1 );
|
||||
}
|
||||
|
||||
|
@ -254,6 +200,9 @@ int fgInitSubsystems( void ) {
|
|||
fgPrintf( FG_GENERAL, FG_INFO, "Initialize Subsystems\n");
|
||||
fgPrintf( FG_GENERAL, FG_INFO, "========== ==========\n");
|
||||
|
||||
// seed the random number generater
|
||||
fg_srandom();
|
||||
|
||||
// The following section sets up the flight model EOM parameters
|
||||
// and should really be read in from one or more files.
|
||||
|
||||
|
@ -295,53 +244,22 @@ int fgInitSubsystems( void ) {
|
|||
FG_Dy_cg = 0.000000E+00;
|
||||
FG_Dz_cg = 0.000000E+00;
|
||||
|
||||
// Set initial position and slew parameters
|
||||
// fgSlewInit(-398391.3, 120070.41, 244, 3.1415); // GLOBE Airport
|
||||
// fgSlewInit(-335340,162540, 15, 4.38);
|
||||
// fgSlewInit(-398673.28,120625.64, 53, 4.38);
|
||||
|
||||
// Initialize the event manager
|
||||
fgEventInit();
|
||||
|
||||
// Dump event stats every 60 seconds
|
||||
// Output event stats every 60 seconds
|
||||
fgEventRegister( "fgEventPrintStats()", fgEventPrintStats,
|
||||
FG_EVENT_READY, 60000 );
|
||||
|
||||
// Initialize "time"
|
||||
// Initialize the time dependent variables
|
||||
fgTimeInit(t);
|
||||
fgTimeUpdate(f, t);
|
||||
|
||||
// fgViewUpdate() needs the sun in the right place, while
|
||||
// fgUpdateSunPos() needs to know the view position. I'll get
|
||||
// around this interdependency for now by calling fgUpdateSunPos()
|
||||
// once, then moving on with normal initialization.
|
||||
fgUpdateSunPos();
|
||||
|
||||
// Initialize view parameters
|
||||
// ---->
|
||||
fgViewInit(v);
|
||||
fgViewUpdate(f, v, l);
|
||||
|
||||
// Initialize Lighting interpolation tables
|
||||
fgLightInit();
|
||||
|
||||
// update the lighting parameters (based on sun angle)
|
||||
fgEventRegister( "fgLightUpdate()", fgLightUpdate,
|
||||
FG_EVENT_READY, 30000 );
|
||||
|
||||
// Initialize the weather modeling subsystem
|
||||
fgWeatherInit();
|
||||
|
||||
// update the weather for our current position
|
||||
fgEventRegister( "fgWeatherUpdate()", fgWeatherUpdate,
|
||||
FG_EVENT_READY, 120000 );
|
||||
|
||||
// Initialize the Cockpit subsystem
|
||||
if( fgCockpitInit( ¤t_aircraft )) {
|
||||
// Cockpit initialized ok.
|
||||
} else {
|
||||
fgPrintf( FG_GENERAL, FG_EXIT, "Error in Cockpit initialization!\n" );
|
||||
}
|
||||
|
||||
// Initialize the orbital elements of sun, moon and mayor planets
|
||||
fgSolarSystemInit(*t);
|
||||
|
||||
|
@ -361,7 +279,36 @@ int fgInitSubsystems( void ) {
|
|||
// Intialize the moon's position
|
||||
fgEventRegister( "fgMoonInit()", fgMoonInit, FG_EVENT_READY, 600000 );
|
||||
|
||||
// fgUpdateSunPos() needs a few position and view parameters set
|
||||
// so it can calculate local relative sun angle and a few other
|
||||
// things for correctly orienting the sky.
|
||||
// ---->
|
||||
fgUpdateSunPos();
|
||||
|
||||
// Initialize Lighting interpolation tables
|
||||
// ---->
|
||||
fgLightInit();
|
||||
|
||||
// update the lighting parameters (based on sun angle)
|
||||
fgEventRegister( "fgLightUpdate()", fgLightUpdate,
|
||||
FG_EVENT_READY, 30000 );
|
||||
|
||||
// Initialize the weather modeling subsystem
|
||||
fgWeatherInit();
|
||||
|
||||
// update the weather for our current position
|
||||
fgEventRegister( "fgWeatherUpdate()", fgWeatherUpdate,
|
||||
FG_EVENT_READY, 120000 );
|
||||
|
||||
// Initialize the Cockpit subsystem
|
||||
if( fgCockpitInit( ¤t_aircraft )) {
|
||||
// Cockpit initialized ok.
|
||||
} else {
|
||||
fgPrintf( FG_GENERAL, FG_EXIT, "Error in Cockpit initialization!\n" );
|
||||
}
|
||||
|
||||
// Initialize the "sky"
|
||||
// ---->
|
||||
fgSkyInit();
|
||||
|
||||
// Initialize the Scenery Management subsystem
|
||||
|
@ -382,26 +329,19 @@ int 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 = FG_Runway_altitude * FEET_TO_METER;
|
||||
if ( cur_elev > -9990.0 ) {
|
||||
FG_Runway_altitude = cur_elev * METER_TO_FEET;
|
||||
}
|
||||
|
||||
cur_elev = FG_Runway_altitude * FEET_TO_METER;
|
||||
if ( cur_elev > -9990.0 ) {
|
||||
FG_Runway_altitude = cur_elev * METER_TO_FEET;
|
||||
}
|
||||
if ( FG_Altitude < FG_Runway_altitude ) {
|
||||
FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
}
|
||||
|
||||
if ( FG_Altitude < FG_Runway_altitude ) {
|
||||
FG_Altitude = FG_Runway_altitude + 3.758099;
|
||||
}
|
||||
|
||||
fgPrintf(FG_GENERAL, FG_INFO,
|
||||
fgPrintf( FG_GENERAL, FG_INFO,
|
||||
"Updated position (after elevation adj): (%.4f, %.4f, %.2f)\n",
|
||||
FG_Latitude * RAD_TO_DEG, FG_Longitude * RAD_TO_DEG,
|
||||
FG_Altitude * FEET_TO_METER);
|
||||
|
||||
// end of thing that I just stuck in that I should probably move
|
||||
|
||||
// Initialize the flight model subsystem data structures base on
|
||||
|
@ -409,9 +349,6 @@ int fgInitSubsystems( void ) {
|
|||
|
||||
fgFlightModelInit( FG_LARCSIM, f, 1.0 / DEFAULT_MODEL_HZ );
|
||||
|
||||
// To HUD or not to HUD - Now a command line issue
|
||||
// show_hud = 0;
|
||||
|
||||
// Let's not show the instrument panel
|
||||
displayInstruments = 0;
|
||||
|
||||
|
@ -425,9 +362,6 @@ int fgInitSubsystems( void ) {
|
|||
// Autopilot init added here, by Jeff Goeke-Smith
|
||||
fgAPInit(¤t_aircraft);
|
||||
|
||||
// One more try here to get the sky synced up
|
||||
fgSkyColorsInit();
|
||||
|
||||
fgPrintf(FG_GENERAL, FG_INFO,"\n");
|
||||
|
||||
return(1);
|
||||
|
@ -435,6 +369,11 @@ int fgInitSubsystems( void ) {
|
|||
|
||||
|
||||
// $Log$
|
||||
// Revision 1.4 1998/04/25 20:24:01 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.3 1998/04/25 15:11:11 curt
|
||||
// Added an command line option to set starting position based on airport ID.
|
||||
//
|
||||
|
|
304
Main/views.cxx
304
Main/views.cxx
|
@ -1,27 +1,27 @@
|
|||
/**************************************************************************
|
||||
* views.c -- data structures and routines for managing and view parameters.
|
||||
*
|
||||
* Written by Curtis Olson, started August 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)
|
||||
**************************************************************************/
|
||||
//
|
||||
// views.cxx -- data structures and routines for managing and view parameters.
|
||||
//
|
||||
// Written by Curtis Olson, started August 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)
|
||||
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
@ -40,11 +40,11 @@
|
|||
#include "views.hxx"
|
||||
|
||||
|
||||
/* This is a record containing current view parameters */
|
||||
// This is a record containing current view parameters
|
||||
struct fgVIEW current_view;
|
||||
|
||||
|
||||
/* Initialize a view structure */
|
||||
// Initialize a view structure
|
||||
void fgViewInit(struct fgVIEW *v) {
|
||||
fgPrintf( FG_VIEW, FG_INFO, "Initializing View parameters\n");
|
||||
|
||||
|
@ -53,7 +53,7 @@ void fgViewInit(struct fgVIEW *v) {
|
|||
}
|
||||
|
||||
|
||||
/* Update the view parameters */
|
||||
// Update the view parameters
|
||||
void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, fgLIGHT *l) {
|
||||
MAT3vec vec, forward, v0, minus_z;
|
||||
MAT3mat R, TMP, UP, LOCAL, VIEW;
|
||||
|
@ -63,14 +63,14 @@ void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, fgLIGHT *l) {
|
|||
scenery.center.y = scenery.next_center.y;
|
||||
scenery.center.z = scenery.next_center.z;
|
||||
|
||||
/* calculate the cartesion coords of the current lat/lon/0 elev */
|
||||
// calculate the cartesion coords of the current lat/lon/0 elev
|
||||
v->cur_zero_elev = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
|
||||
FG_Sea_level_radius * FEET_TO_METER);
|
||||
v->cur_zero_elev.x -= scenery.center.x;
|
||||
v->cur_zero_elev.y -= scenery.center.y;
|
||||
v->cur_zero_elev.z -= scenery.center.z;
|
||||
|
||||
/* calculate view position in current FG view coordinate system */
|
||||
// calculate view position in current FG view coordinate system
|
||||
v->abs_view_pos = fgPolarToCart(FG_Longitude, FG_Lat_geocentric,
|
||||
FG_Radius_to_vehicle * FEET_TO_METER + 1.0);
|
||||
v->view_pos.x = v->abs_view_pos.x - scenery.center.x;
|
||||
|
@ -82,177 +82,163 @@ void fgViewUpdate(fgFLIGHT *f, struct fgVIEW *v, fgLIGHT *l) {
|
|||
fgPrintf( FG_VIEW, FG_DEBUG, "Relative view pos = %.4f, %.4f, %.4f\n",
|
||||
v->view_pos.x, v->view_pos.y, v->view_pos.z);
|
||||
|
||||
/* make a vector to the current view position */
|
||||
MAT3_SET_VEC(v0, v->view_pos.x, v->view_pos.y, v->view_pos.z);
|
||||
|
||||
/* calculate vector to sun's position on the earth's surface */
|
||||
v->to_sun[0] = l->fg_sunpos.x - (v->view_pos.x + scenery.center.x);
|
||||
v->to_sun[1] = l->fg_sunpos.y - (v->view_pos.y + scenery.center.y);
|
||||
v->to_sun[2] = l->fg_sunpos.z - (v->view_pos.z + scenery.center.z);
|
||||
/* printf("Vector to sun = %.2f %.2f %.2f\n",
|
||||
v->to_sun[0], v->to_sun[1], v->to_sun[2]); */
|
||||
|
||||
/* Derive the LOCAL aircraft rotation matrix (roll, pitch, yaw) */
|
||||
// Derive the LOCAL aircraft rotation matrix (roll, pitch, yaw)
|
||||
MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
|
||||
MAT3rotate(R, vec, FG_Phi);
|
||||
/* printf("Roll matrix\n"); */
|
||||
/* MAT3print(R, stdout); */
|
||||
// printf("Roll matrix\n");
|
||||
// MAT3print(R, stdout);
|
||||
|
||||
MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
|
||||
/* MAT3mult_vec(vec, vec, R); */
|
||||
// MAT3mult_vec(vec, vec, R);
|
||||
MAT3rotate(TMP, vec, FG_Theta);
|
||||
/* printf("Pitch matrix\n"); */
|
||||
/* MAT3print(TMP, stdout); */
|
||||
// printf("Pitch matrix\n");
|
||||
// MAT3print(TMP, stdout);
|
||||
MAT3mult(R, R, TMP);
|
||||
|
||||
MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
|
||||
/* MAT3mult_vec(vec, vec, R); */
|
||||
/* MAT3rotate(TMP, vec, FG_Psi - FG_PI_2); */
|
||||
// MAT3mult_vec(vec, vec, R);
|
||||
// MAT3rotate(TMP, vec, FG_Psi - FG_PI_2);
|
||||
MAT3rotate(TMP, vec, -FG_Psi);
|
||||
/* printf("Yaw matrix\n");
|
||||
MAT3print(TMP, stdout); */
|
||||
// printf("Yaw matrix\n");
|
||||
// MAT3print(TMP, stdout);
|
||||
MAT3mult(LOCAL, R, TMP);
|
||||
/* printf("LOCAL matrix\n"); */
|
||||
/* MAT3print(LOCAL, stdout); */
|
||||
// printf("LOCAL matrix\n");
|
||||
// MAT3print(LOCAL, stdout);
|
||||
|
||||
/* Derive the local UP transformation matrix based on *geodetic*
|
||||
* coordinates */
|
||||
// Derive the local UP transformation matrix based on *geodetic*
|
||||
// coordinates
|
||||
MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
|
||||
MAT3rotate(R, vec, FG_Longitude); /* R = rotate about Z axis */
|
||||
/* printf("Longitude matrix\n"); */
|
||||
/* MAT3print(R, stdout); */
|
||||
MAT3rotate(R, vec, FG_Longitude); // R = rotate about Z axis
|
||||
// printf("Longitude matrix\n");
|
||||
// MAT3print(R, stdout);
|
||||
|
||||
MAT3_SET_VEC(vec, 0.0, 1.0, 0.0);
|
||||
MAT3mult_vec(vec, vec, R);
|
||||
MAT3rotate(TMP, vec, -FG_Latitude); /* TMP = rotate about X axis */
|
||||
/* printf("Latitude matrix\n"); */
|
||||
/* MAT3print(TMP, stdout); */
|
||||
MAT3rotate(TMP, vec, -FG_Latitude); // TMP = rotate about X axis
|
||||
// printf("Latitude matrix\n");
|
||||
// MAT3print(TMP, stdout);
|
||||
|
||||
MAT3mult(UP, R, TMP);
|
||||
/* printf("Local up matrix\n"); */
|
||||
/* MAT3print(UP, stdout); */
|
||||
// printf("Local up matrix\n");
|
||||
// MAT3print(UP, stdout);
|
||||
|
||||
MAT3_SET_VEC(v->local_up, 1.0, 0.0, 0.0);
|
||||
MAT3mult_vec(v->local_up, v->local_up, UP);
|
||||
|
||||
/* printf("Local Up = (%.4f, %.4f, %.4f)\n",
|
||||
v->local_up[0], v->local_up[1], v->local_up[2]); */
|
||||
// printf( "Local Up = (%.4f, %.4f, %.4f)\n",
|
||||
// v->local_up[0], v->local_up[1], v->local_up[2]);
|
||||
|
||||
/* Alternative method to Derive local up vector based on
|
||||
* *geodetic* coordinates */
|
||||
/* alt_up = fgPolarToCart(FG_Longitude, FG_Latitude, 1.0); */
|
||||
/* printf(" Alt Up = (%.4f, %.4f, %.4f)\n",
|
||||
alt_up.x, alt_up.y, alt_up.z); */
|
||||
// Alternative method to Derive local up vector based on
|
||||
// *geodetic* coordinates
|
||||
// alt_up = fgPolarToCart(FG_Longitude, FG_Latitude, 1.0);
|
||||
// printf( " Alt Up = (%.4f, %.4f, %.4f)\n",
|
||||
// alt_up.x, alt_up.y, alt_up.z);
|
||||
|
||||
/* Calculate the VIEW matrix */
|
||||
// Calculate the VIEW matrix
|
||||
MAT3mult(VIEW, LOCAL, UP);
|
||||
/* printf("VIEW matrix\n"); */
|
||||
/* MAT3print(VIEW, stdout); */
|
||||
// printf("VIEW matrix\n");
|
||||
// MAT3print(VIEW, stdout);
|
||||
|
||||
/* generate the current up, forward, and fwrd-view vectors */
|
||||
// generate the current up, forward, and fwrd-view vectors
|
||||
MAT3_SET_VEC(vec, 1.0, 0.0, 0.0);
|
||||
MAT3mult_vec(v->view_up, vec, VIEW);
|
||||
|
||||
MAT3_SET_VEC(vec, 0.0, 0.0, 1.0);
|
||||
MAT3mult_vec(forward, vec, VIEW);
|
||||
/* printf("Forward vector is (%.2f,%.2f,%.2f)\n", forward[0], forward[1],
|
||||
forward[2]); */
|
||||
// printf( "Forward vector is (%.2f,%.2f,%.2f)\n", forward[0], forward[1],
|
||||
// forward[2]);
|
||||
|
||||
MAT3rotate(TMP, v->view_up, v->view_offset);
|
||||
MAT3mult_vec(v->view_forward, forward, TMP);
|
||||
|
||||
/* Given a vector from the view position to the point on the
|
||||
* earth's surface the sun is directly over, map into onto the
|
||||
* local plane representing "horizontal". */
|
||||
map_vec_onto_cur_surface_plane(v->local_up, v0, v->to_sun,
|
||||
v->surface_to_sun);
|
||||
MAT3_NORMALIZE_VEC(v->surface_to_sun, ntmp);
|
||||
/* printf("Surface direction to sun is %.2f %.2f %.2f\n",
|
||||
v->surface_to_sun[0], v->surface_to_sun[1], v->surface_to_sun[2]); */
|
||||
/* printf("Should be close to zero = %.2f\n",
|
||||
MAT3_DOT_PRODUCT(v->local_up, v->surface_to_sun)); */
|
||||
// make a vector to the current view position
|
||||
MAT3_SET_VEC(v0, v->view_pos.x, v->view_pos.y, v->view_pos.z);
|
||||
|
||||
/* Given a vector pointing straight down (-Z), map into onto the
|
||||
* local plane representing "horizontal". This should give us the
|
||||
* local direction for moving "south". */
|
||||
// Given a vector pointing straight down (-Z), map into onto the
|
||||
// local plane representing "horizontal". This should give us the
|
||||
// local direction for moving "south".
|
||||
MAT3_SET_VEC(minus_z, 0.0, 0.0, -1.0);
|
||||
map_vec_onto_cur_surface_plane(v->local_up, v0, minus_z, v->surface_south);
|
||||
MAT3_NORMALIZE_VEC(v->surface_south, ntmp);
|
||||
/* printf("Surface direction directly south %.2f %.2f %.2f\n",
|
||||
v->surface_south[0], v->surface_south[1], v->surface_south[2]); */
|
||||
// printf( "Surface direction directly south %.2f %.2f %.2f\n",
|
||||
// v->surface_south[0], v->surface_south[1], v->surface_south[2]);
|
||||
|
||||
/* now calculate the surface east vector */
|
||||
// now calculate the surface east vector
|
||||
MAT3rotate(TMP, v->view_up, FG_PI_2);
|
||||
MAT3mult_vec(v->surface_east, v->surface_south, TMP);
|
||||
/* printf("Surface direction directly east %.2f %.2f %.2f\n",
|
||||
v->surface_east[0], v->surface_east[1], v->surface_east[2]); */
|
||||
/* printf("Should be close to zero = %.2f\n",
|
||||
MAT3_DOT_PRODUCT(v->surface_south, v->surface_east)); */
|
||||
// printf( "Surface direction directly east %.2f %.2f %.2f\n",
|
||||
// v->surface_east[0], v->surface_east[1], v->surface_east[2]);
|
||||
// printf( "Should be close to zero = %.2f\n",
|
||||
// MAT3_DOT_PRODUCT(v->surface_south, v->surface_east));
|
||||
}
|
||||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.2 1998/04/24 00:49:22 curt
|
||||
/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
/* Trying out some different option parsing code.
|
||||
/* Some code reorganization.
|
||||
/*
|
||||
* Revision 1.1 1998/04/22 13:25:45 curt
|
||||
* C++ - ifing the code.
|
||||
* Starting a bit of reorganization of lighting code.
|
||||
*
|
||||
* Revision 1.16 1998/04/18 04:11:29 curt
|
||||
* Moved fg_debug to it's own library, added zlib support.
|
||||
*
|
||||
* Revision 1.15 1998/02/20 00:16:24 curt
|
||||
* Thursday's tweaks.
|
||||
*
|
||||
* Revision 1.14 1998/02/09 15:07:50 curt
|
||||
* Minor tweaks.
|
||||
*
|
||||
* Revision 1.13 1998/02/07 15:29:45 curt
|
||||
* Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
|
||||
* <chotchkiss@namg.us.anritsu.com>
|
||||
*
|
||||
* Revision 1.12 1998/01/29 00:50:28 curt
|
||||
* Added a view record field for absolute x, y, z position.
|
||||
*
|
||||
* Revision 1.11 1998/01/27 00:47:58 curt
|
||||
* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
|
||||
* system and commandline/config file processing code.
|
||||
*
|
||||
* Revision 1.10 1998/01/19 19:27:09 curt
|
||||
* Merged in make system changes from Bob Kuehne <rpk@sgi.com>
|
||||
* This should simplify things tremendously.
|
||||
*
|
||||
* Revision 1.9 1998/01/13 00:23:09 curt
|
||||
* Initial changes to support loading and management of scenery tiles. Note,
|
||||
* there's still a fair amount of work left to be done.
|
||||
*
|
||||
* Revision 1.8 1997/12/30 22:22:33 curt
|
||||
* Further integration of event manager.
|
||||
*
|
||||
* Revision 1.7 1997/12/30 20:47:45 curt
|
||||
* Integrated new event manager with subsystem initializations.
|
||||
*
|
||||
* Revision 1.6 1997/12/22 04:14:32 curt
|
||||
* Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
|
||||
*
|
||||
* Revision 1.5 1997/12/18 04:07:02 curt
|
||||
* Worked on properly translating and positioning the sky dome.
|
||||
*
|
||||
* Revision 1.4 1997/12/17 23:13:36 curt
|
||||
* Began working on rendering a sky.
|
||||
*
|
||||
* Revision 1.3 1997/12/15 23:54:50 curt
|
||||
* Add xgl wrappers for debugging.
|
||||
* Generate terrain normals on the fly.
|
||||
*
|
||||
* Revision 1.2 1997/12/10 22:37:48 curt
|
||||
* Prepended "fg" on the name of all global structures that didn't have it yet.
|
||||
* i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
|
||||
*
|
||||
* Revision 1.1 1997/08/27 21:31:17 curt
|
||||
* Initial revision.
|
||||
*
|
||||
*/
|
||||
// $Log$
|
||||
// Revision 1.3 1998/04/25 20:24:02 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.2 1998/04/24 00:49:22 curt
|
||||
// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
// Trying out some different option parsing code.
|
||||
// Some code reorganization.
|
||||
//
|
||||
// Revision 1.1 1998/04/22 13:25:45 curt
|
||||
// C++ - ifing the code.
|
||||
// Starting a bit of reorganization of lighting code.
|
||||
//
|
||||
// Revision 1.16 1998/04/18 04:11:29 curt
|
||||
// Moved fg_debug to it's own library, added zlib support.
|
||||
//
|
||||
// Revision 1.15 1998/02/20 00:16:24 curt
|
||||
// Thursday's tweaks.
|
||||
//
|
||||
// Revision 1.14 1998/02/09 15:07:50 curt
|
||||
// Minor tweaks.
|
||||
//
|
||||
// Revision 1.13 1998/02/07 15:29:45 curt
|
||||
// Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
|
||||
// <chotchkiss@namg.us.anritsu.com>
|
||||
//
|
||||
// Revision 1.12 1998/01/29 00:50:28 curt
|
||||
// Added a view record field for absolute x, y, z position.
|
||||
//
|
||||
// Revision 1.11 1998/01/27 00:47:58 curt
|
||||
// Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
|
||||
// system and commandline/config file processing code.
|
||||
//
|
||||
// Revision 1.10 1998/01/19 19:27:09 curt
|
||||
// Merged in make system changes from Bob Kuehne <rpk@sgi.com>
|
||||
// This should simplify things tremendously.
|
||||
//
|
||||
// Revision 1.9 1998/01/13 00:23:09 curt
|
||||
// Initial changes to support loading and management of scenery tiles. Note,
|
||||
// there's still a fair amount of work left to be done.
|
||||
//
|
||||
// Revision 1.8 1997/12/30 22:22:33 curt
|
||||
// Further integration of event manager.
|
||||
//
|
||||
// Revision 1.7 1997/12/30 20:47:45 curt
|
||||
// Integrated new event manager with subsystem initializations.
|
||||
//
|
||||
// Revision 1.6 1997/12/22 04:14:32 curt
|
||||
// Aligned sky with sun so dusk/dawn effects can be correct relative to the sun.
|
||||
//
|
||||
// Revision 1.5 1997/12/18 04:07:02 curt
|
||||
// Worked on properly translating and positioning the sky dome.
|
||||
//
|
||||
// Revision 1.4 1997/12/17 23:13:36 curt
|
||||
// Began working on rendering a sky.
|
||||
//
|
||||
// Revision 1.3 1997/12/15 23:54:50 curt
|
||||
// Add xgl wrappers for debugging.
|
||||
// Generate terrain normals on the fly.
|
||||
//
|
||||
// Revision 1.2 1997/12/10 22:37:48 curt
|
||||
// Prepended "fg" on the name of all global structures that didn't have it yet.
|
||||
// i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
|
||||
//
|
||||
// Revision 1.1 1997/08/27 21:31:17 curt
|
||||
// Initial revision.
|
||||
//
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
| Done
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
4/25/98 - Clean up initialization sequence and eliminate
|
||||
interdependencies between lighting and position.
|
||||
|
||||
4/23/98 - encapsulate all #include <config.h>'s with #ifdef HAVE_CONFIG_H
|
||||
|
||||
4/23/98 - Give all textured polygons ambient and diffuse glMaterial()
|
||||
|
|
|
@ -2,8 +2,11 @@
|
|||
| Todo
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
4/24/98 - Clean up initialization sequence and eliminate
|
||||
interdependencies between lighting and position.
|
||||
4/25/98 - Roll all of Time/sunpos.cxx into Astro/sun.cxx
|
||||
|
||||
4/25/98 - Overhaul view parameter generation ... see if we can piggy
|
||||
back off of larcsim calcs, and consolate potentially
|
||||
redundant code
|
||||
|
||||
4/21/98 - Tweak lighting parameter interpolation tables to better fit
|
||||
"perceived" reality
|
||||
|
|
|
@ -79,7 +79,7 @@ void timestamp(fg_timestamp *timestamp) {
|
|||
#if defined( HAVE_GETTIMEOFDAY )
|
||||
struct timeval current;
|
||||
struct timezone tz;
|
||||
fg_timestamp currtime;
|
||||
// fg_timestamp currtime;
|
||||
gettimeofday(¤t, &tz);
|
||||
timestamp->seconds = current.tv_sec;
|
||||
timestamp->millis = current.tv_usec / 1000;
|
||||
|
@ -311,8 +311,7 @@ double sidereal_course(struct tm *gmt, time_t now, double lng) {
|
|||
}
|
||||
|
||||
|
||||
// Update the time dependent variables
|
||||
|
||||
// Update time variables such as gmt, julian date, and sidereal time
|
||||
void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t) {
|
||||
double gst_precise, gst_course;
|
||||
|
||||
|
@ -376,6 +375,11 @@ void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t) {
|
|||
|
||||
|
||||
// $Log$
|
||||
// Revision 1.2 1998/04/25 20:24:02 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.1 1998/04/24 00:52:27 curt
|
||||
// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
// Fog color fixes.
|
||||
|
|
|
@ -103,7 +103,7 @@ long timediff(fg_timestamp *first, fg_timestamp *last);
|
|||
void timesum(fg_timestamp *res, fg_timestamp *start, long millis);
|
||||
|
||||
|
||||
// Initialize the time dependent variables
|
||||
// Update time variables such as gmt, julian date, and sidereal time
|
||||
void fgTimeInit(struct fgTIME *t);
|
||||
|
||||
|
||||
|
@ -115,6 +115,11 @@ void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t);
|
|||
|
||||
|
||||
// $Log$
|
||||
// Revision 1.2 1998/04/25 20:24:03 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.1 1998/04/24 00:52:28 curt
|
||||
// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
// Fog color fixes.
|
||||
|
|
|
@ -48,6 +48,11 @@ unsigned long int fgSimTime;
|
|||
|
||||
/* This routine catches the SIGALRM */
|
||||
void fgTimerCatch( int dummy ) {
|
||||
int warning_avoider;
|
||||
|
||||
// get past a compiler warning
|
||||
warning_avoider = dummy;
|
||||
|
||||
/* ignore any SIGALRM's until we come back from our EOM iteration */
|
||||
signal(SIGALRM, SIG_IGN);
|
||||
|
||||
|
@ -112,11 +117,16 @@ int fgGetTimeInterval( void ) {
|
|||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.1 1998/04/24 00:52:29 curt
|
||||
/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
/* Fog color fixes.
|
||||
/* Separated out lighting calcs into their own file.
|
||||
/* Revision 1.2 1998/04/25 20:24:03 curt
|
||||
/* Cleaned up initialization sequence to eliminate interdependencies
|
||||
/* between sun position, lighting, and view position. This creates a
|
||||
/* valid single pass initialization path.
|
||||
/*
|
||||
* Revision 1.1 1998/04/24 00:52:29 curt
|
||||
* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
* Fog color fixes.
|
||||
* Separated out lighting calcs into their own file.
|
||||
*
|
||||
* Revision 1.12 1998/04/21 17:01:44 curt
|
||||
* Fixed a problems where a pointer to a function was being passed around. In
|
||||
* one place this functions arguments were defined as ( void ) while in another
|
||||
|
|
356
Time/sunpos.cxx
356
Time/sunpos.cxx
|
@ -1,42 +1,40 @@
|
|||
/*
|
||||
* sunpos.c
|
||||
* kirk johnson
|
||||
* july 1993
|
||||
*
|
||||
* code for calculating the position on the earth's surface for which
|
||||
* the sun is directly overhead (adapted from _practical astronomy
|
||||
* with your calculator, third edition_, peter duffett-smith,
|
||||
* cambridge university press, 1988.)
|
||||
*
|
||||
* RCS $Id$
|
||||
*
|
||||
* Copyright (C) 1989, 1990, 1993, 1994, 1995 Kirk Lauritz Johnson
|
||||
*
|
||||
* Parts of the source code (as marked) are:
|
||||
* Copyright (C) 1989, 1990, 1991 by Jim Frost
|
||||
* Copyright (C) 1992 by Jamie Zawinski <jwz@lucid.com>
|
||||
*
|
||||
* Permission to use, copy, modify and freely distribute xearth for
|
||||
* non-commercial and not-for-profit purposes is hereby granted
|
||||
* without fee, provided that both the above copyright notice and this
|
||||
* permission notice appear in all copies and in supporting
|
||||
* documentation.
|
||||
*
|
||||
* The author makes no representations about the suitability of this
|
||||
* software for any purpose. It is provided "as is" without express or
|
||||
* implied warranty.
|
||||
*
|
||||
* THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* $Id$
|
||||
* (Log is kept at end of this file)
|
||||
*/
|
||||
// sunpos.c (taken from XEarth)
|
||||
// kirk johnson
|
||||
// july 1993
|
||||
//
|
||||
// code for calculating the position on the earth's surface for which
|
||||
// the sun is directly overhead (adapted from _practical astronomy
|
||||
// with your calculator, third edition_, peter duffett-smith,
|
||||
// cambridge university press, 1988.)
|
||||
//
|
||||
// RCS $Id$
|
||||
//
|
||||
// Copyright (C) 1989, 1990, 1993, 1994, 1995 Kirk Lauritz Johnson
|
||||
//
|
||||
// Parts of the source code (as marked) are:
|
||||
// Copyright (C) 1989, 1990, 1991 by Jim Frost
|
||||
// Copyright (C) 1992 by Jamie Zawinski <jwz@lucid.com>
|
||||
//
|
||||
// Permission to use, copy, modify and freely distribute xearth for
|
||||
// non-commercial and not-for-profit purposes is hereby granted
|
||||
// without fee, provided that both the above copyright notice and this
|
||||
// permission notice appear in all copies and in supporting
|
||||
// documentation.
|
||||
//
|
||||
// The author makes no representations about the suitability of this
|
||||
// software for any purpose. It is provided "as is" without express or
|
||||
// implied warranty.
|
||||
//
|
||||
// THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
// INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
|
||||
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT
|
||||
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
|
||||
// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
//
|
||||
// $Id$
|
||||
// (Log is kept at end of this file)
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
@ -53,6 +51,8 @@
|
|||
#include <Math/fg_geodesy.h>
|
||||
#include <Math/mat3.h>
|
||||
#include <Math/polar.h>
|
||||
#include <Math/vector.h>
|
||||
#include <Scenery/scenery.h>
|
||||
|
||||
#include "fg_time.hxx"
|
||||
#include "sunpos.hxx"
|
||||
|
@ -270,22 +270,14 @@ void fgSunPosition(time_t ssue, double *lon, double *lat) {
|
|||
}
|
||||
|
||||
|
||||
/* update the cur_time_params structure with the current sun position */
|
||||
// update the cur_time_params structure with the current sun position
|
||||
void fgUpdateSunPos( void ) {
|
||||
struct fgLIGHT *l;
|
||||
struct fgTIME *t;
|
||||
struct fgVIEW *v;
|
||||
MAT3vec nup, nsun;
|
||||
/* if the 4th field is 0.0, this specifies a direction ... */
|
||||
GLfloat white[4] = { 1.0, 1.0, 1.0, 1.0 };
|
||||
/* base sky color */
|
||||
GLfloat base_sky_color[4] = {0.60, 0.60, 0.90, 1.0};
|
||||
/* base fog color */
|
||||
GLfloat base_fog_color[4] = {0.70, 0.70, 0.70, 1.0};
|
||||
double sun_gd_lat, sl_radius, temp;
|
||||
double x_2, x_4, x_8, x_10;
|
||||
double light, ambient, diffuse, sky_brightness;
|
||||
static int time_warp = 0;
|
||||
MAT3vec nup, nsun, v0;
|
||||
double sun_gd_lat, sl_radius;
|
||||
double ntmp;
|
||||
|
||||
l = &cur_light_params;
|
||||
t = &cur_time_params;
|
||||
|
@ -293,153 +285,171 @@ void fgUpdateSunPos( void ) {
|
|||
|
||||
printf(" Updating Sun position\n");
|
||||
|
||||
time_warp += 0; /* increase this to make the world spin real fast */
|
||||
|
||||
fgSunPosition(t->cur_time + time_warp, &l->sun_lon, &sun_gd_lat);
|
||||
fgSunPosition(t->cur_time, &l->sun_lon, &sun_gd_lat);
|
||||
fgSunPosition(t->cur_time, &l->sun_lon, &sun_gd_lat);
|
||||
|
||||
fgGeodToGeoc(sun_gd_lat, 0.0, &sl_radius, &l->sun_gc_lat);
|
||||
|
||||
l->fg_sunpos = fgPolarToCart(l->sun_lon, l->sun_gc_lat, sl_radius);
|
||||
|
||||
/* printf(" Geodetic lat = %.5f Geocentric lat = %.5f\n", sun_gd_lat,
|
||||
t->sun_gc_lat); */
|
||||
printf( " t->cur_time = %ld\n", t->cur_time);
|
||||
printf( " Sun Geodetic lat = %.5f Geocentric lat = %.5f\n",
|
||||
sun_gd_lat, l->sun_gc_lat);
|
||||
|
||||
/* FALSE! (?> the sun position has to be translated just like
|
||||
* everything else */
|
||||
/* l->sun_vec_inv[0] = l->fg_sunpos.x - scenery_center.x; */
|
||||
/* l->sun_vec_inv[1] = l->fg_sunpos.y - scenery_center.y; */
|
||||
/* l->sun_vec_inv[2] = l->fg_sunpos.z - scenery_center.z; */
|
||||
/* MAT3_SCALE_VEC(l->sun_vec, l->sun_vec_inv, -1.0); */
|
||||
|
||||
/* I think this will work better for generating the sun light vector */
|
||||
// I think this will work better for generating the sun light vector
|
||||
l->sun_vec[0] = l->fg_sunpos.x;
|
||||
l->sun_vec[1] = l->fg_sunpos.y;
|
||||
l->sun_vec[2] = l->fg_sunpos.z;
|
||||
MAT3_NORMALIZE_VEC(l->sun_vec, temp);
|
||||
MAT3_NORMALIZE_VEC(l->sun_vec, ntmp);
|
||||
MAT3_SCALE_VEC(l->sun_vec_inv, l->sun_vec, -1.0);
|
||||
|
||||
/* make these are directional light sources only */
|
||||
// make sure these are directional light sources only
|
||||
l->sun_vec[3] = 0.0;
|
||||
l->sun_vec_inv[3] = 0.0;
|
||||
|
||||
printf(" l->sun_vec = %.2f %.2f %.2f\n", l->sun_vec[0], l->sun_vec[1],
|
||||
l->sun_vec[2]);
|
||||
|
||||
/* calculate the sun's relative angle to local up */
|
||||
// calculate the sun's relative angle to local up
|
||||
MAT3_COPY_VEC(nup, v->local_up);
|
||||
nsun[0] = l->fg_sunpos.x;
|
||||
nsun[1] = l->fg_sunpos.y;
|
||||
nsun[2] = l->fg_sunpos.z;
|
||||
MAT3_NORMALIZE_VEC(nup, temp);
|
||||
MAT3_NORMALIZE_VEC(nsun, temp);
|
||||
MAT3_NORMALIZE_VEC(nup, ntmp);
|
||||
MAT3_NORMALIZE_VEC(nsun, ntmp);
|
||||
|
||||
l->sun_angle = acos(MAT3_DOT_PRODUCT(nup, nsun));
|
||||
printf(" SUN ANGLE relative to current location = %.3f rads.\n",
|
||||
l->sun_angle);
|
||||
|
||||
// calculate vector to sun's position on the earth's surface
|
||||
v->to_sun[0] = l->fg_sunpos.x - (v->view_pos.x + scenery.center.x);
|
||||
v->to_sun[1] = l->fg_sunpos.y - (v->view_pos.y + scenery.center.y);
|
||||
v->to_sun[2] = l->fg_sunpos.z - (v->view_pos.z + scenery.center.z);
|
||||
// printf( "Vector to sun = %.2f %.2f %.2f\n",
|
||||
// v->to_sun[0], v->to_sun[1], v->to_sun[2]);
|
||||
|
||||
// make a vector to the current view position
|
||||
MAT3_SET_VEC(v0, v->view_pos.x, v->view_pos.y, v->view_pos.z);
|
||||
|
||||
// Given a vector from the view position to the point on the
|
||||
// earth's surface the sun is directly over, map into onto the
|
||||
// local plane representing "horizontal".
|
||||
map_vec_onto_cur_surface_plane(v->local_up, v0, v->to_sun,
|
||||
v->surface_to_sun);
|
||||
MAT3_NORMALIZE_VEC(v->surface_to_sun, ntmp);
|
||||
// printf("Surface direction to sun is %.2f %.2f %.2f\n",
|
||||
// v->surface_to_sun[0], v->surface_to_sun[1], v->surface_to_sun[2]);
|
||||
// printf("Should be close to zero = %.2f\n",
|
||||
// MAT3_DOT_PRODUCT(v->local_up, v->surface_to_sun));
|
||||
}
|
||||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.2 1998/04/24 00:52:31 curt
|
||||
/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
/* Fog color fixes.
|
||||
/* Separated out lighting calcs into their own file.
|
||||
/*
|
||||
* Revision 1.1 1998/04/22 13:24:07 curt
|
||||
* C++ - ifiing the code a bit.
|
||||
* Starting to reorginize some of the lighting calcs to use a table lookup.
|
||||
*
|
||||
* Revision 1.27 1998/04/03 22:12:57 curt
|
||||
* Converting to Gnu autoconf system.
|
||||
* Centralized time handling differences.
|
||||
*
|
||||
* Revision 1.26 1998/02/23 19:08:00 curt
|
||||
* Incorporated Durk's Astro/ tweaks. Includes unifying the sun position
|
||||
* calculation code between sun display, and other FG sections that use this
|
||||
* for things like lighting.
|
||||
*
|
||||
* Revision 1.25 1998/02/09 15:07:53 curt
|
||||
* Minor tweaks.
|
||||
*
|
||||
* Revision 1.24 1998/01/27 00:48:07 curt
|
||||
* Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
|
||||
* system and commandline/config file processing code.
|
||||
*
|
||||
* Revision 1.23 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.22 1998/01/19 18:40:40 curt
|
||||
* Tons of little changes to clean up the code and to remove fatal errors
|
||||
* when building with the c++ compiler.
|
||||
*
|
||||
* Revision 1.21 1997/12/30 23:10:19 curt
|
||||
* Calculate lighting parameters here.
|
||||
*
|
||||
* Revision 1.20 1997/12/30 22:22:43 curt
|
||||
* Further integration of event manager.
|
||||
*
|
||||
* Revision 1.19 1997/12/30 20:47:59 curt
|
||||
* Integrated new event manager with subsystem initializations.
|
||||
*
|
||||
* Revision 1.18 1997/12/23 04:58:40 curt
|
||||
* Tweaked the sky coloring a bit to build in structures to allow finer rgb
|
||||
* control.
|
||||
*
|
||||
* Revision 1.17 1997/12/15 23:55:08 curt
|
||||
* Add xgl wrappers for debugging.
|
||||
* Generate terrain normals on the fly.
|
||||
*
|
||||
* Revision 1.16 1997/12/11 04:43:57 curt
|
||||
* Fixed sun vector and lighting problems. I thing the moon is now lit
|
||||
* correctly.
|
||||
*
|
||||
* Revision 1.15 1997/12/10 22:37:55 curt
|
||||
* Prepended "fg" on the name of all global structures that didn't have it yet.
|
||||
* i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
|
||||
*
|
||||
* Revision 1.14 1997/12/09 04:25:39 curt
|
||||
* Working on adding a global lighting params structure.
|
||||
*
|
||||
* Revision 1.13 1997/11/25 19:25:42 curt
|
||||
* Changes to integrate Durk's moon/sun code updates + clean up.
|
||||
*
|
||||
* Revision 1.12 1997/11/15 18:15:39 curt
|
||||
* Reverse direction of sun vector, so object normals can be more normal.
|
||||
*
|
||||
* Revision 1.11 1997/10/28 21:07:21 curt
|
||||
* Changed GLUT/ -> Main/
|
||||
*
|
||||
* Revision 1.10 1997/09/13 02:00:09 curt
|
||||
* Mostly working on stars and generating sidereal time for accurate star
|
||||
* placement.
|
||||
*
|
||||
* Revision 1.9 1997/09/05 14:17:31 curt
|
||||
* More tweaking with stars.
|
||||
*
|
||||
* Revision 1.8 1997/09/05 01:36:04 curt
|
||||
* Working on getting stars right.
|
||||
*
|
||||
* Revision 1.7 1997/09/04 02:17:40 curt
|
||||
* Shufflin' stuff.
|
||||
*
|
||||
* Revision 1.6 1997/08/27 03:30:37 curt
|
||||
* Changed naming scheme of basic shared structures.
|
||||
*
|
||||
* Revision 1.5 1997/08/22 21:34:41 curt
|
||||
* Doing a bit of reorganizing and house cleaning.
|
||||
*
|
||||
* Revision 1.4 1997/08/19 23:55:09 curt
|
||||
* Worked on better simulating real lighting.
|
||||
*
|
||||
* Revision 1.3 1997/08/13 20:23:49 curt
|
||||
* The interface to sunpos now updates a global structure rather than returning
|
||||
* current sun position.
|
||||
*
|
||||
* Revision 1.2 1997/08/06 00:24:32 curt
|
||||
* Working on correct real time sun lighting.
|
||||
*
|
||||
* Revision 1.1 1997/08/01 15:27:56 curt
|
||||
* Initial revision.
|
||||
*
|
||||
*/
|
||||
// $Log$
|
||||
// Revision 1.3 1998/04/25 20:24:03 curt
|
||||
// Cleaned up initialization sequence to eliminate interdependencies
|
||||
// between sun position, lighting, and view position. This creates a
|
||||
// valid single pass initialization path.
|
||||
//
|
||||
// Revision 1.2 1998/04/24 00:52:31 curt
|
||||
// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
|
||||
// Fog color fixes.
|
||||
// Separated out lighting calcs into their own file.
|
||||
//
|
||||
// Revision 1.1 1998/04/22 13:24:07 curt
|
||||
// C++ - ifiing the code a bit.
|
||||
// Starting to reorginize some of the lighting calcs to use a table lookup.
|
||||
//
|
||||
// Revision 1.27 1998/04/03 22:12:57 curt
|
||||
// Converting to Gnu autoconf system.
|
||||
// Centralized time handling differences.
|
||||
//
|
||||
// Revision 1.26 1998/02/23 19:08:00 curt
|
||||
// Incorporated Durk's Astro/ tweaks. Includes unifying the sun position
|
||||
// calculation code between sun display, and other FG sections that use this
|
||||
// for things like lighting.
|
||||
//
|
||||
// Revision 1.25 1998/02/09 15:07:53 curt
|
||||
// Minor tweaks.
|
||||
//
|
||||
// Revision 1.24 1998/01/27 00:48:07 curt
|
||||
// Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
|
||||
// system and commandline/config file processing code.
|
||||
//
|
||||
// Revision 1.23 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.22 1998/01/19 18:40:40 curt
|
||||
// Tons of little changes to clean up the code and to remove fatal errors
|
||||
// when building with the c++ compiler.
|
||||
//
|
||||
// Revision 1.21 1997/12/30 23:10:19 curt
|
||||
// Calculate lighting parameters here.
|
||||
//
|
||||
// Revision 1.20 1997/12/30 22:22:43 curt
|
||||
// Further integration of event manager.
|
||||
//
|
||||
// Revision 1.19 1997/12/30 20:47:59 curt
|
||||
// Integrated new event manager with subsystem initializations.
|
||||
//
|
||||
// Revision 1.18 1997/12/23 04:58:40 curt
|
||||
// Tweaked the sky coloring a bit to build in structures to allow finer rgb
|
||||
// control.
|
||||
//
|
||||
// Revision 1.17 1997/12/15 23:55:08 curt
|
||||
// Add xgl wrappers for debugging.
|
||||
// Generate terrain normals on the fly.
|
||||
//
|
||||
// Revision 1.16 1997/12/11 04:43:57 curt
|
||||
// Fixed sun vector and lighting problems. I thing the moon is now lit
|
||||
// correctly.
|
||||
//
|
||||
// Revision 1.15 1997/12/10 22:37:55 curt
|
||||
// Prepended "fg" on the name of all global structures that didn't have it yet.
|
||||
// i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
|
||||
//
|
||||
// Revision 1.14 1997/12/09 04:25:39 curt
|
||||
// Working on adding a global lighting params structure.
|
||||
//
|
||||
// Revision 1.13 1997/11/25 19:25:42 curt
|
||||
// Changes to integrate Durk's moon/sun code updates + clean up.
|
||||
//
|
||||
// Revision 1.12 1997/11/15 18:15:39 curt
|
||||
// Reverse direction of sun vector, so object normals can be more normal.
|
||||
//
|
||||
// Revision 1.11 1997/10/28 21:07:21 curt
|
||||
// Changed GLUT/ -> Main/
|
||||
//
|
||||
// Revision 1.10 1997/09/13 02:00:09 curt
|
||||
// Mostly working on stars and generating sidereal time for accurate star
|
||||
// placement.
|
||||
//
|
||||
// Revision 1.9 1997/09/05 14:17:31 curt
|
||||
// More tweaking with stars.
|
||||
//
|
||||
// Revision 1.8 1997/09/05 01:36:04 curt
|
||||
// Working on getting stars right.
|
||||
//
|
||||
// Revision 1.7 1997/09/04 02:17:40 curt
|
||||
// Shufflin' stuff.
|
||||
//
|
||||
// Revision 1.6 1997/08/27 03:30:37 curt
|
||||
// Changed naming scheme of basic shared structures.
|
||||
//
|
||||
// Revision 1.5 1997/08/22 21:34:41 curt
|
||||
// Doing a bit of reorganizing and house cleaning.
|
||||
//
|
||||
// Revision 1.4 1997/08/19 23:55:09 curt
|
||||
// Worked on better simulating real lighting.
|
||||
//
|
||||
// Revision 1.3 1997/08/13 20:23:49 curt
|
||||
// The interface to sunpos now updates a global structure rather than returning
|
||||
// current sun position.
|
||||
//
|
||||
// Revision 1.2 1997/08/06 00:24:32 curt
|
||||
// Working on correct real time sun lighting.
|
||||
//
|
||||
// Revision 1.1 1997/08/01 15:27:56 curt
|
||||
// Initial revision.
|
||||
//
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* sunpos.hxx
|
||||
* sunpos.hxx (taken from XEarth)
|
||||
* kirk johnson
|
||||
* july 1993
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue