[osg-users] Easy way to pick nearest edge?
Simon Notheis
notheis at ira.uka.de
Wed Sep 3 00:13:08 PDT 2008
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 <notheis-LzjI1I19FwmELgA04lAiVw at public.gmane.org> 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 <notheis-LzjI1I19FwmELgA04lAiVw-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org> 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
>>>> osg-users-ZwoEplunGu0hajLcUbyfC12AsgEQdTeF-XMD5yJDbdMReXY1tMh2IBg at public.gmane.org
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users-ZwoEplunGu0hajLcUbyfC12AsgEQdTeF at public.gmane.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
More information about the osg-users
mailing list