added pssm shadow technic

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5479 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: e1ae413a954adee6b0dc52660478701db1f50d2f
Former-commit-id: 367a0ccb8aabf5255aec9824586e61a443e65554
This commit is contained in:
torcs-ng 2013-05-26 15:08:46 +00:00
parent 5218a98dd1
commit 7ff5ad2872

View file

@ -365,11 +365,10 @@ void SDRender::Init(tTrack *track)
m_scene->addChild(scenery->getScene());
m_scene->addChild(scenery->getBackground());
m_scene->setNodeMask(rcvShadowMask);
sceneGroup->addChild(m_scene);
//sceneGroup->addChild(scenery->getScene());
//m_CarRoot->addChild(cars->getCarsNode());
//m_CarRoot->setNodeMask(castShadowMask);
sceneGroup->addChild(m_CarRoot.get());
stateSet = new osg::StateSet;
stateSet = m_scene->getOrCreateStateSet();
stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
@ -453,26 +452,28 @@ void SDRender::ShadowedScene()
}
else if (SHADOW_TECHNIQUE == 2)
{
osg::ref_ptr<osgShadow::SoftShadowMap> vdsm = new osgShadow::SoftShadowMap;
vdsm->setLight(sunLight.get());
vdsm->setTextureSize(osg::Vec2s(4096, 4096));
vdsm->setTextureUnit(1);
osg::ref_ptr<osgShadow::SoftShadowMap> ssm = new osgShadow::SoftShadowMap;
ssm->setLight(sunLight.get());
ssm->setTextureSize(osg::Vec2s(2048, 2048));
ssm->setSoftnessWidth(1.0f);
shadowRoot = new osgShadow::ShadowedScene;
//osgShadow::ShadowSettings* settings = shadowRoot->getShadowSettings();
shadowRoot->setReceivesShadowTraversalMask(rcvShadowMask);
shadowRoot->setCastsShadowTraversalMask(castShadowMask);
shadowRoot->setShadowTechnique((vdsm.get()));
shadowRoot->setShadowTechnique((ssm.get()));
}
else if (SHADOW_TECHNIQUE == 3)
{
osg::ref_ptr<osgShadow::ShadowVolume> sv = new osgShadow::ShadowVolume;
sv->setDynamicShadowVolumes(TRUE);
sv->setDrawMode(osgShadow::ShadowVolumeGeometry::STENCIL_TWO_PASS);
osg::ref_ptr<osgShadow::ParallelSplitShadowMap> pssm =
new osgShadow::ParallelSplitShadowMap(NULL, 3);
pssm->setTextureResolution(2048);
pssm->setMinNearDistanceForSplits(0.25);
pssm->setMaxFarDistance(512.0);
pssm->setPolygonOffset(osg::Vec2(10.0f, 20.0f));
shadowRoot = new osgShadow::ShadowedScene;
//osgShadow::ShadowSettings* settings = shadowRoot->getShadowSettings();
shadowRoot->setReceivesShadowTraversalMask(rcvShadowMask);
shadowRoot->setCastsShadowTraversalMask(castShadowMask);
shadowRoot->setShadowTechnique((sv.get()));
shadowRoot->setShadowTechnique((pssm.get()));
}
shadowRoot->addChild(m_scene.get());