OSG: calculating sun position and angle to plan

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

Former-commit-id: 52cffd0d7250b81d41e826fb8d089d6d099d799d
Former-commit-id: be22466a615a106922fa56d9be33d215db88cbbb
This commit is contained in:
rvlander 2013-03-11 21:07:55 +00:00
parent 8ec3ca019f
commit e213e2442b
3 changed files with 17 additions and 2 deletions

View file

@ -227,7 +227,7 @@ bool SDScenery::LoadTrack(std::string strTrack)
if (pTrack)
{
pTrack->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
pTrack->getOrCreateStateSet()->setRenderBinDetails(TRACKBIN,"RenderBin");
_scenery->addChild(pTrack);
}
else

View file

@ -376,7 +376,18 @@ bool SDSun::reposition( osg::Vec3d p, double sun_angle)
//T2.makeTranslate(osg::Vec3(0, sun_dist, 0));
T1.makeTranslate(0, sun_dist, 0);
sun_transform->setMatrix(T1*DEC*RA);
osg::Matrix R = T1*DEC*RA;
sun_transform->setMatrix(R);
osg::Vec4f pos = R*osg::Vec4f(0.0,0.0,0.0,1.0);
sun_position = osg::Vec3f(pos._v[0],pos._v[1],pos._v[2]);
osg::Vec3f upos = osg::Vec3f(sun_position);
osg::Vec3f uplan = osg::Vec3f(sun_position._v[0],0.0,sun_position._v[2]);
upos.normalize();
uplan.normalize();
sun_angle_to_scene = acos(upos*uplan);
// Suncolor related things:
if ( prev_sun_angle != sun_angle )

View file

@ -37,6 +37,7 @@ class SDSun
double prev_sun_angle;
double sun_angle;
double sun_rotation;
double sun_angle_to_scene;
// used by reposition
double sun_right_ascension;
@ -44,6 +45,7 @@ class SDSun
double sun_dist;
double path_distance;
double sun_exp2_punch_through;
osg::Vec3f sun_position;
public:
@ -82,6 +84,8 @@ public:
void setSunDistance( double dist ) { sun_dist = dist; }
double getSunDistance() { return sun_dist; }
osg::Vec3f getSunPosition(){return sun_position;}
};
#endif // _OSGSUN_H_