Hi Manish,

I'm a bit confused a bit by your post, you seem to have included a lot
of code for what is potentially just a very simple question, so it
makes me wonder if you aren't asking something else...

To use the smoothing visitor you simple do:

  osgUtil::SmoothingVisitor sv;
  node->accept(sv);

Where node is your scene graph, be it one geode or a whole scene.

Robert.

On Tue, Nov 9, 2010 at 10:30 AM, manish Choudhary <[email protected]> wrote:
> Hi,
>
> How to calculate normal vector using the osg::smoothingVisitor ?
> Guide me by providing some example related to above question .
> I have to find normal for lightning effect. I have draw various model
> using triangle strip . Now i'm in need of finding normal.
>
> Here I'have attached some part of simple model of cube .
> Kindly help me what is the best way for me to finding normal here
>
>
> Some part of my code is :
> // front face of Cube
>        {
>
>
>   {
>                osg::Geometry* pGeo = new osg::Geometry;
>
>                        // add 4 vertices creating a quad
>                osg::Vec3Array* pVerts = new osg::Vec3Array(3);
>                (*pVerts)[0].set((*points1)[0].x() ,(*points1)[0].y() , 
> (*points1)[0].z());
>                (*pVerts)[1].set((*points1)[1].x() ,(*points1)[1].y() , 
> (*points1)[1].z());
>                (*pVerts)[2].set((*points1)[2].x() ,(*points1)[2].y() , 
> (*points1)[2].z());
>                pGeo->setVertexArray( pVerts );
>
>                // create a primitive set
>                osg::DrawElementsUInt* pPrimitiveSet = new 
> osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
>                pPrimitiveSet->push_back( 0 );
>                pPrimitiveSet->push_back( 1 );
>                pPrimitiveSet->push_back( 2 );
>                pGeo->addPrimitiveSet( pPrimitiveSet );
>
>                // create an arraw for texture coordinates
>                osg::Vec2Array* pTexCoords = new osg::Vec2Array( 3 );
>                (*pTexCoords)[0].set(  (*points2)[9].x() , (*points2)[9].y()  
> );
>            (*pTexCoords)[1].set(  (*points2)[8].x() , (*points2)[8].y()  );
>            (*pTexCoords)[2].set(  (*points2)[7].x() , (*points2)[7].y()  );
>                pGeo->setTexCoordArray( 0, pTexCoords );
>
>                // create geometry node that will contain all our drawables
>
>
>                geode->addDrawable( pGeo );
>
>                }
>
>                {
>                osg::Geometry* pGeo = new osg::Geometry;
>
>                        // add 4 vertices creating a quad
>                osg::Vec3Array* pVerts = new osg::Vec3Array(3);
>                (*pVerts)[0].set((*points1)[0].x() ,(*points1)[0].y() , 
> (*points1)[0].z());
>                (*pVerts)[1].set((*points1)[2].x() ,(*points1)[2].y() , 
> (*points1)[2].z());
>                (*pVerts)[2].set((*points1)[3].x() ,(*points1)[3].y() , 
> (*points1)[3].z());
>                pGeo->setVertexArray( pVerts );
>
>                // create a primitive set
>                osg::DrawElementsUInt* pPrimitiveSet = new 
> osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
>                pPrimitiveSet->push_back( 0 );
>                pPrimitiveSet->push_back( 1 );
>                pPrimitiveSet->push_back( 2 );
>                pGeo->addPrimitiveSet( pPrimitiveSet );
>
>                // create an arraw for texture coordinates
>                osg::Vec2Array* pTexCoords = new osg::Vec2Array( 3 );
>                (*pTexCoords)[0].set(  (*points2)[9].x() , (*points2)[9].y()  
> );
>            (*pTexCoords)[1].set(  (*points2)[7].x() , (*points2)[7].y()  );
>            (*pTexCoords)[2].set(  (*points2)[10].x() , (*points2)[10].y()  );
>                pGeo->setTexCoordArray( 0, pTexCoords );
>
>                // create geometry node that will contain all our drawables
>
>
>                geode->addDrawable( pGeo );
>
>                }
>
>
>
>
>        }
>
>
>
> //Side right face
>        {
>                {
>                osg::Geometry* pGeo = new osg::Geometry;
>
>                        // add 4 vertices creating a quad
>                osg::Vec3Array* pVerts = new osg::Vec3Array(3);
>                (*pVerts)[0].set((*points1)[1].x() ,(*points1)[1].y() , 
> (*points1)[1].z());
>                (*pVerts)[1].set((*points1)[5].x() ,(*points1)[5].y() , 
> (*points1)[5].z());
>                (*pVerts)[2].set((*points1)[6].x() ,(*points1)[6].y() , 
> (*points1)[6].z());
>                pGeo->setVertexArray( pVerts );
>
>                // create a primitive set
>                osg::DrawElementsUInt* pPrimitiveSet = new 
> osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
>                pPrimitiveSet->push_back( 0 );
>                pPrimitiveSet->push_back( 1 );
>                pPrimitiveSet->push_back( 2 );
>                pGeo->addPrimitiveSet( pPrimitiveSet );
>
>                // create an arraw for texture coordinates
>                osg::Vec2Array* pTexCoords = new osg::Vec2Array( 3 );
>                (*pTexCoords)[0].set(  (*points2)[6].x() , (*points2)[6].y()  
> );
>            (*pTexCoords)[1].set(  (*points2)[5].x() , (*points2)[5].y()  );
>            (*pTexCoords)[2].set(  (*points2)[4].x() , (*points2)[4].y()  );
>                pGeo->setTexCoordArray( 0, pTexCoords );
>
>                // create geometry node that will contain all our drawables
>
>
>                geode->addDrawable( pGeo );
>
>                }
>
>                {
>                osg::Geometry* pGeo = new osg::Geometry;
>
>                        // add 4 vertices creating a quad
>                osg::Vec3Array* pVerts = new osg::Vec3Array(3);
>                (*pVerts)[0].set((*points1)[1].x() ,(*points1)[1].y() , 
> (*points1)[1].z());
>                (*pVerts)[1].set((*points1)[6].x() ,(*points1)[6].y() , 
> (*points1)[6].z());
>                (*pVerts)[2].set((*points1)[2].x() ,(*points1)[2].y() , 
> (*points1)[2].z());
>                pGeo->setVertexArray( pVerts );
>
>                // create a primitive set
>                osg::DrawElementsUInt* pPrimitiveSet = new 
> osg::DrawElementsUInt( osg::PrimitiveSet::TRIANGLES, 0 );
>                pPrimitiveSet->push_back( 0 );
>                pPrimitiveSet->push_back( 1 );
>                pPrimitiveSet->push_back( 2 );
>                pGeo->addPrimitiveSet( pPrimitiveSet );
>
>                // create an arraw for texture coordinates
>                osg::Vec2Array* pTexCoords = new osg::Vec2Array( 3 );
>                (*pTexCoords)[0].set(  (*points2)[6].x() , (*points2)[6].y()  
> );
>            (*pTexCoords)[1].set(  (*points2)[4].x() , (*points2)[4].y()  );
>            (*pTexCoords)[2].set(  (*points2)[7].x() , (*points2)[7].y()  );
>                pGeo->setTexCoordArray( 0, pTexCoords );
>
>                // create geometry node that will contain all our drawables
>
>
>                geode->addDrawable( pGeo );
>
>                }
>
>
>
>
>        }
>
> ...
>
> Thank you!
>
> Cheers,
> manish
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=33603#33603
>
>
>
>
>
> _______________________________________________
> 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