|
楼主 |
发表于 2010-12-8 18:41:38
|
显示全部楼层
我场景的根节点采用的是osgShadow::ShadowedScene类型
我附带了三个截图:
第一个截图是没有使用阴影的初始情况。我在初始情况下,没有调用ShadowedScene::setShadowTechnique,即没有给它阴影方式,因此得到的效果就是没有任何阴影的样子。这是我想要的效果。
第二个截图,是我在程序运行过程中,调用了ShadowedScene::setShadowTechnique,给它设置了一个ShadowMap对象过去,它产生了阴影,正常地投射到地面上了。但是这些建筑物的背光面怎么那么黑呢?(我的光源在右边,为无穷远处的白色光源)
第三个截图,是我在得到第二个截图之后,再次调用ShadowedScene::setShadowTechnique,以参数NULL传入。可以看到地面上的阴影不见了。但是建筑物的背光面还是那么的黑,并没有回到截图一的效果。
有人能够说说这其中的理由么?
我程序中有如下代码企图用来切换阴影的存在:
osgShadow::ShadowTechnique *pTechnique = m_pShadowedScene->getShadowTechnique();
if(pTechnique)
{
m_pShadowedScene->cleanSceneGraph();
m_pShadowedScene->dirty();
m_pShadowedScene->setShadowTechnique(NULL);
}
else
{
osg::ref_ptr<osgShadow::ShadowMap> pShadowMap = new osgShadow::ShadowMap;
pShadowMap->setTextureSize(osg::Vec2s(512, 512));
m_pShadowedScene->setShadowTechnique(pShadowMap.get());
}
上面的代码,是用来切换是否存在阴影的。 |
|