©2004,2009 Jim E. Brooks http://www.palomino3d.org
[2009/05]
The class ShadowSceneGraph
is a facade over
the shadow algorithm implementation (osgShadow::MinimalShadowMap).
ShadowSceneGraph is itself a private implementation of
SceneGraph
which encompasses the entire scene-graph.
ShadowSceneGraph forms a separate graph containing
objects which either cast or receive shadows.
NodeSort
defines whether an object is a shadow caster or receiver.
SceneGraph::AttachObject(Object,NodeSort)
is the interface for attaching nodes.
SceneGraph will detect thru NodeSort if a node is a shadow caster/receiver,
and defer such nodes to ShadowSceneGraph.
osgShadow::ShadowedScene -> ShadowSceneGraph::mShadowRootNode -> shadowCasters shadowReceivers The reason for this arrangement is to override the stock OSG shaders attached to osgShadow::ShadowedScene.
Disabling casting shadows for parts of a 3D model can be done by calling ShadowSceneGraph::DisableShadows(Node). An example is jet exhaust which shouldn't cast shadows.
The current implementation, osgShadow::MinimalShadowMap, will malfunction if multiple shadow casters exist. ShadowSceneGraph will ignore NodeSort=SHADOW_CASTER if one already exists.
As it has the same BaseSceneGraph class as
SceneGraph,
ShadowSceneGraph maintains branch nodes containing shaders determined by NodeSort.
The shaders will render shadows if uni_shadowMode
is set.
uni_shadowMode
can be assigned UNI_SHADOW_SAMPLE1
or UNI_SHADOW_SAMPLE4
for super-sampling
which produces soft shadows
.
Last modified: Sat Nov 7 14:58:05 CST 2009