Hi Paul,
Your suggestion to use shaders and perhaps pass the light parameters 
using uniforms,
as Terry suggested, seems very reasonable to me. That way we can bypass 
the OSG
backend and manage the lights in our code. And it's probably simpler 
than messing
with the backend.

Of course, if there's a better or more elegant approach I would like to 
hear it.

Pavlos

Paul Martz wrote:
> As Robert said, using the fixed function pipe involves knowledge of  
> the backend. I believe multiple RenderStages would allow multiple  
> PositionalState, which means you could support more than the fixed  
> function limit for lights. This gets complex.
>
> It'd probably be easier to use shaders to do what you want, as they  
> aren't limited by the number of fixed function lights.
>
> Paul Martz
> Skew Matrix Software
>
>
> On Jan 2, 2008, at 5:06 PM, "Terry Welsh" <[EMAIL PROTECTED]> wrote:
>
>   
>> Hi Pavlos,
>> I'm interested in this topic too.  I haven't found the discussions in
>> the archives, but I probably just haven't picked the right search
>> keywords.
>>
>> My problem is very similar to yours I think.  I want to have a lot of
>> lights in my scene that falloff completely after a reasonable distance
>> and only apply 3 of them to each piece of geometry, probably choosing
>> them based on proximity and/or brightness.  I was thinking of only
>> activating lights 0, 1, and 2 and applying a cull callback to all my
>> geodes that would set different light positions and colors for each
>> geode that doesn't get culled.  The positions and colors would be
>> chosen from a much larger pool of lights that I store in my own data
>> structures outside of OpenGL and OSG.  I haven't figured out if I
>> would do this by setting parameters for OpenGL lights 0, 1, and 2, or
>> by setting custom shader Uniforms.
>>
>> Or there might be a much better approach I haven't thought of.
>> Anyway, I'd like to discuss this more or hear from anyone who has done
>> this....
>> - Terry
>>
>>     
>>> Message: 3
>>> Date: Wed, 2 Jan 2008 16:42:37 +0000
>>> From: "Robert Osfield" <[EMAIL PROTECTED]>
>>> Subject: Re: [osg-users] Selective lighting in OSG
>>> To: "OpenSceneGraph Users" <[email protected]>
>>> Message-ID:
>>>        <[EMAIL PROTECTED]>
>>> Content-Type: text/plain; charset=ISO-8859-1
>>>
>>> Hi Pavlos,
>>>
>>> I'm afraid handling more than max number of OpenGL lights is awkward
>>> in the OSG, it is possible but you'll need to learn quite a bit about
>>> the internals of how the rendering back end is setup and traversed.
>>> This topic has been discussed in the past on osg-users so have a bash
>>> at going through the email archives.
>>>
>>> Robert.
>>>
>>> On Jan 2, 2008 4:13 PM, Pavlos Mavridis <[EMAIL PROTECTED]> wrote:
>>>       
>>>> 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
>>     
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>   

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

Reply via email to