MinimalDrawBoundsShadowMap
Go to the documentation of this file.
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*
* ViewDependentShadow codes Copyright (C) 2008 Wojciech Lewandowski
* Thanks to to my company http://www.ai.com.pl for allowing me free this work.
*/
#ifndef OSGSHADOW_MINIMALDRAWBOUNDSSHADOWMAP
#define OSGSHADOW_MINIMALDRAWBOUNDSSHADOWMAP 1
#include <osgShadow/MinimalShadowMap>
namespace osgShadow {
class OSGSHADOW_EXPORT MinimalDrawBoundsShadowMap
: public MinimalShadowMap
{
public :
typedef MinimalDrawBoundsShadowMap ThisClass;
typedef MinimalShadowMap BaseClass;
MinimalDrawBoundsShadowMap();
MinimalDrawBoundsShadowMap(
const MinimalDrawBoundsShadowMap& mdbsm,
const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
META_Object( osgShadow, MinimalDrawBoundsShadowMap );
protected:
virtual ~MinimalDrawBoundsShadowMap(void);
struct OSGSHADOW_EXPORT ViewData: public BaseClass::ViewData
{
osg::ref_ptr< osg::RefMatrix > _projection;
osg::Vec2s _boundAnalysisSize;
osg::ref_ptr< osg::Image > _boundAnalysisImage;
osg::ref_ptr< osg::Texture2D > _boundAnalysisTexture;
osg::ref_ptr< osg::Camera > _boundAnalysisCamera;
osg::observer_ptr< osg::Camera > _mainCamera;
void setShadowCameraProjectionMatrixPtr( osg::RefMatrix * projection )
{ _projection = projection; }
osg::RefMatrix * getShadowCameraProjectionMatrixPtr( void )
{ return _projection.get(); }
virtual void init( ThisClass * st, osgUtil::CullVisitor * cv );
virtual void cullShadowReceivingScene( );
virtual void createDebugHUD( );
virtual void recordShadowMapParams( );
virtual void cullBoundAnalysisScene( );
static osg::BoundingBox scanImage( const osg::Image * image, osg::Matrix m );
virtual void performBoundAnalysis( const osg::Camera& camera );
ViewData( void ): _boundAnalysisSize( 64, 64 ) {}
virtual void resizeGLObjectBuffers(unsigned int maxSize);
virtual void releaseGLObjects(osg::State* = 0) const;
};
friend struct ViewData;
META_ViewDependentShadowTechniqueData( ThisClass, ThisClass::ViewData );
struct CameraPostDrawCallback : public osg::Camera::DrawCallback {
CameraPostDrawCallback( ViewData * vd ): _vd( vd )
{
}
virtual void operator ()( const osg::Camera& camera ) const
{
if( _vd.valid() )
_vd->performBoundAnalysis( camera );
}
osg::observer_ptr< ViewData > _vd;
};
struct CameraCullCallback: public osg::Callback {
CameraCullCallback(ViewData * vd, osg::Callback * nc): _vd(vd), _nc(nc)
{
}
virtual bool run(osg::Object* object, osg::Object* data)
{
osgUtil::CullVisitor *cv = dynamic_cast< osgUtil::CullVisitor *>( data );
if( _nc.valid() )
_nc->run(object, data);
else
traverse(object, data);
if( cv )
_vd->recordShadowMapParams( );
return true;
}
protected:
osg::observer_ptr< ViewData > _vd;
osg::ref_ptr< osg::Callback > _nc;
};
};
} // namespace osgShadow
#endif
MinimalShadowMap
osgShadow::MinimalDrawBoundsShadowMap::~MinimalDrawBoundsShadowMap
virtual ~MinimalDrawBoundsShadowMap(void)
osgShadow::MinimalDrawBoundsShadowMap::MinimalDrawBoundsShadowMap
MinimalDrawBoundsShadowMap()
osgShadow::MinimalDrawBoundsShadowMap::ThisClass
MinimalDrawBoundsShadowMap ThisClass
Definition MinimalDrawBoundsShadowMap:30
osgShadow::MinimalDrawBoundsShadowMap::META_ViewDependentShadowTechniqueData
META_ViewDependentShadowTechniqueData(ThisClass, ThisClass::ViewData)
osgShadow::MinimalDrawBoundsShadowMap::MinimalDrawBoundsShadowMap
MinimalDrawBoundsShadowMap(const MinimalDrawBoundsShadowMap &mdbsm, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
osgShadow::MinimalDrawBoundsShadowMap::BaseClass
MinimalShadowMap BaseClass
Definition MinimalDrawBoundsShadowMap:32
osgShadow::MinimalDrawBoundsShadowMap::META_Object
META_Object(osgShadow, MinimalDrawBoundsShadowMap)
osgShadow::MinimalShadowMap::MinimalShadowMap
MinimalShadowMap()
osgUtil::CullVisitor
Definition CullVisitor:49
osg::Callback
Definition Callback:34
osg::Callback::traverse
bool traverse(osg::Object *object, osg::Object *data)
osg::Camera
Definition Camera:45
osg::CopyOp
Definition CopyOp:41
osg::CopyOp::SHALLOW_COPY
@ SHALLOW_COPY
Definition CopyOp:47
osg::Image
Definition Image:179
osg::Object
Definition Object:61
osg::State
Definition State:80
osg::Vec2s
Definition Vec2s:20
osg::observer_ptr< osg::Camera >
osg::ref_ptr
Definition ref_ptr:32
osgShadow
Definition ConvexPolyhedron:33
osg::BoundingBox
BoundingBoxd BoundingBox
Definition BoundingBox:257
osg::Matrix
Matrixd Matrix
Definition Matrix:27
osg::RefMatrix
RefMatrixd RefMatrix
Definition Matrix:28
OSGSHADOW_EXPORT
#define OSGSHADOW_EXPORT
Definition osgShadow/Export:39
osgShadow::MinimalDrawBoundsShadowMap::CameraCullCallback::run
virtual bool run(osg::Object *object, osg::Object *data)
Definition MinimalDrawBoundsShadowMap:110
osgShadow::MinimalDrawBoundsShadowMap::CameraCullCallback::_vd
osg::observer_ptr< ViewData > _vd
Definition MinimalDrawBoundsShadowMap:126
osgShadow::MinimalDrawBoundsShadowMap::CameraCullCallback::CameraCullCallback
CameraCullCallback(ViewData *vd, osg::Callback *nc)
Definition MinimalDrawBoundsShadowMap:106
osgShadow::MinimalDrawBoundsShadowMap::CameraCullCallback::_nc
osg::ref_ptr< osg::Callback > _nc
Definition MinimalDrawBoundsShadowMap:127
osgShadow::MinimalDrawBoundsShadowMap::CameraPostDrawCallback::_vd
osg::observer_ptr< ViewData > _vd
Definition MinimalDrawBoundsShadowMap:101
osgShadow::MinimalDrawBoundsShadowMap::CameraPostDrawCallback::CameraPostDrawCallback
CameraPostDrawCallback(ViewData *vd)
Definition MinimalDrawBoundsShadowMap:91
osgShadow::MinimalDrawBoundsShadowMap::ViewData
Definition MinimalDrawBoundsShadowMap:50
osgShadow::MinimalDrawBoundsShadowMap::ViewData::setShadowCameraProjectionMatrixPtr
void setShadowCameraProjectionMatrixPtr(osg::RefMatrix *projection)
Definition MinimalDrawBoundsShadowMap:58
osgShadow::MinimalDrawBoundsShadowMap::ViewData::releaseGLObjects
virtual void releaseGLObjects(osg::State *=0) const
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_projection
osg::ref_ptr< osg::RefMatrix > _projection
Definition MinimalDrawBoundsShadowMap:51
osgShadow::MinimalDrawBoundsShadowMap::ViewData::performBoundAnalysis
virtual void performBoundAnalysis(const osg::Camera &camera)
osgShadow::MinimalDrawBoundsShadowMap::ViewData::ViewData
ViewData(void)
Definition MinimalDrawBoundsShadowMap:78
osgShadow::MinimalDrawBoundsShadowMap::ViewData::cullBoundAnalysisScene
virtual void cullBoundAnalysisScene()
osgShadow::MinimalDrawBoundsShadowMap::ViewData::recordShadowMapParams
virtual void recordShadowMapParams()
osgShadow::MinimalDrawBoundsShadowMap::ViewData::getShadowCameraProjectionMatrixPtr
osg::RefMatrix * getShadowCameraProjectionMatrixPtr(void)
Definition MinimalDrawBoundsShadowMap:61
osgShadow::MinimalDrawBoundsShadowMap::ViewData::resizeGLObjectBuffers
virtual void resizeGLObjectBuffers(unsigned int maxSize)
osgShadow::MinimalDrawBoundsShadowMap::ViewData::cullShadowReceivingScene
virtual void cullShadowReceivingScene()
osgShadow::MinimalDrawBoundsShadowMap::ViewData::createDebugHUD
virtual void createDebugHUD()
osgShadow::MinimalDrawBoundsShadowMap::ViewData::init
virtual void init(ThisClass *st, osgUtil::CullVisitor *cv)
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_boundAnalysisCamera
osg::ref_ptr< osg::Camera > _boundAnalysisCamera
Definition MinimalDrawBoundsShadowMap:55
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_boundAnalysisSize
osg::Vec2s _boundAnalysisSize
Definition MinimalDrawBoundsShadowMap:52
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_boundAnalysisImage
osg::ref_ptr< osg::Image > _boundAnalysisImage
Definition MinimalDrawBoundsShadowMap:53
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_boundAnalysisTexture
osg::ref_ptr< osg::Texture2D > _boundAnalysisTexture
Definition MinimalDrawBoundsShadowMap:54
osgShadow::MinimalDrawBoundsShadowMap::ViewData::scanImage
static osg::BoundingBox scanImage(const osg::Image *image, osg::Matrix m)
osgShadow::MinimalDrawBoundsShadowMap::ViewData::_mainCamera
osg::observer_ptr< osg::Camera > _mainCamera
Definition MinimalDrawBoundsShadowMap:56
osgShadow::MinimalShadowMap::ViewData
Definition MinimalShadowMap:101
osg::Camera::DrawCallback
Definition Camera:595