太陽のように動作するOpenSceneGraphで私の風景の上に点光源を設定する必要があります。私はすでに光を設定する方法を知っていて、それがこの方法で行うことができます。OSGでSun光源を作成
//LIGHT CODE ------------------------
osg::ref_ptr<osg::Group> lightGroup (new osg::Group);
osg::ref_ptr<osg::StateSet> lightSS (root->getOrCreateStateSet());
osg::ref_ptr<osg::LightSource> lightSource1 = new osg::LightSource;
osg::ref_ptr<osg::LightSource> lightSource2 = new osg::LightSource;
// create a local light.
float xCenter = tree->getRoot()->getXCenter();
float yCenter = tree->getRoot()->getYCenter();
osg::Vec4f lightPosition (osg::Vec4f(xCenter, yCenter,75.0,1.0f));
osg::ref_ptr<osg::Light> myLight = new osg::Light;
myLight->setLightNum(1);
myLight->setPosition(lightPosition);
myLight->setAmbient(osg::Vec4(0.8f,0.8f,0.8f,1.0f));
myLight->setDiffuse(osg::Vec4(0.1f,0.4f,0.1f,1.0f));
myLight->setConstantAttenuation(1.0f);
myLight->setDirection(osg::Vec3(0.0f, 0.0f, -1.0f));
lightSource1->setLight(myLight.get());
lightSource1->setLocalStateSetModes(osg::StateAttribute::ON);
lightSource1->setStateSetModes(*lightSS,osg::StateAttribute::ON);
//osg::StateSet* lightSS (lightGroup->getOrCreateStateSet());
lightGroup->addChild(lightSource1.get());
//Light markers: small spheres
osg::ref_ptr<osg::Geode> lightMarkerGeode (new osg::Geode);
lightMarkerGeode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3f(xCenter,yCenter,75),10.0f)));
//Tuto 9: lighting code
root->addChild(lightGroup.get());
//Tuto 9: Adding the light marker geode
root->addChild(lightMarkerGeode.get());
//LIGHTCODE END----------------
そして、これは、このようになります景観生成されます。上記の光で
風景(光は球で示されています)
この光源は実際には風景には影響しません。 問題は、太陽をエミュレートするためにどのような光の設定(すなわち、雰囲気、拡散など)が必要かということです。何が価値があるため、OSGフォーラム/メーリングリストは、通常の質問に答えることについてかなり良いです
太陽が向いていない方向性のあるライトはありませんか? –
これは方向性があり、その方向は風景の上から非常に高いところからまっすぐに下がっています。 –