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

