fix bug with moon (not displayed )

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@4775 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 9c9e4e8ab1ca2c62b2479d0738a95bedec9bf2f1
Former-commit-id: 6d24f6677858bdf03e78ba1fbb920d06c4ee1050
This commit is contained in:
torcs-ng 2012-06-25 18:01:03 +00:00
parent fc9593fc9d
commit b5f3cdb47a
4 changed files with 30 additions and 32 deletions

View file

@ -44,7 +44,7 @@ static int grMoonOrbPostDraw( ssgEntity *e )
cGrMoon::cGrMoon( void ) cGrMoon::cGrMoon( void )
{ {
moon_transform = 0; moon_transform = 0;
prev_moon_angle= - 9999; prev_moon_angle= 9999;
} }
// Destructor // Destructor
@ -83,9 +83,8 @@ ssgBranch * cGrMoon::build( double moon_size )
ssgBranch *moon = grMakeSphere( moon_state, moon_cl, moon_size, 15, 15, ssgBranch *moon = grMakeSphere( moon_state, moon_cl, moon_size, 15, 15,
grMoonOrbPreDraw, grMoonOrbPostDraw ); grMoonOrbPreDraw, grMoonOrbPostDraw );
repaint( 0.0 );
moon_transform->addKid( moon ); moon_transform->addKid( moon );
repaint( 0.0 );
return moon_transform; return moon_transform;
} }
@ -103,16 +102,15 @@ bool cGrMoon::repaint( double angle )
moon_factor = (moon_factor / 2) + 0.5f; moon_factor = (moon_factor / 2) + 0.5f;
sgVec4 color; sgVec4 color;
/*color[1] = sqrt(moon_factor); color[1] = sqrt(moon_factor);
color[0] = sqrt(color[1]); color[0] = sqrt(color[1]);
color[2] = moon_factor * moon_factor; color[2] = moon_factor * moon_factor;
color[2] *= color[2]; color[2] *= color[2];
color[3] = 1.0;*/
color[0] = (float)pow(moon_factor, 0.25);
color[1] = (float)pow(moon_factor, 0.50);
color[2] = (float)pow(moon_factor, 4.0);
color[3] = 1.0; color[3] = 1.0;
//color[0] = (float)pow(moon_factor, 0.25);
//color[1] = (float)pow(moon_factor, 0.50);
//color[2] = (float)pow(moon_factor, 4.0);
//color[3] = 1.0;
grGammaCorrectRGB( color ); grGammaCorrectRGB( color );

View file

