Hi Gordon, I have tried "terrainScaleMAT->getOrCreateStateSet()->setMode( GL_RESCALE_NORMAL, osg::StateAttribute::ON );" pattern but the result is same. There is no light effect on the terrain. I don't understand why?
I can change the light effect for the spheres by "lightMarkerGeode->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF or ON);" but same code for terrainnode isn't working. Thanks for all replies, Ümit UZUN 2008/7/19 Gordon Tomlinson <[EMAIL PROTECTED]>: > Does your terrain does have Normals ? > > Also you have a scale on your terrain (and a non-uniform scale at that) so > you WILL have to re-normalize your normals > > See http://www.vis-sim.com/osg/osg_faq_1.htm#f19 > > > ------------------------------ > *From:* [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] *On Behalf Of *Ümit Uzun > *Sent:* Saturday, July 19, 2008 6:11 AM > *To:* OpenSceneGraph Users > *Subject:* Re: [osg-users] osg::Light Simple Question ? > > Thanks for reply, > > I have converted terrain model to osg and opened it with text editor. osg > file format like below; > > > ------------------------------------------------------------------------------------------------------ > Group { > name "db" > nodeMask 0xffffffff > cullingActive TRUE > num_children 1 > Geode { > DataVariance STATIC > name "p1_437" > nodeMask 0xffffffff > cullingActive TRUE > StateSet { > UniqueID StateSet_0 > DataVariance STATIC > rendering_hint DEFAULT_BIN > renderBinMode INHERIT > GL_CULL_FACE ON > GL_LIGHTING OFF > Material { > ColorMode OFF > ambientColor 0.722 0.722 0.729 1 > diffuseColor 0.918 0.918 0.918 1 > specularColor 0.137 0.137 0.137 1 > emissionColor 0 0 0 1 > shininess 10 > } > CullFace { > UniqueID CullFace_1 > mode BACK > } > textureUnit 0 { > GL_TEXTURE_2D ON > Texture2D { > file "Cell 23.rgb" > wrap_s REPEAT > wrap_t REPEAT > wrap_r CLAMP > min_filter LINEAR > mag_filter LINEAR > maxAnisotropy 1 > borderColor 0 0 0 0 > borderWidth 0 > useHardwareMipMapGeneration TRUE > unRefImageDataAfterApply TRUE > internalFormatMode USE_IMAGE_DATA_FORMAT > resizeNonPowerOfTwo TRUE > } > TexEnv { > mode MODULATE > } > } > } > num_drawables 1 > Geometry { > DataVariance STATIC > useDisplayList TRUE > useVertexBufferObjects FALSE > PrimitiveSets 1 > { > DrawArrays QUADS 0 1600 > } > ...... > ..... > ...... > etc. > > ------------------------------------------------------------------------------------------------------ > > The TexEnv configuration have MODULATE mode. And I have changed it to > GL_MODULATE and GL_LIGHTING OFF to ON but there is no light effect on > terrain too. Then I deleted the TexEnv code block from the osg file format > then lighting not effect too. > > Peter, I added "lightSS->setMode(GL_LIGHTING,osg::StateAttribute::ON);" > pattern to my code but there is no change on the state of terrain too. > > Jean, if I write a node visitor for TexEnv, I thing there won't be any > change too, because of I have removed the TexEnv pattern from osg file > format but there wasn't any change on terrain. > > Any idea for lightiing the terrain like other components. > > Thanks for all advices. > Best Regards. > > Ümit UZUN > > 2008/7/19 Peter Wraae Marino <[EMAIL PROTECTED]>: > >> Hi, >> >> isnt there missing a >> *setMode*( GL_LIGHT1, osg::StateAttribute::ON ); >> >> for your terrain group? (or did I miss something?) >> >> Peter >> http://osghelp.com >> >> >> >> On Sat, Jul 19, 2008 at 12:39 AM, Ümit Uzun <[EMAIL PROTECTED]> >> wrote: >> >>> Hi All, >>> >>> I have an simple question about light the terrain model problem. I have >>> added two sphere(osg::Sphere) and one terrain(JoeDirt.flt) to the scene. I >>> am trying to effect the components of scene with green light. Although green >>> light could effected two of sphere, couldn't get success on the terrain >>> model. What can I do to effect the terrain with green light? I have tried >>> this code block; >>> >>> >>> -------------------------------------------------------------------------------------------------------------------------------------------------- >>> *int main() >>> { >>> osgViewer::Viewer viewer; >>> osg::ref_ptr<osg::Group> root (new osg::Group); >>> >>> osg::ref_ptr<osg::MatrixTransform> terrainScaleMAT (new >>> osg::MatrixTransform); >>> osg::Matrix terrainScaleMatrix; >>> terrainScaleMatrix.makeScale(0.05f,0.05f,0.03f); >>> >>> //Lighting 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; >>> >>> // create a local light. >>> osg::Vec4f lightPosition (osg::Vec4f(0.0,0.0,3.0,1.0f)); >>> osg::ref_ptr<osg::Light> myLight = new osg::Light; >>> myLight->setLightNum(1); >>> myLight->setPosition(lightPosition); >>> myLight->setAmbient(osg::Vec4(0.2f,0.2f,0.2f,1.0f)); >>> myLight->setDiffuse(osg::Vec4(0.1f,0.4f,0.1f,1.0f)); >>> myLight->setConstantAttenuation(1.0f); >>> lightSource1->setLight(myLight.get()); >>> >>> lightSource1->setLocalStateSetModes(osg::StateAttribute::ON); >>> lightSource1->setStateSetModes(*lightSS,osg::StateAttribute::ON); >>> >>> 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(-5.0f,-2.0f,3.0f),0.5f))); >>> >>> >>> //lightMarkerGeode->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::OFF); >>> >>> //Second light marker >>> lightMarkerGeode->addDrawable(new osg::ShapeDrawable(new >>> osg::Sphere(osg::Vec3f(2.0f,-1.0f,3.0f),0.5f))); >>> >>> //Loading the terrain node >>> osg::ref_ptr<osg::Node> terrainnode >>> (osgDB::readNodeFile("JoeDirt.flt")); >>> terrainScaleMAT->addChild(terrainnode.get()); >>> terrainScaleMAT->setMatrix(terrainScaleMatrix); >>> >>> //adding the terrain node to the root node >>> root->addChild(terrainScaleMAT.get()); >>> >>> //lighting code >>> root->addChild(lightGroup.get()); >>> //Adding the light marker geode >>> root->addChild(lightMarkerGeode.get()); >>> >>> // add the state manipulator >>> viewer.addEventHandler( new >>> osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); >>> >>> viewer.setSceneData( root.get() ); >>> >>> return (viewer.run()); >>> }* >>> >>> -------------------------------------------------------------------------------------------------------------------------------------------------- >>> >>> _______________________________________________ >>> osg-users mailing list >>> osg-users@lists.openscenegraph.org >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >>> >>> >> >> >> -- >> Regards, >> Peter Wraae Marino >> >> www.osghelp.com - OpenSceneGraph support site >> >> _______________________________________________ >> osg-users mailing list >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org