Hi Gulianzhang,
We had a long thread discussing a similar problem a while ago.  As a
result I have been using shaders to apply different lights to
different parts of a scene, and it is working quite well:

http://www.mail-archive.com/[email protected]/msg05683.html

- Terry

>
> Message: 4
> Date: Thu, 28 Aug 2008 09:14:40 +0100
> From: "Robert Osfield" <[EMAIL PROTECTED]>
> Subject: Re: [osg-users] How does each object set its own light
>        parameters?
> To: "OpenSceneGraph Users" <[email protected]>
> Message-ID:
>        <[EMAIL PROTECTED]>
> Content-Type: text/plain; charset=ISO-8859-1
>
> Hi Gulianzhang (BTW, do you have a shorted name we could use?)
>
> Management of lights is complicated by the fact the lights are
> positional state i.e. they rely on specific values of the modelview
> matrix to position them in the right place so you can't them apply
> arbitrary times with arbitrary modelview matrices as they jump around
> in your scene.  The OSG solves this problem by handling positional
> state differently than the rest of OpenGL state - and positions it via
> the osg::LightSource, and once positioned you can only have one
> position for a whole stage in rendering (implemented via the
> osgUtil::RenderStage in the rendering backend).  This does mean that
> one light source can only be in one place at a time - you can't just
> reassign it as you wish.
>
> If you want to do the reassignment then you'll need to create a
> multiple stage rendering setup, and place objects you wish to
> associate with a particular light source into the same rendering
> stage.  In scene graph terms this would mean dividing your scene up so
> that you have a series of subgraphs each with the LightSource for that
> subgraph, and a callback above each subgraph that setups up the
> rendering backend.
>
> Robert.
>
> On Thu, Aug 28, 2008 at 8:01 AM, guilianzhang <[EMAIL PROTECTED]> wrote:
>> Hi,
>> I build a scene using osg which is composed of many objects and many lights,
>> I want to traverse each object to find the nearest  light away from it and
>> associate the light with GL_LIGHT0, so each object has its own GL_LIGHT0
>> parameters.
>> The problem is that the light is added to the scene by adding a
>> osg::LightSource, and the LightSource node then is added to the scene graph,
>> Must I add LightSources for each object to set its own light parameters? Is
>> there any better method?
>>
>> Thanks very much!
>>
>> ________________________________
>> guilianzhang
>> 2008-08-28
>> _______________________________________________
>> 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