Hi Sukender,

I have searched about Normal Map and I see that to create normal map we need
2 models( high detailed polygon and low detailed polygon ) and then we can
create normal map using ray casting to find high detailed models normals at
intersected areas and then save this normal as a texture which name is
NormalMap.

But my question is, I want to create NormalMap the ocean waves. But I
haven't any models. Can I use Ocean wave texture to create bumpmapping? I
mean Can I create NormalMap from related wave texture?

If I send the my oceanwave texture to the createNormalMap function, then I
think. take back bluish normal map Sukender?

2008/11/26 Sukender <[EMAIL PROTECTED]>

> This is not related to GLSL, but if someone needs it, I quickly wrote a
> function that transforms a gray-scale bump map into a normal map:
> http://pvle.sourceforge.net/Doc/Html/Utility3D_8cpp-source.html#l00115
> Hope this may be useful to someone, even if the function is not that clean.
>
> Sukender
> PVLE - Lightweight cross-platform game engine -
> http://pvle.sourceforge.net/
>
>
> Le Wed, 26 Nov 2008 13:29:33 +0100, Morné Pistorius <
> [EMAIL PROTECTED]> a écrit:
>
> > Thanks,
> > I managed to implement a standard bump mapping shader in OSG.  Below is a
> > code snippet that does it if it might help someone else.  Shaders are
> > attached.
> >
> > Cheers,
> > Morne
> >
> > osg::Node * VOSGFloorGrid::CreateBumpMappedFloor()
> > {
> >   const int BASE_TEX_UNIT = 0;
> >   const int BUMP_TEX_UNIT = 1;
> >   const int TANGENT_ATR_UNIT = 6;
> >   const int BINORMAL_ATR_UNIT = 7;
> >
> >   osg::Geode* geode = new osg::Geode;
> >
> >   // set up the Geometry.
> >   osg::Geometry* geom = new osg::Geometry;
> >
> >   osg::Vec3 width, depth, topleft;
> >   topleft = osg::Vec3( -Size/2.0, -Size/2.0, 0.0 );
> >   width = osg::Vec3( Size, 0.0, 0.0 );
> >   depth = osg::Vec3( 0.0, Size, 0.0 );
> >
> >   osg::Vec3Array* coords = new osg::Vec3Array(4);
> >   (*coords)[0] = topleft;
> >   (*coords)[1] = topleft+width;
> >   (*coords)[2] = topleft+width+depth;
> >   (*coords)[3] = topleft+depth;
> >
> >   geom->setVertexArray(coords);
> >
> >   osg::Vec3Array* norms = new osg::Vec3Array(1);
> >   (*norms)[0] = osg::Vec3( 0.0, 1.0, 0.0 );
> >
> >   geom->setNormalArray(norms);
> >   geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
> >
> >   osg::Vec4Array* color = new osg::Vec4Array(1);
> >   (*color)[0] = osg::Vec4(1.0f,1.0f,1.0f,1.0f);
> >
> >   geom->setColorArray( color );
> >   geom->setColorBinding( osg::Geometry::BIND_OVERALL );
> >
> >   osg::Vec2Array* tcoords = new osg::Vec2Array(4);
> >   float n = 5.0f;  // no of times the texture is repeated
> >   (*tcoords)[0].set( 0.0f, 0.0f );
> >   (*tcoords)[1].set( n, 0.0f );
> >   (*tcoords)[2].set( n, n );
> >   (*tcoords)[3].set( 0.0f, n );
> >   geom->setTexCoordArray( BASE_TEX_UNIT, tcoords );
> >   geom->setTexCoordArray( BUMP_TEX_UNIT, tcoords );
> >
> >   geom->addPrimitiveSet( new osg::DrawArrays( osg::PrimitiveSet::QUADS, 0
> ,
> > coords->size() ) );
> >   geode->addDrawable( geom );
> >
> >   // Compute smoothed normals
> >   osgUtil::SmoothingVisitor smoother;
> >   smoother.apply( *geode );
> >
> >   // model texture
> >   osg::Texture2D * diffuse = new osg::Texture2D;
> >   diffuse->setImage( osgDB::readImageFile( m_sSystemPath +
> > "/Resources/Floor.tga" ) );
> >   diffuse->setWrap( osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT );
> >   diffuse->setWrap( osg::Texture2D::WRAP_T, osg::Texture2D::REPEAT );
> >   diffuse->setResizeNonPowerOfTwoHint( false );
> >   diffuse->setMaxAnisotropy( 8.0f );
> >
> >   // bump map texture
> >   osg::Texture2D * normal = new osg::Texture2D;
> >   normal->setImage( osgDB::readImageFile( m_sSystemPath +
> > "/Resources/FloorNormalMap.tga" ) );
> >   normal->setWrap( osg::Texture2D::WRAP_S, osg::Texture2D::REPEAT );
> >   normal->setWrap( osg::Texture2D::WRAP_T, osg::Texture2D::REPEAT );
> >   normal->setResizeNonPowerOfTwoHint( false );
> >   normal->setMaxAnisotropy( 8.0f );
> >
> >
> >
> //////////////////////////////////////////////////////////////////////////
> >   // Set up bump mapping shaders
> >
> >   // Load and compile shader source
> >   osg::Program * bump = new osg::Program;
> >   osg::Shader * bumpVertexShader = new osg::Shader( osg::Shader::VERTEX
> );
> >   osg::Shader * bumpPixelShader  = new osg::Shader( osg::Shader::FRAGMENT
> );
> >   bumpVertexShader->loadShaderSourceFromFile( m_sSystemPath +
> > "/Resources/bumpmap.vert" );
> >   bumpPixelShader->loadShaderSourceFromFile( m_sSystemPath +
> > "/Resources/bumpmap.frag" );
> >   bump->addShader( bumpVertexShader );
> >   bump->addShader( bumpPixelShader );
> >
> >   // Set up the shader stateset
> >   osg::StateSet * stateset = geode->getOrCreateStateSet();
> >   stateset->setTextureAttribute( BASE_TEX_UNIT, diffuse );
> >   stateset->setTextureAttribute( BUMP_TEX_UNIT, normal );
> >   stateset->setAttributeAndModes( bump, osg::StateAttribute::ON );
> >
> >   // Compute tangent space for geometry
> >   osg::ref_ptr< osgUtil::TangentSpaceGenerator > tsg = new
> > osgUtil::TangentSpaceGenerator;
> >   tsg->generate( geom, BUMP_TEX_UNIT );
> >   geom->setVertexAttribData( TANGENT_ATR_UNIT, osg::Geometry::ArrayData(
> > tsg->getTangentArray(), osg::Geometry::BIND_PER_VERTEX, GL_FALSE ) );
> >   geom->setVertexAttribData( BINORMAL_ATR_UNIT, osg::Geometry::ArrayData(
> > tsg->getBinormalArray(), osg::Geometry::BIND_PER_VERTEX, GL_FALSE ) );
> >   bump->addBindAttribLocation( "rm_Tangent", TANGENT_ATR_UNIT );
> >   bump->addBindAttribLocation( "rm_Binormal", BINORMAL_ATR_UNIT );
> >
> >   // Initialise Uniforms
> >   // Vertex shader
> >   osg::Vec3 Pos( 0, 0, 1000 );
> >   stateset->addUniform( new osg::Uniform( "fvLightPosition", Pos ) );
> >   stateset->addUniform( new osg::Uniform( "fvEyePosition", Pos ) );
> >   stateset->addUniform( new osg::Uniform( "bumpMap", BUMP_TEX_UNIT ) );
> >   stateset->addUniform( new osg::Uniform( "bumpMap", BUMP_TEX_UNIT ) );
> >
> >   // Fragment shader
> >   stateset->addUniform( new osg::Uniform( "fvAmbient", osg::Vec4( 0.36,
> > 0.36, 0.36, 1.0 ) ) );
> >   stateset->addUniform( new osg::Uniform( "fvSpecular", osg::Vec4( 0.49,
> > 0.49, 0.49, 1.0 ) ) );
> >   stateset->addUniform( new osg::Uniform( "fvDiffuse", osg::Vec4( 0.88,
> > 0.88, 0.88, 1.0 ) ) );
> >   stateset->addUniform( new osg::Uniform( "fSpecularPower", 100.0f ) );
> >
> >   return geode;
> > }
> >
> >
> >
> >
> > On Mon, Nov 24, 2008 at 5:02 PM, Alejandro Aguilar Sierra <
> > [EMAIL PROTECTED]> wrote:
> >
> >> Hi,
> >>
> >> I suggest you to see the osgshaders example (how osg deals with glsl)
> >> and then consult chapter 11 of the orange book (OpenGL shading
> >> language). You can find the shaders used in the book at
> >> http://3dshaders.com/
> >>
> >> Hope it helps.
> >>
> >> -- A.
> >>
> >> On Mon, Nov 24, 2008 at 10:39 AM, Morné Pistorius
> >> <[EMAIL PROTECTED]> wrote:
> >> > Hi all,
> >> > I added bump mapping to a model using osgFX::BumpMapping, but I need
> >> > something more flexible.  My model has two sided lighting and osgFX
> >> doesn't
> >> > support that.  Do we have GLSL shaders for bumpmapping in OSG?  I
> think
> >> that
> >> > would be easier to modify to suit my needs than the assembler coded
> >> shaders
> >> > used in osgFX.  If anyone has an example of applying normal mapping
> with
> >> > shaders in OSG, I would greatly appreciate it.
> >> > Thank you kindly,
> >> > Morne
> >> > _______________________________________________
> >> > 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
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



-- 
Ümit Uzun
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to