OpenSceneGraph отбрасывает две тени в разные стороны. Как этого избежать? - PullRequest
0 голосов
/ 15 января 2019

Я недавно начал изучать источники света и тени в OpenSceneGraph, и одна проблема, с которой я сталкиваюсь, заключается в том, что когда я указываю свет на объект, тень отбрасывается в направлении распространения света, НО ТАКЖЕ в противоположном направлении.

enter image description here

Я использую технику отображения теней 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();

Как мне избежать этой второй нежелательной тени?

...