forked from speed-dreams/speed-dreams-code
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:
parent
fc9593fc9d
commit
b5f3cdb47a
4 changed files with 30 additions and 32 deletions
|
@ -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 );
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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).
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue