From ed729a630ec8adeb6f075044fe53a38e818daf7b Mon Sep 17 00:00:00 2001 From: curt Date: Tue, 30 Dec 1997 16:36:40 +0000 Subject: [PATCH] Merged in Durk's changes ... --- Cockpit/depend | 10 +++ Cockpit/hud.h | 16 ++++- Main/GLUTkey.c | 13 +++- Main/GLUTmain.c | 89 ++++++++++++++++++++--- Main/depend | 1 + Main/fg_init.c | 11 ++- Scenery/moon.c | 179 +++++++++++++++++++++++++++------------------- Scenery/orbits.h | 9 ++- Scenery/planets.c | 61 ++++++++++++++-- Scenery/planets.h | 9 ++- Scenery/stars.c | 24 +++++-- Scenery/sun.c | 41 +++++++---- Time/depend | 4 +- 13 files changed, 345 insertions(+), 122 deletions(-) diff --git a/Cockpit/depend b/Cockpit/depend index d5e9f450e..1e0cb8cc7 100644 --- a/Cockpit/depend +++ b/Cockpit/depend @@ -18,3 +18,13 @@ hud.o: hud.c hud.h ../Aircraft/aircraft.h \ ../Scenery/scenery.h ../Scenery/../Include/types.h ../Math/mat3.h \ ../Math/polar.h ../Math/../Include/types.h ../Time/fg_timer.h \ ../Math/fg_random.h ../Weather/weather.h +test.o: test.c test.h ../Aircraft/aircraft.h \ + ../Aircraft/../Flight/flight.h ../Aircraft/../Flight/Slew/slew.h \ + ../Aircraft/../Flight/LaRCsim/ls_interface.h \ + ../Aircraft/../Flight/LaRCsim/../flight.h \ + ../Aircraft/../Controls/controls.h \ + ../Aircraft/../Controls/../Include/limits.h ../Flight/flight.h \ + ../Controls/controls.h ../Include/constants.h ../Scenery/mesh.h \ + ../Scenery/scenery.h ../Scenery/../Include/types.h ../Math/mat3.h \ + ../Math/polar.h ../Math/../Include/types.h ../Time/fg_timer.h \ + ../Math/fg_random.h ../Weather/weather.h diff --git a/Cockpit/hud.h b/Cockpit/hud.h index 28fe685af..652bb8387 100644 --- a/Cockpit/hud.h +++ b/Cockpit/hud.h @@ -24,6 +24,10 @@ **************************************************************************/ +#ifndef HUD_H +#define HUD_H + + #include "../Aircraft/aircraft.h" #include "../Flight/flight.h" #include "../Controls/controls.h" @@ -225,11 +229,17 @@ void fgUpdateHUD(); void fgUpdateHUD2( struct HUD *hud ); +#endif /* HUD_H */ + + /* $Log$ -/* Revision 1.2 1997/12/10 22:37:40 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.3 1997/12/30 16:36:41 curt +/* Merged in Durk's changes ... /* + * Revision 1.2 1997/12/10 22:37:40 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/29 18:03:22 curt * Initial revision. * diff --git a/Main/GLUTkey.c b/Main/GLUTkey.c index 66f139b75..8e178befb 100644 --- a/Main/GLUTkey.c +++ b/Main/GLUTkey.c @@ -42,6 +42,7 @@ extern int show_hud; /* HUD state */ +extern int displayInstruments; /* Handle keyboard events */ @@ -86,6 +87,9 @@ void GLUTkey(unsigned char k, int x, int y) { case 72: /* H key */ show_hud = !show_hud; return; + case 87: /* W key */ + displayInstruments = !displayInstruments; + return; case 90: /* Z key */ w->visibility /= 1.10; xglFogf(GL_FOG_END, w->visibility); @@ -225,10 +229,13 @@ void GLUTspecialkey(int k, int x, int y) { /* $Log$ -/* Revision 1.23 1997/12/15 23:54:44 curt -/* Add xgl wrappers for debugging. -/* Generate terrain normals on the fly. +/* Revision 1.24 1997/12/30 16:36:46 curt +/* Merged in Durk's changes ... /* + * Revision 1.23 1997/12/15 23:54:44 curt + * Add xgl wrappers for debugging. + * Generate terrain normals on the fly. + * * Revision 1.22 1997/12/10 22:37:45 curt * Prepended "fg" on the name of all global structures that didn't have it yet. * i.e. "struct WEATHER {}" became "struct fgWEATHER {}" diff --git a/Main/GLUTmain.c b/Main/GLUTmain.c index 770c03044..42f0dbdf4 100644 --- a/Main/GLUTmain.c +++ b/Main/GLUTmain.c @@ -62,6 +62,7 @@ struct fgGENERAL general; /* view parameters */ static GLfloat win_ratio = 1.0; +static GLint winWidth, winHeight; /* temporary hack */ /* pointer to scenery structure */ @@ -75,6 +76,9 @@ int use_signals = 0; /* Yet another hack. This one used by the HUD code. Michele */ int show_hud; +/* Yet another other hack. Used for my prototype instrument code. (Durk) */ +int displayInstruments; + /************************************************************************** * fgInitVisuals() -- Initialize various GL/view parameters @@ -135,10 +139,22 @@ static void fgUpdateViewParams() { fgViewUpdate(f, v, l); - /* Tell GL we are about to modify the projection parameters */ - xglMatrixMode(GL_PROJECTION); - xglLoadIdentity(); - gluPerspective(55.0, 1.0/win_ratio, 1.0, 100000.0); + if (displayInstruments) + { + xglViewport(0, (GLint)(winHeight / 2 ) , (GLint)winWidth, (GLint)winHeight / 2); + /* Tell GL we are about to modify the projection parameters */ + xglMatrixMode(GL_PROJECTION); + xglLoadIdentity(); + gluPerspective(55.0, 2.0/win_ratio, 1.0, 100000.0); + } + else + { + xglViewport(0, 0 , (GLint)winWidth, (GLint) winHeight); + /* Tell GL we are about to modify the projection parameters */ + xglMatrixMode(GL_PROJECTION); + xglLoadIdentity(); + gluPerspective(55.0, 1.0/win_ratio, 1.0, 100000.0); + } xglMatrixMode(GL_MODELVIEW); xglLoadIdentity(); @@ -215,6 +231,47 @@ static void fgUpdateViewParams() { } +/************************************************************************* + * Draw a basic instrument panel + ************************************************************************/ +static void fgUpdateInstrViewParams() { + xglViewport(0, 0 , (GLint)winWidth, (GLint)winHeight / 2); + + xglMatrixMode(GL_PROJECTION); + xglPushMatrix(); + + xglLoadIdentity(); + gluOrtho2D(0, 640, 0, 480); + xglMatrixMode(GL_MODELVIEW); + xglPushMatrix(); + xglLoadIdentity(); + + xglColor3f(1.0, 1.0, 1.0); + xglIndexi(7); + + xglDisable(GL_DEPTH_TEST); + xglDisable(GL_LIGHTING); + + xglLineWidth(1); + xglColor3f (0.5, 0.5, 0.5); + + xglBegin(GL_QUADS); + xglVertex2f(0.0, 0.00); + xglVertex2f(0.0, 480.0); + xglVertex2f(640.0,480.0); + xglVertex2f(640.0, 0.0); + xglEnd(); + + xglRectf(0.0,0.0, 640, 480); + xglEnable(GL_DEPTH_TEST); + xglEnable(GL_LIGHTING); + xglMatrixMode(GL_PROJECTION); + xglPopMatrix(); + xglMatrixMode(GL_MODELVIEW); + xglPopMatrix(); +} + + /************************************************************************** * Update all Visuals (redraws anything graphics related) **************************************************************************/ @@ -291,8 +348,14 @@ static void fgRenderFrame( void ) { fgSceneryRender(); /* display HUD */ - /* if( show_hud ) - fgCockpitUpdate(); */ + /* if( show_hud ) { + fgCockpitUpdate(); + } */ + + /* display instruments */ + if (displayInstruments) { + fgUpdateInstrViewParams(); + } #ifdef GLUT xglutSwapBuffers(); @@ -533,8 +596,11 @@ static void fgReshape( int width, int height ) { win_ratio = (GLfloat) height / (GLfloat) width; } - /* Inform gl of our view window size */ - xglViewport(0, 0, (GLint)width, (GLint)height); + winWidth = width; + winHeight = height; + + /* Inform gl of our view window size (now handled elsewhere) */ + /* xglViewport(0, 0, (GLint)width, (GLint)height); */ fgUpdateViewParams(); @@ -623,9 +689,12 @@ int main( int argc, char *argv[] ) { /* $Log$ -/* Revision 1.41 1997/12/30 13:06:56 curt -/* A couple lighting tweaks ... +/* Revision 1.42 1997/12/30 16:36:47 curt +/* Merged in Durk's changes ... /* + * Revision 1.41 1997/12/30 13:06:56 curt + * A couple lighting tweaks ... + * * Revision 1.40 1997/12/30 01:38:37 curt * Switched back to per vertex normals and smooth shading for terrain. * diff --git a/Main/depend b/Main/depend index 3ac3e76c5..eb76cabe4 100644 --- a/Main/depend +++ b/Main/depend @@ -37,6 +37,7 @@ fg_init.o: fg_init.c fg_init.h views.h ../Include/types.h \ ../Scenery/scenery.h ../Scenery/../Include/types.h ../Scenery/sky.h \ ../Scenery/stars.h ../Scenery/sun.h ../Time/sunpos.h \ ../Weather/weather.h +probdemo.o: probdemo.c ../XGL/xgl.h views.o: views.c views.h ../Include/types.h ../Flight/flight.h \ ../Flight/Slew/slew.h ../Flight/LaRCsim/ls_interface.h \ ../Flight/LaRCsim/../flight.h ../Math/mat3.h ../Time/fg_time.h \ diff --git a/Main/fg_init.c b/Main/fg_init.c index 5cac2000b..0eeca4948 100644 --- a/Main/fg_init.c +++ b/Main/fg_init.c @@ -49,6 +49,7 @@ extern int show_hud; /* HUD state */ +extern int displayInstruments; /* General house keeping initializations */ @@ -228,15 +229,21 @@ void fgInitSubsystems( void ) { /* To HUD or not to HUD */ show_hud = 1; + /* Let's show the instrument panel */ + displayInstruments = 1; + /* Joystick support */ fgJoystickInit( 0 ); } /* $Log$ -/* Revision 1.22 1997/12/19 23:34:05 curt -/* Lot's of tweaking with sky rendering and lighting. +/* Revision 1.23 1997/12/30 16:36:50 curt +/* Merged in Durk's changes ... /* + * Revision 1.22 1997/12/19 23:34:05 curt + * Lot's of tweaking with sky rendering and lighting. + * * Revision 1.21 1997/12/19 16:45:00 curt * Working on scene rendering order and options. * diff --git a/Scenery/moon.c b/Scenery/moon.c index 22461d606..839de32f2 100644 --- a/Scenery/moon.c +++ b/Scenery/moon.c @@ -28,6 +28,7 @@ #include "orbits.h" #include "moon.h" +#include "../Aircraft/aircraft.h" #include "../Include/general.h" #include "../Main/views.h" #include "../Time/fg_time.h" @@ -148,80 +149,110 @@ struct CelestialCoord fgCalculateMoon(struct OrbElements params, struct OrbElements sunParams, struct fgTIME t) { - struct CelestialCoord - result; - - double - eccAnom, ecl, lonecl, latecl, actTime, - xv, yv, v, r, xh, yh, zh, xg, yg, zg, xe, ye, ze, - Ls, Lm, D, F; - - /* calculate the angle between ecliptic and equatorial coordinate system */ - actTime = fgCalcActTime(t); - ecl = fgDegToRad(23.4393 - 3.563E-7 * actTime); // in radians of course - - /* calculate the eccentric anomaly */ - eccAnom = fgCalcEccAnom(params.M, params.e); - - /* calculate the moon's distance (d) and true anomaly (v) */ - xv = params.a * ( cos(eccAnom) - params.e); - yv = params.a * ( sqrt(1.0 - params.e*params.e) * sin(eccAnom)); - v =atan2(yv, xv); - r = sqrt(xv*xv + yv*yv); - - /* estimate the geocentric rectangular coordinates here */ - xh = r * (cos(params.N) * cos(v + params.w) - sin(params.N) * sin(v + params.w) * cos(params.i)); - yh = r * (sin(params.N) * cos(v + params.w) + cos(params.N) * sin(v + params.w) * cos(params.i)); - zh = r * (sin(v + params.w) * sin(params.i)); - - /* calculate the ecliptic latitude and longitude here */ - lonecl = atan2( yh, xh); - latecl = atan2( zh, sqrt( xh*xh + yh*yh)); - - /* calculate a number of perturbations */ - Ls = sunParams.M + sunParams.w; - Lm = params.M + params.w + params.N; - D = Lm - Ls; - F = Lm - params.N; - - lonecl += fgDegToRad( - - 1.274 * sin (params.M - 2*D) // the Evection - + 0.658 * sin (2 * D) // the Variation - - 0.186 * sin (sunParams.M) // the yearly variation - - 0.059 * sin (2*params.M - 2*D) - - 0.057 * sin (params.M - 2*D + sunParams.M) - + 0.053 * sin (params.M + 2*D) - + 0.046 * sin (2*D - sunParams.M) - + 0.041 * sin (params.M - sunParams.M) - - 0.035 * sin (D) // the Parallactic Equation - - 0.031 * sin (params.M + sunParams.M) - - 0.015 * sin (2*F - 2*D) - + 0.011 * sin (params.M - 4*D) - ); /* Pheeuuwwww */ - latecl += fgDegToRad( - - 0.173 * sin (F - 2*D) - - 0.055 * sin (params.M - F - 2*D) - - 0.046 * sin (params.M + F - 2*D) - + 0.033 * sin (F + 2*D) - + 0.017 * sin (2 * params.M + F) - ); /* Yep */ - - r += ( - - 0.58 * cos(params.M - 2*D) - - 0.46 * cos(2*D) - ); /* Ok! */ - - xg = r * cos(lonecl) * cos(latecl); - yg = r * sin(lonecl) * cos(latecl); - zg = r * sin(latecl); - - xe = xg; - ye = yg * cos(ecl) - zg * sin(ecl); - ze = yg * sin(ecl) + zg * cos(ecl); - - result.RightAscension = atan2(ye, xe); - result.Declination = atan2(ze, sqrt(xe*xe + ye*ye)); - return result; + struct CelestialCoord + geocCoord, topocCoord; + + + double + eccAnom, ecl, lonecl, latecl, actTime, + xv, yv, v, r, xh, yh, zh, xg, yg, zg, xe, ye, ze, + Ls, Lm, D, F, mpar, gclat, rho, HA, g; + + struct fgAIRCRAFT *a; + struct fgFLIGHT *f; + + a = ¤t_aircraft; + f = &a->flight; + +/* calculate the angle between ecliptic and equatorial coordinate system */ + actTime = fgCalcActTime(t); + ecl = fgDegToRad(23.4393 - 3.563E-7 * actTime); // in radians of course + + /* calculate the eccentric anomaly */ + eccAnom = fgCalcEccAnom(params.M, params.e); + + /* calculate the moon's distance (d) and true anomaly (v) */ + xv = params.a * ( cos(eccAnom) - params.e); + yv = params.a * ( sqrt(1.0 - params.e*params.e) * sin(eccAnom)); + v =atan2(yv, xv); + r = sqrt(xv*xv + yv*yv); + + /* estimate the geocentric rectangular coordinates here */ + xh = r * (cos(params.N) * cos(v + params.w) - sin(params.N) * sin(v + params.w) * cos(params.i)); + yh = r * (sin(params.N) * cos(v + params.w) + cos(params.N) * sin(v + params.w) * cos(params.i)); + zh = r * (sin(v + params.w) * sin(params.i)); + + /* calculate the ecliptic latitude and longitude here */ + lonecl = atan2( yh, xh); + latecl = atan2( zh, sqrt( xh*xh + yh*yh)); + + /* calculate a number of perturbations */ + Ls = sunParams.M + sunParams.w; + Lm = params.M + params.w + params.N; + D = Lm - Ls; + F = Lm - params.N; + + lonecl += fgDegToRad( + - 1.274 * sin (params.M - 2*D) // the Evection + + 0.658 * sin (2 * D) // the Variation + - 0.186 * sin (sunParams.M) // the yearly variation + - 0.059 * sin (2*params.M - 2*D) + - 0.057 * sin (params.M - 2*D + sunParams.M) + + 0.053 * sin (params.M + 2*D) + + 0.046 * sin (2*D - sunParams.M) + + 0.041 * sin (params.M - sunParams.M) + - 0.035 * sin (D) // the Parallactic Equation + - 0.031 * sin (params.M + sunParams.M) + - 0.015 * sin (2*F - 2*D) + + 0.011 * sin (params.M - 4*D) + ); /* Pheeuuwwww */ + latecl += fgDegToRad( + - 0.173 * sin (F - 2*D) + - 0.055 * sin (params.M - F - 2*D) + - 0.046 * sin (params.M + F - 2*D) + + 0.033 * sin (F + 2*D) + + 0.017 * sin (2 * params.M + F) + ); /* Yep */ + + r += ( + - 0.58 * cos(params.M - 2*D) + - 0.46 * cos(2*D) + ); /* Ok! */ + + xg = r * cos(lonecl) * cos(latecl); + yg = r * sin(lonecl) * cos(latecl); + zg = r * sin(latecl); + + xe = xg; + ye = yg * cos(ecl) - zg * sin(ecl); + ze = yg * sin(ecl) + zg * cos(ecl); + + + + + geocCoord.RightAscension = atan2(ye, xe); + geocCoord.Declination = atan2(ze, sqrt(xe*xe + ye*ye)); + + /* New since 25 december 1997 */ + /* Calculate the moon's topocentric position instead of it's geocentric! */ + + mpar = asin( 1 / r); /* calculate the moon's parrallax, i.e. the apparent size of the + (equatorial) radius of the Earth, as seen from the moon */ + gclat = FG_Latitude - 0.083358 * sin (2 * fgDegToRad( FG_Latitude)); + rho = 0.99883 + 0.00167 * cos(2 * fgDegToRad(FG_Latitude)); + + if (geocCoord.RightAscension < 0) + geocCoord.RightAscension += (2*M_PI); + + HA = t.lst - (3.8197186 * geocCoord.RightAscension); + + g = atan (tan(gclat) / cos( (HA / 3.8197186))); + + + + topocCoord.RightAscension = geocCoord.RightAscension - mpar * rho * cos(gclat) * sin(HA) / cos(geocCoord.Declination); + topocCoord.Declination = geocCoord.Declination - mpar * rho * sin(gclat) * sin(g - geocCoord.Declination) / sin(g); + return topocCoord; } diff --git a/Scenery/orbits.h b/Scenery/orbits.h index 2ce03b122..c51b305e4 100644 --- a/Scenery/orbits.h +++ b/Scenery/orbits.h @@ -40,6 +40,7 @@ struct SunPos { double xs; double ys; + double dist; }; struct OrbElements { @@ -63,6 +64,7 @@ struct CelestialCoord { double RightAscension; double Declination; double distance; + double magnitude; }; @@ -79,7 +81,10 @@ void fgSolarSystemUpdate(struct OrbElements *planets, struct fgTIME t); /* $Log$ -/* Revision 1.1 1997/10/25 03:16:10 curt -/* Initial revision of code contributed by Durk Talsma. +/* Revision 1.2 1997/12/30 16:36:52 curt +/* Merged in Durk's changes ... /* + * Revision 1.1 1997/10/25 03:16:10 curt + * Initial revision of code contributed by Durk Talsma. + * */ diff --git a/Scenery/planets.c b/Scenery/planets.c index b4e2bb164..4aeaf0c92 100644 --- a/Scenery/planets.c +++ b/Scenery/planets.c @@ -31,7 +31,7 @@ struct CelestialCoord fgCalculatePlanet(struct OrbElements planet, struct OrbElements theSun, - struct fgTIME t) + struct fgTIME t, int idx) { struct CelestialCoord result; @@ -40,7 +40,7 @@ struct CelestialCoord fgCalculatePlanet(struct OrbElements planet, SolarPosition; double - eccAnom, r, v, ecl, actTime, + eccAnom, r, v, ecl, actTime, R, s, ir, Nr, B, FV, ring_magn, xv, yv, xh, yh, zh, xg, yg, zg, xe, ye, ze; actTime = fgCalcActTime(t); @@ -77,18 +77,69 @@ struct CelestialCoord fgCalculatePlanet(struct OrbElements planet, xe = xg; ye = yg * cos(ecl) - zg * sin(ecl); - ze = yg * sin(ecl) + zg * cos(ecl); + ze = yg * sin(ecl) + zg * cos(ecl); + result.RightAscension = atan2(ye,xe); result.Declination = atan2(ze, sqrt(xe*xe + ye*ye)); + + + /* Let's calculate the brightness of the planet */ + R = sqrt ( xg*xg + yg*yg + zg*zg); + s = SolarPosition.dist; + FV = acos( (r*r + R*R - s*s) / (2*r*R)); + FV *= 57.29578; /* convert radians to degrees */ + switch(idx) + { + case 2: /* mercury */ + result.magnitude = -0.36 + 5*log10( r*R ) + 0.027 * FV + 2.2E-13 * pow(FV, 6); + break; + case 3: /*venus */ + result.magnitude = -4.34 + 5*log10( r*R ) + 0.013 * FV + 4.2E-07 * pow(FV,3); + break; + case 4: /* mars */ + result.magnitude = -1.51 + 5*log10( r*R ) + 0.016 * FV; + break; + case 5: /* Jupiter */ + result.magnitude = -9.25 + 5*log10( r*R ) + 0.014 * FV; + break; + case 6: /* Saturn */ + + ir = 0.4897394; + Nr = 2.9585076 + 6.6672E-7*actTime; + + B = asin ( sin (result.Declination) * cos(ir) - cos(result.Declination) * sin (ir) * sin (result.RightAscension - Nr)); + ring_magn = -2.6 * sin (abs(B)) + 1.2 * pow(sin(B),2); + result.magnitude = -9.0 + 5*log10( r*R ) + 0.044 * FV + ring_magn; + break; + case 7: /* Uranus */ + result.magnitude = -7.15 + 5*log10( r*R) + 0.001 * FV; + break; + case 8: /* Neptune */ + result.magnitude = -6.90 + 5*log10 (r*R) + 0.001 *FV; + break; + default: + printf("index %d out of range !!!!\n", idx); + } + printf("Geocentric dist %f\n" + "Heliocentric dist %f\n" + "Distance to the sun %f\n" + "Phase angle %f\n" + "Brightness %f\n", R, r, s, FV, result.magnitude); return result; } + /* $Log$ -/* Revision 1.2 1997/12/12 21:41:29 curt -/* More light/material property tweaking ... still a ways off. +/* Revision 1.3 1997/12/30 16:36:52 curt +/* Merged in Durk's changes ... /* + * Revision 1.2 1997/12/12 21:41:29 curt + * More light/material property tweaking ... still a ways off. + * * Revision 1.1 1997/10/25 03:16:10 curt * Initial revision of code contributed by Durk Talsma. * */ + + diff --git a/Scenery/planets.h b/Scenery/planets.h index dfbc35fe7..3d5df4650 100644 --- a/Scenery/planets.h +++ b/Scenery/planets.h @@ -29,15 +29,18 @@ struct CelestialCoord fgCalculatePlanet(struct OrbElements planet, struct OrbElements theSun, - struct fgTIME t); + struct fgTIME t, int idx); #endif /* PLANETS_H */ /* $Log$ -/* Revision 1.2 1997/12/12 21:41:30 curt -/* More light/material property tweaking ... still a ways off. +/* Revision 1.3 1997/12/30 16:36:53 curt +/* Merged in Durk's changes ... /* + * Revision 1.2 1997/12/12 21:41:30 curt + * More light/material property tweaking ... still a ways off. + * * Revision 1.1 1997/10/25 03:16:11 curt * Initial revision of code contributed by Durk Talsma. * diff --git a/Scenery/stars.c b/Scenery/stars.c index e74fcbcb6..31efca60a 100644 --- a/Scenery/stars.c +++ b/Scenery/stars.c @@ -167,11 +167,24 @@ void fgStarsInit() { /* Add the planets to all four display lists */ for ( j = 2; j < 9; j++ ) { pltPos = fgCalculatePlanet(pltOrbElements[j], - pltOrbElements[0], cur_time_params); + pltOrbElements[0], cur_time_params, j); printf("Planet found at %f (ra), %f (dec)\n", pltPos.RightAscension, pltPos.Declination); /* give the planets a temporary color, for testing purposes */ - xglColor3f( 1.0, 0.0, 0.0); + /* xglColor3f( 1.0, 0.0, 0.0); */ + + /* scale magnitudes to (0.0 - 1.0) */ + magnitude = (0.0 - pltPos.magnitude) / 5.0 + 1.0; + + /* scale magnitudes again so they look ok */ + if ( magnitude > 1.0 ) { magnitude = 1.0; } + if ( magnitude < 0.0 ) { magnitude = 0.0; } + magnitude = + magnitude * 0.7 + (((FG_STAR_LEVELS - 1) - i) * 0.1); + + + xglColor3f(magnitude, magnitude, magnitude); + xglVertex3f( 50000.0 * cos(pltPos.RightAscension) * cos(pltPos.Declination), 50000.0 * sin(pltPos.RightAscension) * @@ -265,9 +278,12 @@ void fgStarsRender() { /* $Log$ -/* Revision 1.21 1997/12/19 23:35:00 curt -/* Lot's of tweaking with sky rendering and lighting. +/* Revision 1.22 1997/12/30 16:36:53 curt +/* Merged in Durk's changes ... /* + * Revision 1.21 1997/12/19 23:35:00 curt + * Lot's of tweaking with sky rendering and lighting. + * * Revision 1.20 1997/12/15 23:55:03 curt * Add xgl wrappers for debugging. * Generate terrain normals on the fly. diff --git a/Scenery/sun.c b/Scenery/sun.c index 08768e6af..2630136f2 100644 --- a/Scenery/sun.c +++ b/Scenery/sun.c @@ -60,6 +60,7 @@ struct SunPos fgCalcSunPos(struct OrbElements params) coordinates (xs, ys) */ solarPosition.xs = r * cos(lonSun); solarPosition.ys = r * sin(lonSun); + solarPosition.dist = r; return solarPosition; } @@ -126,23 +127,27 @@ void fgSunInit() { void fgSunRender() { struct fgVIEW *v; struct fgTIME *t; - GLfloat color[4] = { 0.85, 0.65, 0.05, 1.0 }; - /* double x_2, x_4, x_8, x_10; */ - /* GLfloat ambient; */ - /* GLfloat amb[3], diff[3]; */ + struct fgLIGHT *l; + /* GLfloat color[4] = { 0.85, 0.65, 0.05, 1.0 }; */ + GLfloat color[4] = { 1.00, 1.00, 1.00, 1.00 }; + double x_2, x_4, x_8, x_10; + GLfloat ambient; + GLfloat amb[3], diff[3]; t = &cur_time_params; v = ¤t_view; + l = &cur_light_params; - /* x_2 = t->sun_angle * t->sun_angle; + x_2 = l->sun_angle * l->sun_angle; x_4 = x_2 * x_2; x_8 = x_4 * x_4; - x_10 = x_8 * x_2; */ + x_10 = x_8 * x_2; - /* ambient = (0.4 * pow(1.1, -x_10 / 30.0)); + ambient = (0.4 * pow(1.1, -x_10 / 30.0)); if ( ambient < 0.3 ) ambient = 0.3; if ( ambient > 1.0 ) ambient = 1.0; + amb[0] = 0.50 + ((ambient * 6.66) - 1.6); amb[1] = 0.00 + ((ambient * 6.66) - 1.6); amb[2] = 0.00 + ((ambient * 6.66) - 1.6); @@ -155,34 +160,40 @@ void fgSunRender() { diff[0] = 0.0; diff[1] = 0.0; diff[2] = 0.0; - diff[3] = 0.0; */ + diff[3] = 1.0; /* set lighting parameters */ - /* xglLightfv(GL_LIGHT0, GL_AMBIENT, color ); + xglLightfv(GL_LIGHT0, GL_AMBIENT, color ); xglLightfv(GL_LIGHT0, GL_DIFFUSE, color ); xglMaterialfv(GL_FRONT, GL_AMBIENT, amb); - xglMaterialfv(GL_FRONT, GL_DIFFUSE, diff); */ + xglMaterialfv(GL_FRONT, GL_DIFFUSE, diff); + xglMaterialfv(GL_FRONT, GL_SHININESS, diff); + xglMaterialfv(GL_FRONT, GL_EMISSION, diff); + xglMaterialfv(GL_FRONT, GL_SPECULAR, diff); - xglDisable( GL_LIGHTING ); + /* xglDisable( GL_LIGHTING ); */ xglPushMatrix(); xglTranslatef(xSun, ySun, zSun); xglScalef(1400, 1400, 1400); - xglColor4f(0.85, 0.65, 0.05, 1.0); + xglColor3f(0.85, 0.65, 0.05); xglCallList(sun_obj); xglPopMatrix(); - xglEnable( GL_LIGHTING ); + /* xglEnable( GL_LIGHTING ); */ } /* $Log$ -/* Revision 1.8 1997/12/19 23:35:00 curt -/* Lot's of tweaking with sky rendering and lighting. +/* Revision 1.9 1997/12/30 16:36:54 curt +/* Merged in Durk's changes ... /* + * Revision 1.8 1997/12/19 23:35:00 curt + * Lot's of tweaking with sky rendering and lighting. + * * Revision 1.7 1997/12/17 23:12:16 curt * Fixed so moon and sun display lists aren't recreate periodically. * diff --git a/Time/depend b/Time/depend index c51e503d2..04cc3f244 100644 --- a/Time/depend +++ b/Time/depend @@ -1,9 +1,11 @@ +event.o: event.c event.h fg_time.o: fg_time.c fg_time.h ../Include/types.h ../Flight/flight.h \ ../Flight/Slew/slew.h ../Flight/LaRCsim/ls_interface.h \ ../Flight/LaRCsim/../flight.h ../Include/constants.h \ ../Time/fg_time.h fg_timer.o: fg_timer.c fg_timer.h -sptest.o: sptest.c sunpos.h ../Include/types.h ../Include/constants.h +scheduler.o: scheduler.c +sidereal.o: sidereal.c ../Include/constants.h sunpos.o: sunpos.c sunpos.h ../Include/types.h fg_time.h \ ../Flight/flight.h ../Flight/Slew/slew.h \ ../Flight/LaRCsim/ls_interface.h ../Flight/LaRCsim/../flight.h \ -- 2.39.2