[osg-users] Using multiples texture for a geometry

Florian GOLESTIN florian.golestin at gmail.com
Wed May 4 14:03:15 PDT 2016

Hi Robert,

I tried without the SmoothingVisitor but it does not change anything.

However during my tests today I put a "Axes" object (the axes.osgt model from the OpenSceneGraph examples) and some part of the texture on the block below the object just appeared but really dark.
So it it make me think that it's not a texture problem but maybe a light problem.

I've tried then to use a full ambiant light:


osg::ref_ptr<osg::Node> createLightSource( unsigned int num,
			      const osg::Vec3& trans,
			      const osg::Vec4& color )
  osg::ref_ptr<osg::Light> light = new osg::Light;
  light->setLightNum( num );
  light->setDiffuse( color );

  /* full scene lightened: */
  light->setSpecular(osg::Vec4(1,1,1,1));  // some examples don't have this one

  light->setPosition( osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f) );
  osg::ref_ptr<osg::LightSource> lightSource = new
  lightSource->setLight( light );
  osg::ref_ptr<osg::MatrixTransform> sourceTrans = new osg::MatrixTransform;
  sourceTrans->setMatrix( osg::Matrix::translate(trans) );
  sourceTrans->addChild( lightSource.get() );
  return sourceTrans;

int	main(int argc, char **argv)
  osg::ArgumentParser arguments(&argc,argv);
  osg::ref_ptr<osg::Group> root = new osg::Group;

  root->addChild(createLightSource(0, osg::Vec3(0, -2.0, 0), osg::Vec4(1.0, 1.0, 1.0, 1.0)));
  root->addChild(createLightSource(1, osg::Vec3(0, -16.0, 10.0), osg::Vec4(1.0, 1.0, 1.0, 1.0)));

  root->getOrCreateStateSet()->setMode( GL_LIGHT0, osg::StateAttribute::ON );
  root->getOrCreateStateSet()->setMode( GL_LIGHT1, osg::StateAttribute::ON );

Now the texture appears but are really dark such as there is no light.

Is it something related to states and inheritance?


Read this topic online here:

More information about the osg-users mailing list