OK, I will take a look at the implementation to find out why the index/ratioLists are empty. At the moment I use a workaround that interprets the PrimitiveSet and the geometry's Index/VertexArray which seems to work with our scene generation code.
Tanks a lot, Simon Robert Osfield schrieb: > 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 osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org