> 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 <trocol...@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@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org