Hi,

I'm trying to set up an interior scene by using the model of Sibenik Cathedral, 
then filling it with 8 lights and shadows, but my efforts fall rather short so 
far. Without shadows the scene looks pretty much like everything is set up 
alright, but when I enable ShadowMap technique, not only do the walls turn all 
black, but the actual visible shadows look rather off too. Could anyone please 
take a look at my code and come up with any kind of suggestion regarding what I 
might be doing wrong? Any help greatly appreciated.

My IndoorScene class derived from ShadowedScene:

Code:
IndoorScene::IndoorScene()
{
        Group* sceneGroup = NULL;
        Node* sibenikNode = NULL;
        MatrixTransform* sibenikScaleXform = NULL;
        Geode* lightMarkerGeode = NULL;
        Group* lightGroup = NULL;
        StateSet* lightStateSet = NULL;
        LightSource* lightSources[8] = {NULL};
        ShadowMap* shadowMap = NULL;

        sceneGroup = new Group;

        sibenikNode = readNodeFile("sibenik.osg");

        Matrix sibenikScaleMatrix;
        sibenikScaleMatrix.makeScale(5.0f, 5.0f, 5.0f);
        sibenikScaleXform = new MatrixTransform;
        sibenikScaleXform->setMatrix(sibenikScaleMatrix);

        lightMarkerGeode = new Geode;
        lightMarkerGeode->addDrawable(new ShapeDrawable(new Sphere(Vec3f( 9.0f, 
 1.5f, 2.0f), 0.2f)));
        ...     lightMarkerGeode->getOrCreateStateSet()->setMode(GL_LIGHTING, 
StateAttribute::OFF);

        lightStateSet = sceneGroup->getOrCreateStateSet();

        Light* light1 = new Light;
        light1->setLightNum(0);
        light1->setPosition(Vec4f(9.0f, 1.5f, 1.75f, 1.0f));
        light1->setAmbient(Vec4f(0.5f, 0.5f, 0.5f, 1.0f));
        light1->setDiffuse(Vec4f(0.9f, 0.9f, 0.9f, 1.0f));
        light1->setConstantAttenuation(1.0f);
        lightSources[0] = new LightSource;
        lightSources[0]->setLight(light1);
        lightSources[0]->setLocalStateSetModes(StateAttribute::ON);
        lightSources[0]->setStateSetModes(*lightStateSet, StateAttribute::ON);

        ... (likewise for other lights) ...

        lightGroup = new Group;
        for (int i = 0; i < 8; i++)
        { // zoskupenie svetiel
                lightGroup->addChild(lightSources[i]);
        }

        shadowMap = new ShadowMap;
        setShadowTechnique(shadowMap);

        addChild(sceneGroup);
        sceneGroup->addChild(sibenikScaleXform);
        sibenikScaleXform->addChild(sibenikNode);
        sibenikScaleXform->addChild(lightMarkerGeode);
        sibenikScaleXform->addChild(lightGroup);
        
        Optimizer optimizer;
        optimizer.optimize(this);
}



Some screens for additional information - before shadows:

i . imgur . com / OMarm71.png

... and after Shadows:

i . imgur . com / dpKuxmW.png

Thank you!

Cheers,
Martin

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=52634#52634





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to