Я недавно начал изучать источники света и тени в OpenSceneGraph, и одна проблема, с которой я сталкиваюсь, заключается в том, что когда я указываю свет на объект, тень отбрасывается в направлении распространения света, НО ТАКЖЕ в противоположном направлении.
Я использую технику отображения теней osgShadow :: ShadowMap. Ниже приведена соответствующая часть кода, который я использую:
osg::ref_ptr<osgShadow::ShadowedScene> root = new osgShadow::ShadowedScene;
// Create a light state set
osg::StateSet* state = root->getOrCreateStateSet();
state->setMode(GL_LIGHT2, osg::StateAttribute::ON);
osg::ref_ptr<osg::Light> light2 = new osg::Light();
light2->setAmbient(osg::Vec4(0.1, 0.1, 0.1, 0.5));
light2->setPosition(osg::Vec4(9.0, 5.0, -1.0, 1.0));
light2->setDirection(osg::Vec3(-1, 0, 0));
light2->setSpotCutoff(LIGHT_CUTOFF_ANGLE);
light2->setLightNum(2);
osg::ref_ptr<osg::LightSource> source2 = new osg::LightSource();
source2->setLight(light2.get());
osg::ref_ptr<osgShadow::ShadowMap> sm2 = new osgShadow::ShadowMap;
sm2->setLight(source2.get());
sm2->setTextureSize(osg::Vec2s(1024, 1024));
sm2->setTextureUnit(1);
root->setShadowTechnique(sm2.get());
root->addChild(source2.get());
// Start the viewer
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
return viewer.run();
Как мне избежать этой второй нежелательной тени?