Hi Simon, Go have a dig in the LineSegmentIntersector.cpp implementation, it should be possible to get the index and ratios out.
Robert. On Tue, Sep 2, 2008 at 10:17 AM, Simon Notheis <[EMAIL PROTECTED]> wrote: > Hi Robert, > > When i pick e.g. a 3d model of a table my result looks like taht: > > intersection.ratio 0.298972 > intersection.localIntersectionPoint -37.4626 -162.331 25 > intersection.localIntersectionNormal -0 0 1 > intersection.getWorldIntersectionPoint() 2187.54 -1787.33 750 > intersection.getWorldIntersectionNormal() 0 0 1 > intersection.primitiveIndex 11 > BUT: > intersection.indexList.size() 0 > intersection.ratioList.size() 0 > > intersection.drawable.library/className osg::Geometry > geometry->getNumPrimitiveSets() 1 > geometry->getVertexArray()->getNumPrimitiveSets() 8 > > > Simon > > Robert Osfield schrieb: >> Hi Simon, >> >> The LineSegmentIntersector records the indices of the vertices of the >> primitive that has been hit. The >> LineSegmentIntersector::Intersection::indexList and ratioList provide >> the indices and barycentric coords. >> >> Robert. >> >> On Tue, Sep 2, 2008 at 8:54 AM, Simon Notheis <[EMAIL PROTECTED]> wrote: >>> Hi everyone, >>> >>> I want to use mouse events to pick an object of the 3D scene. Instead of >>> working with the intersection point, I want to find the nearest vertex >>> or edge of the polygon that was hit. >>> Until now I used code similar to the following one: >>> >>> // Get the hitlist by using osg::Viewer::computeIntersection(...) >>> const osgUtil::LineSegmentIntersector::Intersection& >>> intersection = *(hitlist.begin()) >>> osg::Geometry* geometry = intersection.drawable->asGeometry() >>> >>> Then i used intersection.indexList and the geometry's VertexArray to >>> iterate through all vertices to find the closest vertex (vx) wrt the >>> intersection point. >>> Then I calculated the angles between vx and the both neighbouring >>> vertices in the indexList to determine which one belongs to the closest >>> edge. Finally, the nodePath gave me the local=>world transformation. >>> >>> All of that only worked because we had some bad code to load/convert our >>> own scene format into OSG. This code generated seperate triangles or >>> quads, so actually I always hit a polygon with 3 or 4 vertices, what >>> made it easy to determinie the neighbours of vx. >>> >>> Now that we're using some optimization steps (e.g. triangle strips), I >>> can't use the above code (e.g. the indexList is empty). I tried to use >>> the geometry's IndexArray instead, but the problem is that without >>> knowing the exact primitive type, it is hard to determine which vertices >>> are the neighbouring ones to find the edge. E.g. in case of an triangle >>> strip I would have to check the last 2 and next 2 vertices in the >>> index/vertex list. Also the code won't work if the drawable can't be >>> cast to a Geometry. >>> >>> So my question is, if there's a more easy or flexible way to determine >>> the closest vertex and edge of the intersected polygon/primitve? >>> >>> Looking forward to your ideas or solutions, if something similar was >>> already discussed here..... >>> >>> Simon >>> >>> _______________________________________________ >>> 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 > _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

