On Wed, Sep 22, 2010 at 7:13 PM, Don Leich <[email protected]> wrote:

> Hi Robert,
>
> I am now able to set an overall color for otherwise uncolored
> geometries with your suggested fix.  I still don't understand why this
> is correct.  I thought that the setStateSet would set a current color
> from it's material which is now OSG seemed to behave until 2.9.3.
>
>
>    osg::Group *primary   = gg.getPrimarySurface();
>    // This used to specify an overall color for otherwise uncolored
> geometries.
>    primary->setStateSet( _state.get() );
>
> That only sets a color if the color mode of the material is OFF. That is
the default for Material; perhaps you've set it to something different in
the material that's in _state?

>    // Now required to set the overall color directly in the Geode.
>    // Uses the material associated with the state.
>    osg::Geode *gg = dynamic_cast<osg::Geode*>(primary->getChild(0));
>    if ( gg )
>        _applyColor( gg,
> _material->getDiffuse(osg::Material::FRONT_AND_BACK));
>
> ...
>
> void Material::_applyColor( osg::Geode *gg, osg::Vec4 color )
> {
>    osg::ref_ptr<osg::Geode> geode = gg;
>    osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array( 1 );
>    (*colors)[ 0 ] = color;
>    for ( unsigned int ii=0; ii<geode->getNumDrawables(); ii++ )
>    {
>        osg::Geometry *geom =
> dynamic_cast<osg::Geometry*>(geode->getDrawable( ii ));
>        geom->setColorArray( colors.get() );
>        geom->setColorBinding( osg::Geometry::BIND_OVERALL );
>    }
> }
>
> It's always a good idea to set a color for a geometry unless you're sure
that your materials' color modes are OFF.

Tim

>
> -Don
>
>
>
> Robert Osfield wrote:
>
>> Hi Don,
>>
>> On Tue, Sep 21, 2010 at 12:13 AM, Don Leich <[email protected]> wrote:
>>
>>  I confirmed that the bug persists in today's SVN trunk.  In the example
>>> already supplied the overall color is not applied when normals are
>>> given as BIND_PER_PRIMITIVE.
>>>
>>
>>
>> I've just tested svn/trunk and 2.9.3 and can confirm that there is
>> different behaviour.
>>
>> I've also isolated the two geometries that use BIND_PER_PRIMITIVE and
>> they just use this binding for normals, but have no colour array
>> assigned at all.  So... they will be inheriting their colour from
>> other geometries in a completely undefined way.
>>
>> This to me doesn't look like a bug at all, but an issue with a
>> under-defined scene graph, and just by luck it's worked before.
>> Please assign colours to all the geometries that need it and then
>> re-test.
>>
>> Robert.
>>
>>
> _______________________________________________
> 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