Changeset 13110

Show
Ignore:
Timestamp:
05/20/13 21:24:34 (13 hours ago)
Author:
robert
Message:

Refactored the support for stereo and keystone RTT setup so that it can be applied to an existing Camera.

Location:
OpenSceneGraph/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgshadow/osgshadow.cpp

    r13108 r13110  
    743743    arguments.getApplicationUsage()->addCommandLineOption("--two-pass", "Use two-pass stencil for shadow volumes."); 
    744744    arguments.getApplicationUsage()->addCommandLineOption("--near-far-mode","COMPUTE_NEAR_USING_PRIMITIVES, COMPUTE_NEAR_FAR_USING_PRIMITIVES, COMPUTE_NEAR_FAR_USING_BOUNDING_VOLUMES, DO_NOT_COMPUTE_NEAR_FAR"); 
     745    arguments.getApplicationUsage()->addCommandLineOption("--max-shadow-distance","<float> Maximum distance that the shadow map should extend from the eye point."); 
    745746 
    746747    // construct the viewer. 
     
    860861        OSG_NOTICE<<std::endl; 
    861862    } 
     863 
     864    double distance; 
     865    if (arguments.read("--max-shadow-distance",distance)) 
     866    { 
     867        settings->setMaximumShadowMapDistance(distance); 
     868        OSG_NOTICE<<"MaximumShadowMapDistance set to "<<settings->getMaximumShadowMapDistance()<<std::endl; 
     869    } 
     870 
    862871     
    863872    osg::ref_ptr<osgShadow::MinimalShadowMap> msm = NULL; 
  • OpenSceneGraph/trunk/include/osgShadow/ShadowSettings

    r13108 r13110  
    6666        double getMinimumShadowMapNearFarRatio() const { return _minimumShadowMapNearFarRatio; } 
    6767 
     68        void setMaximumShadowMapDistance(double distance) { _maximumShadowMapDistance = distance; } 
     69        double getMaximumShadowMapDistance() const { return _maximumShadowMapDistance; } 
     70         
     71 
    6872        enum ShadowMapProjectionHint 
    6973        { 
     
    127131 
    128132        double                  _minimumShadowMapNearFarRatio; 
     133        double                  _maximumShadowMapDistance; 
    129134        ShadowMapProjectionHint _shadowMapProjectionHint; 
    130135        double                  _perspectiveShadowMapCutOffAngle; 
  • OpenSceneGraph/trunk/src/osgShadow/ShadowSettings.cpp

    r13108 r13110  
    1313 
    1414#include <osgShadow/ShadowSettings> 
     15#include <float.h> 
    1516 
    1617using namespace osgShadow; 
     
    2526    _textureSize(2048,2048), 
    2627    _minimumShadowMapNearFarRatio(0.05), 
     28    _maximumShadowMapDistance(DBL_MAX), 
    2729    _shadowMapProjectionHint(PERSPECTIVE_SHADOW_MAP), 
    2830    _perspectiveShadowMapCutOffAngle(2.0), 
     
    4749    _textureSize(ss._textureSize), 
    4850    _minimumShadowMapNearFarRatio(ss._minimumShadowMapNearFarRatio), 
     51    _maximumShadowMapDistance(ss._maximumShadowMapDistance), 
    4952    _shadowMapProjectionHint(ss._shadowMapProjectionHint), 
    5053    _perspectiveShadowMapCutOffAngle(ss._perspectiveShadowMapCutOffAngle), 
  • OpenSceneGraph/trunk/src/osgShadow/ViewDependentShadowMap.cpp

    r13109 r13110  
    800800    } 
    801801 
    802     //minZNear = osg::maximum(10.0,minZNear); 
    803     //maxZFar = osg::minimum(60.0,maxZFar); 
    804  
     802    // clamp the minZNear and maxZFar to those provided by ShadowSettings 
     803    maxZFar = osg::minimum(settings->getMaximumShadowMapDistance(),maxZFar); 
     804    if (minZNear>maxZFar) minZNear = maxZFar*settings->getMinimumShadowMapNearFarRatio(); 
     805 
     806    //OSG_NOTICE<<"maxZFar "<<maxZFar<<std::endl; 
     807     
    805808    Frustum frustum(&cv, minZNear, maxZFar); 
    806809