@ -108,8 +108,8 @@ void cGrSky::build( double h_radius, double v_radius,
sun->setSunDistance( sun_dist ); sun->setSunDistance( sun_dist );
pre_transform -> addKid( stars_transform ); pre_transform -> addKid( stars_transform );
pre_transform -> addKid( sun_transform );
pre_transform -> addKid( moon_transform ); pre_transform -> addKid( moon_transform );
pre_transform -> addKid( sun_transform );
pre_selector->addKid( pre_transform ); pre_selector->addKid( pre_transform );
pre_selector->clrTraversalMaskBits( SSGTRAV_HOT ); pre_selector->clrTraversalMaskBits( SSGTRAV_HOT );
@ -145,23 +145,24 @@ cGrSky::addCloud( ssgSimpleState *cloud_state, float span, float elevation, floa
bool cGrSky::repositionFlat( sgVec3 view_pos, double spin, double dt ) bool cGrSky::repositionFlat( sgVec3 view_pos, double spin, double dt )
{ {
int i; int i;
double angle, angle2; double angle;
double rotation, rotation2; double rotation;
sgCoord pos; sgCoord pos;
sgCoord pos2;
// Calc angles for rise/set effects // Calc angles for rise/set effects
sun->reposition( view_pos, 0 ); sun->reposition( view_pos, 0 );
moon->reposition( view_pos, 0 );
sun->getSunPosition ( & pos ); sun->getSunPosition ( & pos );
calc_celestial_angles( pos.xyz, view_pos, angle, rotation ); calc_celestial_angles( pos.xyz, view_pos, angle, rotation );
sun->setSunAngle( angle ); sun->setSunAngle( angle );
sun->setSunRotation( rotation ); sun->setSunRotation( rotation );
moon->reposition( view_pos, 0 ); moon->getMoonPosition ( & pos );
moon->getMoonPosition( & pos2 ); calc_celestial_angles( pos.xyz, view_pos, angle, rotation );
calc_celestial_angles( pos2.xyz, view_pos, angle2, rotation2 ); moon->setMoonAngle( angle );
moon->setMoonAngle( angle2 ); moon->setMoonRotation( rotation );
moon->setMoonRotation( rotation2 );
for ( i = 0; i < clouds.getNum (); i++ ) for ( i = 0; i < clouds.getNum (); i++ )
{ {
@ -170,11 +171,8 @@ bool cGrSky::repositionFlat( sgVec3 view_pos, double spin, double dt )
planets->reposition( view_pos, 0 ); planets->reposition( view_pos, 0 );
stars->reposition( view_pos, 0 ); stars->reposition( view_pos, 0 );
dome->repositionFlat( view_pos, sun->getSunRotation() ); dome->repositionFlat( view_pos, sun->getSunRotation() );
//dome->repositionFlat( view_pos, spin );
return true; return true;
} }
@ -190,8 +188,8 @@ bool cGrSky::reposition( sgVec3 view_pos, sgVec3 zero_elev, sgVec3 view_up, doub
for ( i = 0; i < clouds.getNum (); i++ ) for ( i = 0; i < clouds.getNum (); i++ )
clouds.get(i)->reposition( zero_elev, view_up, lon, lat, alt, dt ); clouds.get(i)->reposition( zero_elev, view_up, lon, lat, alt, dt );
sun->reposition( view_pos, angle);
moon->reposition(view_pos, angle); moon->reposition(view_pos, angle);
sun->reposition( view_pos, angle);
planets->reposition( view_pos, angle ); planets->reposition( view_pos, angle );
stars->reposition( view_pos, angle ); stars->reposition( view_pos, angle );
@ -212,13 +210,16 @@ bool cGrSky::repaint( sgVec4 sky_color, sgVec4 fog_color, sgVec4 cloud_color, do
dome->repaint( sky_color, fog_color, sol_angle, effective_visibility ); dome->repaint( sky_color, fog_color, sol_angle, effective_visibility );
moon->repaint();
sun->repaint( sol_angle, effective_visibility );
for ( i = 0; i < clouds.getNum (); i++ ) for ( i = 0; i < clouds.getNum (); i++ )
clouds.get(i)->repaint( cloud_color ); clouds.get(i)->repaint( cloud_color );
sun->repaint( sol_angle, effective_visibility );
moon->repaint( moon->getMoonAngle() );
planets->repaint( sol_angle, nplanets, planet_data ); planets->repaint( sol_angle, nplanets, planet_data );
stars->repaint( sol_angle, nstars, star_data ); stars->repaint( sol_angle, nstars, star_data );
} }
else else
{ {

View file

@ -170,6 +170,7 @@ public:
// 0 degrees = high noon // 0 degrees = high noon
// 90 degrees = moon rise/set // 90 degrees = moon rise/set
// 180 degrees = darkest midnight // 180 degrees = darkest midnight
bool repaint() { return repaint ( moon_angle ); }
bool repaint(double angle); bool repaint(double angle);
bool reposition(sgVec3 p, double moon_angle) bool reposition(sgVec3 p, double moon_angle)
@ -438,9 +439,7 @@ public:
void getSunPos(sgCoord* p) void getSunPos(sgCoord* p)
{ {
sgMat4 Xform; sun->getSunPosition( p);
sun_transform->getTransform(Xform);
sgSetCoord(p, Xform);
} }
// draw background portions of sky (do this before you draw rest of your scene). // draw background portions of sky (do this before you draw rest of your scene).

View file

@ -237,7 +237,7 @@ grInitBackground()
grSunDeclination, RAD2DEG(sunAscension)); grSunDeclination, RAD2DEG(sunAscension));
if ( grSunDeclination > 180 ) if ( grSunDeclination > 180 )
grMoonDeclination = 3.0 + (rand() % 10); grMoonDeclination = 3.0 + (rand() % 40);
else else
grMoonDeclination = (rand() % 270); grMoonDeclination = (rand() % 270);
@ -270,11 +270,11 @@ grInitBackground()
{ {
GfLogInfo(" Cloud cover : 3 layers\n"); GfLogInfo(" Cloud cover : 3 layers\n");
int wind = (rand() % 60) + 40; int wind = (rand() % 200) + 100;
cloudLayers[0] = TheSky->addCloud(buf, grSkyDomeDistance, 2550, cloudLayers[0] = TheSky->addCloud(buf, grSkyDomeDistance, 2550,
100 / domeSizeRatio, 100 / domeSizeRatio); 100 / domeSizeRatio, 100 / domeSizeRatio);
cloudLayers[0]->setSpeed(300); cloudLayers[0]->setSpeed(wind);
cloudLayers[0]->setDirection(45); cloudLayers[0]->setDirection(45);
GfLogInfo(" * layer 1 : speed=60, direction=45, texture=%s\n", buf); GfLogInfo(" * layer 1 : speed=60, direction=45, texture=%s\n", buf);