[osg-users] BumpMapping osgFX problem

Hugo Gomes mr.hugo.gomes at gmail.com
Wed Jul 2 02:37:50 PDT 2008


Hello,

im having problems with the BumpMapping osgFX, somehow it just seems it
doesn't light the model. Model is only responding to ambient light. Is there
any quirck im forgetting of doing ?

The osgfxbrowser example works fine, so its not a hardware problem...

Here is the code for the light setup:

    osg::ref_ptr<osg::Light> light = new osg::Light;
    light->setLightNum( 0 );
    light->setDiffuse( osg::Vec4( 1, 1, 1, 1 ) );
    light->setSpecular( osg::Vec4( 1, 1, 0.8f, 1 ) );
    light->setAmbient( osg::Vec4( 0.2f, 0.2f, 0.2f, 0.2f ) );
    light->setPosition( osg::Vec4( 10, -1, 0, 0 ) );

    root = new osg::LightSource;
    root->setLight( light.get() );
    root->setLocalStateSetModes();


Here is the code for the bump mapping FX node:

void ScenePlanet::generatePlanet()
{
    PlanetRotateCallback* rotate_cb;
    osg::Geode* planet_geode = new osg::Geode();

    osg::StateSet* planet_stateset = planet_geode->getOrCreateStateSet();

// get the textures according to the position that they were inserted at
    osg::Texture2D* texture = textures->at(0);
    osg::Texture2D* normal_map = textures->at(1);
// set them up
    planet_stateset->setMode(GL_LIGHTING, osg::StateAttribute::ON);
    planet_stateset->setTextureAttributeAndModes( 0, texture,
osg::StateAttribute::ON );
    planet_stateset->setTextureAttributeAndModes( 1, normal_map,
osg::StateAttribute::ON );

    osg::TessellationHints* hints = new osg::TessellationHints;

    hints->setDetailRatio(0.5f);
    planet_geode->addDrawable(
            new osg::ShapeDrawable(
                new osg::Sphere( osg::Vec3( 0.0f,0.0f,0.0f ), 5.0f ) )
            );

// set up the effects of the model
    osgFX::BumpMapping* bump_fx = new osgFX::BumpMapping();
    bump_fx->setEnabled( true );
    bump_fx->addChild( planet_geode );
    bump_fx->setNormalMapTextureUnit(1);
    bump_fx->setDiffuseTextureUnit(0);
    bump_fx->setLightNumber(0);

    bump_fx->prepareChildren();
    //bump_fx->setUpDemo();

// set up a transform to rotate the model
    osg::ref_ptr<osg::PositionAttitudeTransform> xform =
                                                new
osg::PositionAttitudeTransform();
    xform->setPosition( osg::Vec3( 1.5, 0, 1 ) );
    xform->setPivotPoint( osg::Vec3( 0, 0, 0 ) );

    rotate_cb = new PlanetRotateCallback;
    xform->setUpdateCallback( rotate_cb );
    xform->addChild( bump_fx );

    root->addChild( xform.get() );
}

Here is the code for the texture generation:

Diffuse Texture:


    osg_img->setImage( size, size, 1,
                       4, GL_RGBA, GL_UNSIGNED_BYTE,
                       writer.GetImageData(),
                       osg::Image::USE_NEW_DELETE );
    texture->setImage(osg_img);
    texture->setFilter(osg::Texture::MIN_FILTER,
osg::Texture::LINEAR_MIPMAP_LINEAR);
    texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
    texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
    texture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
    texture->setMaxAnisotropy( 8 );

    textures->push_back( texture );



Normal Texture:


    osg_normalmap_img->setImage( size, size, 1,
                                 4, GL_RGBA, GL_UNSIGNED_BYTE,
                                 writer.GetImageData(),
                                 osg::Image::USE_NEW_DELETE );
    normalmap_texture->setImage(osg_normalmap_img);
    normalmap_texture->setFilter(osg::Texture::MIN_FILTER,
osg::Texture::LINEAR_MIPMAP_LINEAR);
    normalmap_texture->setFilter(osg::Texture::MAG_FILTER,
osg::Texture::LINEAR);
    normalmap_texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
    normalmap_texture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
    normalmap_texture->setMaxAnisotropy(8);

    textures->push_back( normalmap_texture );
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080702/969a63be/attachment-0002.htm>


More information about the osg-users mailing list