[osg-users] [build] using 3Ds Model in osgFX::BumpMapping and the Texture UV Coords for diffuse are not loaded

Christian Buchner christian.buchner at gmail.com
Tue Apr 5 09:10:59 PDT 2016


> I implemented the OSG BumpMap with no need to use shaders, as follow:
> osgFX::BumpMapping* bump_mapping = new osgFX::BumpMapping();

Hmm, by default this osgFX effect module will use shaders according to its
documentation:

"This effect defines a preferred technique which uses ARB vertex & fragment
programs, and a fallback technique which doesn't use fragment programs."

ARB fragment and vertex programs are some of the oldest types of
programmable shaders.

Christian


2016-04-04 18:12 GMT+02:00 Tiago Trocoli <trocolit2 at gmail.com>:

> Hi Tobias
>
> I implemented the OSG BumpMap with no need to use shaders, as follow:
>
> function source
>
>
> Code:
>
> void bumpMapOSG(osg::Geode *geode, osg::Group *group, osg::Image
> *normal_image, osg::Image *difuse_image, double scale_x,
>         double scale_y) {
>
>     if (!normal_image || !difuse_image) {
>         std::cout << "IMAGE FAIL" << std::endl;
>         exit(0);
>     }
>
>     osg::StateSet* bumpState = new osg::StateSet();
>
>     // Set textures
>     osg::ref_ptr<osg::Texture2D> normal_texture(new osg::Texture2D());
>     osg::ref_ptr<osg::Texture2D> difuse_texture(new osg::Texture2D());
>
>     normal_texture->setImage(normal_image);
>     normal_texture->setDataVariance(osg::Object::DYNAMIC);
>     normal_texture->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR_MIPMAP_LINEAR);
>     normal_texture->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture::LINEAR);
>     normal_texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
>     normal_texture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
>     normal_texture->setResizeNonPowerOfTwoHint(false);
>     normal_texture->setMaxAnisotropy(8.0f);
>
>     difuse_texture->setImage(difuse_image);
>     difuse_texture->setDataVariance(osg::Object::DYNAMIC);
>     difuse_texture->setFilter(osg::Texture::MIN_FILTER,
> osg::Texture::LINEAR_MIPMAP_LINEAR);
>     difuse_texture->setFilter(osg::Texture::MAG_FILTER,
> osg::Texture::LINEAR);
>     difuse_texture->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
>     difuse_texture->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
>     difuse_texture->setResizeNonPowerOfTwoHint(false);
>     difuse_texture->setMaxAnisotropy(8.0f);
>
>     const int TEXTURE_UNIT_NORMAL = 1;
>     const int TEXTURE_UNIT_DIFUSE = 2;
>
>     bumpState->setTextureAttributeAndModes(TEXTURE_UNIT_NORMAL,
> normal_texture, osg::StateAttribute::ON);
>     bumpState->setTextureAttributeAndModes(TEXTURE_UNIT_DIFUSE,
> difuse_texture, osg::StateAttribute::ON);
>
>     osg::ref_ptr<osg::Geometry> geometry =
> geode->asGeode()->getDrawable(0)->asGeometry();
>     osg::Vec2Array* tex_coord =
> dynamic_cast<osg::Vec2Array*>(geometry->getTexCoordArray(0));
>
>     for (unsigned int i = 0; i < tex_coord->getNumElements(); ++i)
>         (*tex_coord)[i].set((*tex_coord)[i].x() * scale_x,
> (*tex_coord)[i].y() * scale_y);
>
>     geometry->setStateSet(bumpState);
>     if (tex_coord) {
>         geometry->setTexCoordArray(TEXTURE_UNIT_NORMAL, tex_coord);
>         geometry->setTexCoordArray(TEXTURE_UNIT_DIFUSE, tex_coord);
>     } else {
>         std::cout << "MISS TEXTURE COORDINATE " << std::endl;
>         exit(0);
>     }
>
>     osgFX::BumpMapping* bump_mapping = new osgFX::BumpMapping();
>     bump_mapping->setEnabled(true);
>     bump_mapping->setLightNumber(0);
>     bump_mapping->setNormalMapTextureUnit(TEXTURE_UNIT_NORMAL);
>     bump_mapping->setDiffuseTextureUnit(TEXTURE_UNIT_DIFUSE);
>     bump_mapping->addChild(geode);
>     bump_mapping->prepareChildren();
>     group->addChild(bump_mapping);
>
> }
> [\code]
>
>
>
> Thank you!
>
> Cheers,
> Tiago
>
>
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=66724#66724
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20160405/6eb055f9/attachment-0003.htm>


More information about the osg-users mailing list