From: ehofman Date: Fri, 9 Jan 2004 10:19:00 +0000 (+0000) Subject: Use the same coloring scheme for the moon and the sun, add a bit of light reflection... X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=17415424bf3f2942af5c21bdfda010f292c7e6ed;p=simgear.git Use the same coloring scheme for the moon and the sun, add a bit of light reflection to the moon --- diff --git a/simgear/scene/sky/moon.cxx b/simgear/scene/sky/moon.cxx index f5c81b3b..38ee5a64 100644 --- a/simgear/scene/sky/moon.cxx +++ b/simgear/scene/sky/moon.cxx @@ -34,6 +34,7 @@ #include #include +#include #include "sphere.hxx" #include "moon.hxx" @@ -140,7 +141,7 @@ ssgBranch * SGMoon::build( SGPath path, double moon_size ) { orb_state->enable( GL_COLOR_MATERIAL ); orb_state->setColourMaterial( GL_DIFFUSE ); orb_state->setMaterial( GL_AMBIENT, 0, 0, 0, 1.0 ); - orb_state->setMaterial( GL_EMISSION, 0, 0, 0, 1 ); + orb_state->setMaterial( GL_EMISSION, 0.1, 0.1, 0.1, 1 ); orb_state->setMaterial( GL_SPECULAR, 0, 0, 0, 1 ); orb_state->enable( GL_BLEND ); orb_state->enable( GL_ALPHA_TEST ); @@ -229,38 +230,31 @@ ssgBranch * SGMoon::build( SGPath path, double moon_size ) { // 90 degrees = moon rise/set // 180 degrees = darkest midnight bool SGMoon::repaint( double moon_angle ) { - if ( moon_angle * SGD_RADIANS_TO_DEGREES < 100 ) { - // else moon is well below horizon (so no point in repainting it) - - // x_10 = moon_angle^10 - double x_10 = moon_angle * moon_angle * moon_angle * moon_angle - * moon_angle * moon_angle * moon_angle * moon_angle * moon_angle - * moon_angle; - - float ambient = (float)(0.4 * pow (1.1, - x_10 / 30.0)); - if (ambient < 0.3) { ambient = 0.3; } - if (ambient > 1.0) { ambient = 1.0; } - - sgVec4 color; - sgSetVec4( color, - (ambient * 6.0) - 1.0, // minimum value = 0.8 - (ambient * 11.0) - 3.0, // minimum value = 0.3 - (ambient * 12.0) - 3.6, // minimum value = 0.0 - 0.5 ); - - // temp test, forces the color to always be white - // sgSetVec4( color, 1.0, 1.0, 1.0, 1.0 ); - - if (color[0] > 1.0) color[0] = 1.0; - if (color[1] > 1.0) color[1] = 1.0; - if (color[2] > 1.0) color[2] = 1.0; - - // cout << "color = " << color[0] << " " << color[1] << " " - // << color[2] << endl; - - float *ptr; - ptr = cl->get( 0 ); - sgCopyVec4( ptr, color ); + + if (prev_moon_angle != moon_angle) { + prev_moon_angle = moon_angle; + + float moon_factor = 4*cos(moon_angle); + + if (moon_factor > 1) moon_factor = 1.0; + if (moon_factor < -1) moon_factor = -1.0; + moon_factor = moon_factor/2 + 0.5; + + sgVec4 color; + color[1] = sqrt(moon_factor); + color[0] = sqrt(color[1]); + color[2] = moon_factor * moon_factor; + color[2] *= color[2]; + color[3] = 1.0; + + gamma_correct_rgb( color ); + + // cout << "color = " << color[0] << " " << color[1] << " " + // << color[2] << endl; + + float *ptr; + ptr = cl->get( 0 ); + sgCopyVec4( ptr, color ); } return true; diff --git a/simgear/scene/sky/moon.hxx b/simgear/scene/sky/moon.hxx index 7fc8f808..86968adb 100644 --- a/simgear/scene/sky/moon.hxx +++ b/simgear/scene/sky/moon.hxx @@ -46,6 +46,8 @@ class SGMoon { ssgVertexArray *halo_vl; ssgTexCoordArray *halo_tl; + double prev_moon_angle; + public: // Constructor