Selective lighting in OSG

Hello everyone,
what is the best way to define a light that affects not the entire 
scenegraph, but only a part of it?

For example I have a scene with many objects. Each one of them is lit by 
one light that is
different from one object to another. So the number of lights can be 
greater than GL_MAX_LIGHTS,
but since each object is lit only by one light, using opengl we could 
render the entire scene using
only one hardware light (lets say GL_LIGHT0), by resetting its 
parameters per object.

In the general case we can have more than one light per object and the 
lights can be
turned on and off per frame. So, what is the best way to do this in OSG?

I've tried passing the stateset of the sub-tree I want to light on a 
lighsource node using:
    lightsource->setStateSetModes(stateset,osg::StateAttribute::ON);
but it doesn't work as expected.

Also I've tried changing the stateset of the sub-tree I want to light 
directly,
without using any lighsource nodes:
    stateset->setAttributeAndModes(light, osg::StateAttribute::ON);
    stateset->setMode( GL_LIGHT0 + num, osg::StateAttribute::ON );
to enable a light and
    stateset->setAttributeAndModes(light, osg::StateAttribute::OFF);
to remove it.

The last method seems to work when the number of lights is constant per 
frame,
but it brakes when I try to dynamically turn on and off lights per 
frame. (perhaps
because I have to manually enable/disable the corresponding opengl lights?)

So, what is the best way to do this in OSG?

Thanks in advance

Pavlos Mavridis


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

Reply via email to