Hello everyone, i spent my last weeks to find a reasonable cause concerning osgUtil::LineSegmentIntersector on some osgt file. In detail, i would like to identify objects in the scene, using line isector (ray casting) starting from a certain point with a ray of 3 meter length . Following the code i used for detecting object in front of camera (i'm using osg 3.5.3 and Oculus Rift device)
Code: osg::ref_ptr<osgUtil::LineSegmentIntersector> intersector = new osgUtil::LineSegmentIntersector(startPoint, endPoint); osgUtil::IntersectionVisitor iv(intersector.get()); //intersector->setIntersectionLimit(osgUtil::Intersector::LIMIT_NEAREST); //intersector->setPrecisionHint(osgUtil::Intersector::PrecisionHint::USE_FLOAT_CALCULATIONS); //for debugging: evaluation of visitor processing time osg::Timer_t timer_tstart = mGlobalHighResTimer->tick(); iv.setTraversalMask(vrGame::INTERACTIVE); subgraph->accept(iv); //for debugging: evaluation of visitor processing time osg::Timer_t timer_tend = mGlobalHighResTimer->tick(); double timer_tfinal = mGlobalHighResTimer->delta_m(timer_tstart, timer_tend); std::cout << " Collision Visitor Time Computed : " << std::to_string(timer_tfinal) << std::endl; This code works correctly in terms of dected object but some times i noticed low performance when camera points in a space region near the object but not on its geometry. I mean, if camera points the geometry of the object, performance is ok. When camera points near the object (on an empty region) but not on its geometry, performance drop down. Some numbers: When camera points on empty area near the object, Oculus passes from 90Hz to 45Hz framerate and the computation of subgraph->accept(iv); requires from 2.8 to 4 milliseconds for each frame. I also investigated on osgUtil::IntersectionVisitor class, and it seems that (in my specific situation), IntersectionVisitor::apply(osg::Transform& transform) needs from 2.8 to 4 ms computation time when processes the following code lines: // now push an new intersector clone transform to the new local oordinates push_clone(); traverse(transform); // pop the clone. pop_clone(); Another doubt is related to why, even if i set iv.setTraversalMask(0x0001001) for avoiding to process nodes which have that mask (and the investigated object has this mask), visitor continues to process at each frame something that requires a lot computation time. The object comes from blender (osgt export), and has One group as root, a MatrixTransform as child, a Geode as child and 3 drawables with 64K vertices on the whole. The osgt file has 18 Mbytes size My question is: Is there some solution I might adopt to improve these performances? Can you give me some suggestions? Thank you! Cheers, Andrea ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=75275#75275 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org