Hi Sonya,

I faced the same challenge while back and was able to resolve it by using
the OpenGL selection buffer. Here it is described how:

http://www.opengl.org/archives/resources/faq/technical/selection.htm

Nick


On Sat, Jul 5, 2014 at 9:00 AM, Sonya Blade <[email protected]>
wrote:

> Dear All,
>
> I noticed that when one tries to pick an object from scene there is a
> critera for that,
> I directly started the example from osgPicking example shown at the
> officail Osg site.
> The code which generates the grids in scene are as follow, problem with
> this is that PickHandler
> doesn't detect each line as individual entity.
>
> I can understand the behaviour of having all the vertices and lines
> stuffed under the
> DrawImplementation to increase the performance and PickHandler not
> detecting them,
> But If you create each line as individual osg::Geometry then PickHandler
> must detect them
> which will result in obvious performance penalty.
>
> I tried both osgUtil::LineSegmentIntersector
> and view->computeIntersections(x,y,intersections)
> functions if any of them intersects with scene objects, but none of them
> worked.
>
> osg::Geode* CreateGrid(osg::Group* gr, int x, int y, int  step)
> {
>    osg::Geode* gode = new osg::Geode();
>
> for (int j=1; j<2000; j++)
> {
>    osg::Geometry* linesGeom = new osg::Geometry();
>     osg::Vec3Array* vertices = new osg::Vec3Array(100 );
>     for (int i=0;i<50 ;i++ )
>     {
>         (*vertices)[2*i].set(-100, step+i*10, 40);
>         (*vertices)[2*i+1].set(100, step+i*10, 40);
>     };
>
>     linesGeom->setVertexArray(vertices);
>     // set the colors as before, plus using the above
>        osg::Vec4Array* colors = new osg::Vec4Array;
>        colors->push_back(osg::Vec4(1.0f,1.0f,0.0f,1.0f));
>        linesGeom->setColorArray(colors);
>        linesGeom->setColorBinding(osg::Geometry::BIND_OVERALL);
>
>     // set the normal in the same way color.
>     osg::Vec3Array* normals = new osg::Vec3Array;
>     normals->push_back(osg::Vec3(0.0f,-1.0f,0.0f));
>     linesGeom->setNormalArray(normals);
>     linesGeom->setNormalBinding(osg::Geometry::BIND_OVERALL);
>
>     linesGeom->addPrimitiveSet(new
> osg::DrawArrays(osg::PrimitiveSet::LINES,0,100));
>     gode->addDrawable(linesGeom);
> }
>    return gode;
> }
>
> Regards,
>
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>


-- 
trajce nikolov nick
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to