1
0
Fork 0

Sky now tracks adjusted fog color so it blends well with terrain.

This commit is contained in:
curt 1998-08-12 21:40:44 +00:00
parent 3082eaf550
commit 0118151a84

View file

@ -126,7 +126,8 @@ void fgSkyColorsInit( void ) {
/* setup for the possibility of sunset effects */ /* setup for the possibility of sunset effects */
sun_angle = l->sun_angle * RAD_TO_DEG; sun_angle = l->sun_angle * RAD_TO_DEG;
fgPrintf( FG_ASTRO, FG_INFO, " Sun angle in degrees = %.2f\n", sun_angle); // fgPrintf( FG_ASTRO, FG_INFO,
// " Sun angle in degrees = %.2f\n", sun_angle);
if ( (sun_angle > 80.0) && (sun_angle < 100.0) ) { if ( (sun_angle > 80.0) && (sun_angle < 100.0) ) {
/* 0.0 - 0.4 */ /* 0.0 - 0.4 */
@ -262,7 +263,10 @@ void fgSkyRender( void ) {
fgFLIGHT *f; fgFLIGHT *f;
fgLIGHT *l; fgLIGHT *l;
fgVIEW *v; fgVIEW *v;
// float east_dot, dot, angle; float inner_color[4];
float middle_color[4];
float outer_color[4];
double diff;
int i; int i;
f = current_aircraft.flight; f = current_aircraft.flight;
@ -271,28 +275,19 @@ void fgSkyRender( void ) {
/* printf("Rendering the sky.\n"); */ /* printf("Rendering the sky.\n"); */
xglPushMatrix(); // calculate the proper colors
for ( i = 0; i < 3; i++ ) {
diff = l->sky_color[i] - l->adj_fog_color[i];
#ifdef INCLUDE_THIS_CODE /* printf("sky = %.2f fog = %.2f diff = %.2f\n",
/* calculate the angle between v->surface_to_sun and l->sky_color[j], l->adj_fog_color[j], diff); */
* v->surface_east. We do this so we can sort out the acos()
* ambiguity. I wish I could think of a more efficient way ... :-( */
east_dot = MAT3_DOT_PRODUCT(v->surface_to_sun, v->surface_east);
/* printf(" East dot product = %.2f\n", east_dot); */
/* calculate the angle between v->surface_to_sun and inner_color[i] = l->sky_color[i] - diff * 0.3;
* v->surface_south. this is how much we have to rotate the sky middle_color[i] = l->sky_color[i] - diff * 0.9;
* for it to align with the sun */ outer_color[i] = l->adj_fog_color[i];
dot = MAT3_DOT_PRODUCT(v->surface_to_sun, v->surface_south);
/* printf(" Dot product = %.2f\n", dot); */
if ( east_dot >= 0 ) {
angle = acos(dot);
} else {
angle = -acos(dot);
} }
/* printf(" Sky needs to rotate = %.3f rads = %.1f degrees.\n",
angle, angle * RAD_TO_DEG); */ xglPushMatrix();
#endif
/* Translate to view position */ /* Translate to view position */
xglTranslatef( v->cur_zero_elev.x, v->cur_zero_elev.y, v->cur_zero_elev.z ); xglTranslatef( v->cur_zero_elev.x, v->cur_zero_elev.y, v->cur_zero_elev.z );
@ -311,33 +306,33 @@ void fgSkyRender( void ) {
xglColor4fv(l->sky_color); xglColor4fv(l->sky_color);
xglVertex3f(0.0, 0.0, CENTER_ELEV); xglVertex3f(0.0, 0.0, CENTER_ELEV);
for ( i = 0; i < 12; i++ ) { for ( i = 0; i < 12; i++ ) {
xglColor4fv( inner_color[i] ); xglColor4fv( inner_color );
xglVertex3fv( inner_vertex[i] ); xglVertex3fv( inner_vertex[i] );
} }
xglColor4fv( inner_color[0] ); xglColor4fv( inner_color );
xglVertex3fv( inner_vertex[0] ); xglVertex3fv( inner_vertex[0] );
xglEnd(); xglEnd();
// Draw the middle ring // Draw the middle ring
xglBegin( GL_TRIANGLE_STRIP ); xglBegin( GL_TRIANGLE_STRIP );
for ( i = 0; i < 12; i++ ) { for ( i = 0; i < 12; i++ ) {
xglColor4fv( middle_color[i] ); xglColor4fv( middle_color );
/* printf("middle_color[%d] = %.2f %.2f %.2f %.2f\n", i, /* printf("middle_color[%d] = %.2f %.2f %.2f %.2f\n", i,
middle_color[i][0], middle_color[i][1], middle_color[i][2], middle_color[i][0], middle_color[i][1], middle_color[i][2],
middle_color[i][3]); */ middle_color[i][3]); */
// xglColor4f(1.0, 0.0, 0.0, 1.0); // xglColor4f(1.0, 0.0, 0.0, 1.0);
xglVertex3fv( middle_vertex[i] ); xglVertex3fv( middle_vertex[i] );
xglColor4fv( inner_color[i] ); xglColor4fv( inner_color );
/* printf("inner_color[%d] = %.2f %.2f %.2f %.2f\n", i, /* printf("inner_color[%d] = %.2f %.2f %.2f %.2f\n", i,
inner_color[i][0], inner_color[i][1], inner_color[i][2], inner_color[i][0], inner_color[i][1], inner_color[i][2],
inner_color[i][3]); */ inner_color[i][3]); */
// xglColor4f(0.0, 0.0, 1.0, 1.0); // xglColor4f(0.0, 0.0, 1.0, 1.0);
xglVertex3fv( inner_vertex[i] ); xglVertex3fv( inner_vertex[i] );
} }
xglColor4fv( middle_color[0] ); xglColor4fv( middle_color );
// xglColor4f(1.0, 0.0, 0.0, 1.0); // xglColor4f(1.0, 0.0, 0.0, 1.0);
xglVertex3fv( middle_vertex[0] ); xglVertex3fv( middle_vertex[0] );
xglColor4fv( inner_color[0] ); xglColor4fv( inner_color );
// xglColor4f(0.0, 0.0, 1.0, 1.0); // xglColor4f(0.0, 0.0, 1.0, 1.0);
xglVertex3fv( inner_vertex[0] ); xglVertex3fv( inner_vertex[0] );
xglEnd(); xglEnd();
@ -345,28 +340,25 @@ void fgSkyRender( void ) {
/* Draw the outer ring */ /* Draw the outer ring */
xglBegin( GL_TRIANGLE_STRIP ); xglBegin( GL_TRIANGLE_STRIP );
for ( i = 0; i < 12; i++ ) { for ( i = 0; i < 12; i++ ) {
xglColor4fv( outer_color[i] ); xglColor4fv( outer_color );
xglVertex3fv( outer_vertex[i] ); xglVertex3fv( outer_vertex[i] );
xglColor4fv( middle_color[i] ); xglColor4fv( middle_color );
xglVertex3fv( middle_vertex[i] ); xglVertex3fv( middle_vertex[i] );
} }
xglColor4fv( outer_color[0] ); xglColor4fv( outer_color );
xglVertex3fv( outer_vertex[0] ); xglVertex3fv( outer_vertex[0] );
xglColor4fv( middle_color[0] ); xglColor4fv( middle_color );
xglVertex3fv( middle_vertex[0] ); xglVertex3fv( middle_vertex[0] );
xglEnd(); xglEnd();
/* Draw the bottom skirt */ /* Draw the bottom skirt */
xglBegin( GL_TRIANGLE_STRIP ); xglBegin( GL_TRIANGLE_STRIP );
xglColor4fv( outer_color );
for ( i = 0; i < 12; i++ ) { for ( i = 0; i < 12; i++ ) {
xglColor4fv( l->adj_fog_color );
xglVertex3fv( bottom_vertex[i] ); xglVertex3fv( bottom_vertex[i] );
xglColor4fv( outer_color[i] );
xglVertex3fv( outer_vertex[i] ); xglVertex3fv( outer_vertex[i] );
} }
xglColor4fv( l->adj_fog_color );
xglVertex3fv( bottom_vertex[0] ); xglVertex3fv( bottom_vertex[0] );
xglColor4fv( outer_color[0] );
xglVertex3fv( outer_vertex[0] ); xglVertex3fv( outer_vertex[0] );
xglEnd(); xglEnd();
@ -375,9 +367,12 @@ void fgSkyRender( void ) {
/* $Log$ /* $Log$
/* Revision 1.7 1998/07/22 21:39:21 curt /* Revision 1.8 1998/08/12 21:40:44 curt
/* Lower skirt tracks adjusted fog color, not fog color. /* Sky now tracks adjusted fog color so it blends well with terrain.
/* /*
* Revision 1.7 1998/07/22 21:39:21 curt
* Lower skirt tracks adjusted fog color, not fog color.
*
* Revision 1.6 1998/05/23 14:07:14 curt * Revision 1.6 1998/05/23 14:07:14 curt
* Use new C++ events class. * Use new C++ events class.
* *