osgGA/CameraManipulator.cpp
void CameraManipulator::computeHomePosition(const osg::Camera *camera, bool useBoundingBox)
{
double dist = 3.5f * boundingSphere.radius();
if (camera)
{
// try to compute dist from frustum
double left,right,bottom,top,zNear,zFar;
if (camera->getProjectionMatrixAsFrustum(left,right,bottom,top,zNear,zFar))
{
double vertical2 = fabs(right - left) / zNear / 2.;
double horizontal2 = fabs(top - bottom) / zNear / 2.;
double dim = horizontal2 < vertical2 ? horizontal2 : vertical2;
double viewAngle = atan2(dim,1.);
dist = boundingSphere.radius() / sin(viewAngle);
}
}
// set home position
s