Hello,
On 08/04/2014 11:18 AM, Sonya Blade wrote:
> Dear All,
>
> I'm experiencing very weird problem when using the polytope intersector.
> Since there is not any explicit example on how
> to use polytope example with rectangular selection I use osgPick example in
> OSG and modify the codes to suit my need.
The canonical example for PolytopeIntersector is osgkeyboardmouse which shows
one possible usage.
> Normally the below code picks the objects on scene but shows that 400 picked
> objects which is not correct and far beyond of
> scene object range where that I have, I only have 5-6 object in scene,
As Sebastian Messerschmidt has suggested the PolytopeIntersector returns
intersections on
a per-primitive level and that also includes all primitives inside the polytope.
If you only want results on a higher level (e.g. per drawable) you can just
modify
the counting loop in you code to eliminate duplicate drawables.
Admittedly, the current behaviour is of PolytopeIntersector is not very space-
or time-efficient
for your use-case. I think a useful extension would be some kind of
"only-first-intersection"-flag
which should reduce the number of generated intersecions for cases like yours.
Cheers,
Peter
> What could be the reason of that malfunctioning ? I 'll appreciate your
> guidance on that !.
>
> case (osgGA::GUIEventAdapter::RELEASE):
> {
> if (btn_counter == 1 )
> {
> firstX = ea.getX(); firstY = ea.getY();
> btn_counter = 2;
> break;
> }
>
> if (btn_counter==2)
> {
> btn_counter = 1;
> osgUtil::PolytopeIntersector* polytop = new
> osgUtil::PolytopeIntersector( osgUtil::Intersector::WINDOW, firstX,firstY,
> ea.getX(), ea.getY() );
> osgUtil::IntersectionVisitor iv(polytop);
> view->getCamera()->accept(iv);
>
> int k;
> if (polytop->containsIntersections() )
> {
>
> osgUtil::PolytopeIntersector::Intersections
> intersections= polytop->getIntersections();
> osg::Vec3 screenpos =
> osg::Vec3(ea.getX(),ea.getY(),0);
>
>
> for(osgUtil::PolytopeIntersector::Intersections::iterator hitr =
> intersections.begin();
> hitr != intersections.end(); ++hitr)
> {
> k+=1;
> std::cout<< k << "----" <<
> hitr->drawable->getName()<< hitr->drawable->className()<<"\n" ;
>
> }
> }
> }
> }
> }
> }
> };
>
>
>
> _______________________________________________
> 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