/* -*-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. */ #ifndef OSGSHADOW_SHADOWEMAP #define OSGSHADOW_SHADOWEMAP 1 #include #include #include namespace osgShadow { /** ShadowedTexture provides an implementation of shadow textures.*/ class OSGSHADOW_EXPORT ShadowMap : public ShadowTechnique { public : ShadowMap(); ShadowMap(const ShadowMap& es, const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY); META_Object(osgShadow, ShadowMap); /** Set the texture unit that the shadow texture will be applied on.*/ void setTextureUnit(unsigned int unit); /** Get the texture unit that the shadow texture will be applied on.*/ unsigned int getTextureUnit() const { return _textureUnit; } /** Set the values for the ambient bias the shader will use.*/ void setAmbientBias(const osg::Vec2& ambientBias ); /** Get the values that are used for the ambient bias in the shader.*/ const osg::Vec2& getAmbientBias() const { return _ambientBias; } /** initialize the ShadowedScene and local cached data structures.*/ virtual void init(); /** run the update traversal of the ShadowedScene and update any loca chached data structures.*/ virtual void update(osg::NodeVisitor& nv); /** run the cull traversal of the ShadowedScene and set up the rendering for this ShadowTechnique.*/ virtual void cull(osgUtil::CullVisitor& cv); /** Clean scene graph from any shadow technique specific nodes, state and drawables.*/ virtual void cleanSceneGraph(); protected : virtual ~ShadowMap() {} osg::ref_ptr _camera; osg::ref_ptr _texgen; osg::ref_ptr _texture; osg::ref_ptr _stateset; unsigned int _textureUnit; osg::Vec2 _ambientBias; }; } #endif