|
osgEarth 2.1.1
|
Public Member Functions | |
| OverrideNearFarValuesCallback (double radius) | |
| virtual void | drawImplementation (osg::RenderInfo &renderInfo, const osg::Drawable *drawable) const |
Public Attributes | |
| double | _radius |
Definition at line 81 of file SkyNode.cpp.
| anonymous_namespace{SkyNode.cpp}::OverrideNearFarValuesCallback::OverrideNearFarValuesCallback | ( | double | radius | ) | [inline] |
Definition at line 83 of file SkyNode.cpp.
: _radius(radius) {}
| virtual void anonymous_namespace{SkyNode.cpp}::OverrideNearFarValuesCallback::drawImplementation | ( | osg::RenderInfo & | renderInfo, |
| const osg::Drawable * | drawable | ||
| ) | const [inline, virtual] |
Definition at line 86 of file SkyNode.cpp.
{
osg::Camera* currentCamera = renderInfo.getCurrentCamera();
if (currentCamera)
{
// Get the current camera position.
osg::Vec3 eye, center, up;
renderInfo.getCurrentCamera()->getViewMatrixAsLookAt( eye, center, up);
// Get the max distance we need the far plane to be at,
// which is the distance between the eye and the origin
// plus the distant from the origin to the object (star sphere
// radius, sun distance etc), and then some.
double distance = eye.length() + _radius*2;
// Save old values.
osg::ref_ptr<osg::RefMatrixd> oldProjectionMatrix = new osg::RefMatrix;
oldProjectionMatrix->set( renderInfo.getState()->getProjectionMatrix());
// Get the individual values
double left, right, bottom, top, zNear, zFar;
oldProjectionMatrix->getFrustum( left, right, bottom, top, zNear, zFar);
// Build a new projection matrix with a modified far plane
osg::ref_ptr<osg::RefMatrixd> projectionMatrix = new osg::RefMatrix;
//projectionMatrix->makeFrustum( left, right, bottom, top, zNear, distance);
//OE_INFO << "zNear=" << zNear << ", zFar=" << zFar << std::endl;
projectionMatrix->makeFrustum( left, right, bottom, top, zNear, distance );
renderInfo.getState()->applyProjectionMatrix( projectionMatrix.get());
// Draw the drawable
drawable->drawImplementation(renderInfo);
// Reset the far plane to the old value.
renderInfo.getState()->applyProjectionMatrix( oldProjectionMatrix.get() );
}
else
{
drawable->drawImplementation(renderInfo);
}
}
| double anonymous_namespace{SkyNode.cpp}::OverrideNearFarValuesCallback::_radius |
Definition at line 129 of file SkyNode.cpp.
1.7.3