From cbdc65f55a247e62c4eff2bb97ec8cef6e3a2f85 Mon Sep 17 00:00:00 2001 From: curt Date: Wed, 20 May 1998 20:54:16 +0000 Subject: [PATCH] Converted fgLIGHT to a C++ class. --- Time/light.cxx | 79 ++++++++++++++++++++++++++++---------------------- Time/light.hxx | 37 +++++++++++++++++------ 2 files changed, 73 insertions(+), 43 deletions(-) diff --git a/Time/light.cxx b/Time/light.cxx index c829e9e65..b0e8ef3a0 100644 --- a/Time/light.cxx +++ b/Time/light.cxx @@ -51,13 +51,14 @@ fgLIGHT cur_light_params; -static fgINTERPTABLE *ambient_tbl; -static fgINTERPTABLE *diffuse_tbl; -static fgINTERPTABLE *sky_tbl; + +// Constructor +fgLIGHT::fgLIGHT( void ) { +} // initialize lighting tables -void fgLightInit( void ) { +void fgLIGHT::Init( void ) { fgOPTIONS *o; char path[256]; @@ -93,28 +94,26 @@ void fgLightInit( void ) { // update lighting parameters based on current sun position -void fgLightUpdate( void ) { - fgLIGHT *l; +void fgLIGHT::Update( void ) { fgTIME *t; fgVIEW *v; - /* if the 4th field is 0.0, this specifies a direction ... */ + // 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 */ + // base sky color GLfloat base_sky_color[4] = {0.60, 0.60, 0.90, 1.0}; - /* base fog color */ + // base fog color GLfloat base_fog_color[4] = {0.90, 0.90, 1.00, 1.0}; double deg, ambient, diffuse, sky_brightness; - l = &cur_light_params; t = &cur_time_params; v = ¤t_view; fgPrintf( FG_EVENT, FG_INFO, "Updating light parameters.\n" ); - /* calculate lighting parameters based on sun's relative angle to - * local up */ + // calculate lighting parameters based on sun's relative angle to + // local up - deg = l->sun_angle * 180.0 / FG_PI; + deg = sun_angle * 180.0 / FG_PI; fgPrintf( FG_EVENT, FG_INFO, " Sun angle = %.2f.\n", deg ); ambient = ambient_tbl->interpolate( deg ); @@ -131,33 +130,46 @@ void fgLightUpdate( void ) { // if ( diffuse < 0.0 ) { diffuse = 0.0; } // if ( sky_brightness < 0.1 ) { sky_brightness = 0.1; } - l->scene_ambient[0] = white[0] * ambient; - l->scene_ambient[1] = white[1] * ambient; - l->scene_ambient[2] = white[2] * ambient; + scene_ambient[0] = white[0] * ambient; + scene_ambient[1] = white[1] * ambient; + scene_ambient[2] = white[2] * ambient; - l->scene_diffuse[0] = white[0] * diffuse; - l->scene_diffuse[1] = white[1] * diffuse; - l->scene_diffuse[2] = white[2] * diffuse; + scene_diffuse[0] = white[0] * diffuse; + scene_diffuse[1] = white[1] * diffuse; + scene_diffuse[2] = white[2] * diffuse; - /* set fog color */ - // l->fog_color[0] = base_fog_color[0] * (ambient + diffuse); - // l->fog_color[1] = base_fog_color[1] * (ambient + diffuse); - // l->fog_color[2] = base_fog_color[2] * (ambient + diffuse); - // l->fog_color[3] = base_fog_color[3]; - l->fog_color[0] = base_fog_color[0] * sky_brightness; - l->fog_color[1] = base_fog_color[1] * sky_brightness; - l->fog_color[2] = base_fog_color[2] * sky_brightness; - l->fog_color[3] = base_fog_color[3]; + // set fog color + fog_color[0] = base_fog_color[0] * sky_brightness; + fog_color[1] = base_fog_color[1] * sky_brightness; + fog_color[2] = base_fog_color[2] * sky_brightness; + fog_color[3] = base_fog_color[3]; - /* set sky color */ - l->sky_color[0] = base_sky_color[0] * sky_brightness; - l->sky_color[1] = base_sky_color[1] * sky_brightness; - l->sky_color[2] = base_sky_color[2] * sky_brightness; - l->sky_color[3] = base_sky_color[3]; + // set sky color + sky_color[0] = base_sky_color[0] * sky_brightness; + sky_color[1] = base_sky_color[1] * sky_brightness; + sky_color[2] = base_sky_color[2] * sky_brightness; + sky_color[3] = base_sky_color[3]; +} + + +// Destructor +fgLIGHT::~fgLIGHT( void ) { +} + + +// wrapper function for updating light parameters via the event scheduler +void fgLightUpdate ( void ) { + fgLIGHT *l; + l = &cur_light_params; + + l->Update(); } // $Log$ +// Revision 1.8 1998/05/20 20:54:16 curt +// Converted fgLIGHT to a C++ class. +// // Revision 1.7 1998/05/13 18:26:50 curt // Root path info moved to fgOPTIONS. // @@ -182,4 +194,3 @@ void fgLightUpdate( void ) { // C++ - ifiing the code a bit. // Starting to reorginize some of the lighting calcs to use a table lookup. // -// diff --git a/Time/light.hxx b/Time/light.hxx index e0f7f3476..96b399841 100644 --- a/Time/light.hxx +++ b/Time/light.hxx @@ -1,4 +1,3 @@ -// // light.hxx -- lighting routines // // Written by Curtis Olson, started April 1998. @@ -43,10 +42,18 @@ #include #include +#include // Define a structure containing the global lighting parameters -typedef struct { +class fgLIGHT { + + // Lighting look up tables (based on sun angle with local horizon) + fgINTERPTABLE *ambient_tbl; + fgINTERPTABLE *diffuse_tbl; + fgINTERPTABLE *sky_tbl; + +public: /////////////////////////////////////////////////////////// // position of the sun in various forms @@ -80,24 +87,36 @@ typedef struct { // clear screen color GLfloat sky_color[4]; -} fgLIGHT; + + // Constructor + fgLIGHT( void ); + + // initialize lighting tables + void Init( void ); + + // update lighting parameters based on current sun position + void Update( void); + + // Destructor + ~fgLIGHT( void ); +}; +// Global shared light parameter structure extern fgLIGHT cur_light_params; -// initialize lighting tables -void fgLightInit( void ); - - -// update lighting parameters based on current sun position -void fgLightUpdate( void); +// wrapper function for updating light parameters via the event scheduler +void fgLightUpdate ( void ); #endif // _LIGHT_HXX // $Log$ +// Revision 1.4 1998/05/20 20:54:17 curt +// Converted fgLIGHT to a C++ class. +// // Revision 1.3 1998/05/02 01:53:18 curt // Fine tuning mktime() support because of varying behavior on different // platforms.