void CameraInfo::setMatrices(osg::Camera* c)
{
view->set( c->getViewMatrix() );
- viewInverse->set( osg::Matrix::inverse( c->getViewMatrix() ) );
+ osg::Matrixd vi = c->getInverseViewMatrix();
+ viewInverse->set( vi );
projInverse->set( osg::Matrix::inverse( c->getProjectionMatrix() ) );
+ osg::Vec4d pos = osg::Vec4d(0., 0., 0., 1.) * vi;
+ worldPosCart->set( osg::Vec3f( pos.x(), pos.y(), pos.z() ) );
+ SGGeod pos2 = SGGeod::fromCart( SGVec3d( pos.x(), pos.y(), pos.z() ) );
+ worldPosGeod->set( osg::Vec3f( pos2.getLongitudeRad(), pos2.getLatitudeRad(), pos2.getElevationM() ) );
}
void CameraGroup::update(const osg::Vec3d& position,
bufferSize( new osg::Uniform("fg_BufferSize", osg::Vec2f() ) ),
projInverse( new osg::Uniform( "fg_ProjectionMatrixInverse", osg::Matrixf() ) ),
viewInverse( new osg::Uniform( "fg_ViewMatrixInverse",osg::Matrixf() ) ),
+ worldPosCart( new osg::Uniform( "fg_CameraPositionCart", osg::Vec3f() ) ),
+ worldPosGeod( new osg::Uniform( "fg_CameraPositionGeod", osg::Vec3f() ) ),
view( new osg::Uniform( "fg_ViewMatrix",osg::Matrixf() ) ),
du( new osg::Uniform( "fg_du",osg::Vec4() ) ),
dv( new osg::Uniform( "fg_dv",osg::Vec4() ) )
osg::ref_ptr<osg::Uniform> projInverse;
osg::ref_ptr<osg::Uniform> viewInverse;
osg::ref_ptr<osg::Uniform> view;
+ osg::ref_ptr<osg::Uniform> worldPosCart;
+ osg::ref_ptr<osg::Uniform> worldPosGeod;
osg::ref_ptr<osg::Uniform> du;
osg::ref_ptr<osg::Uniform> dv;
quadCam1->setProjectionMatrixAsOrtho2D(-1,1,-1,1);
quadCam1->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
ss = quadCam1->getOrCreateStateSet();
- ss->addUniform( _ambientFactor );
ss->addUniform( info->projInverse );
ss->addUniform( info->viewInverse );
ss->addUniform( info->view );
+ ss->addUniform( info->bufferSize );
+ ss->addUniform( info->worldPosCart );
+ ss->addUniform( info->worldPosGeod );
+ ss->addUniform( _ambientFactor );
ss->addUniform( _sunDiffuse );
ss->addUniform( _sunSpecular );
ss->addUniform( _sunDirection );
quadCam2->setProjectionMatrixAsOrtho2D(-1,1,-1,1);
quadCam2->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
ss = quadCam2->getOrCreateStateSet();
- ss->addUniform( _ambientFactor );
ss->addUniform( info->projInverse );
ss->addUniform( info->viewInverse );
ss->addUniform( info->view );
+ ss->addUniform( info->bufferSize );
+ ss->addUniform( info->worldPosCart );
+ ss->addUniform( info->worldPosGeod );
+ ss->addUniform( _ambientFactor );
ss->addUniform( _sunDiffuse );
ss->addUniform( _sunSpecular );
ss->addUniform( _sunDirection );
ss->addUniform( info->viewInverse );
ss->addUniform( info->view );
ss->addUniform( info->bufferSize );
+ ss->addUniform( info->worldPosCart );
+ ss->addUniform( info->worldPosGeod );
ss->addUniform( _ambientFactor );
ss->addUniform( _sunDiffuse );
ss->addUniform( _sunSpecular );