[osg-users] Use of getCameraContainingPosition in OSG 3.4.0 (deprecated?)

Robert Osfield robert.osfield at gmail.com
Wed Jun 8 07:53:52 PDT 2016


Hi Rick.

I deprecated the function as the interpretation of how it should
behave is ambiguous for certain combinations of viewer Camera set up -
it simply can't guarantee to give the correct camera and x,y location
that you might be expecting as the interface doesn't provide enough
information for the function to work correctly in all cases as it has
to make assumptions for this missing data.  For simple viewers you
won't hit up against this but as you add more complex set ups set as
multiple overlapping cameras/distortion correction etc. exactly how a
mouse coordinate maps can varying widely.

The resolve the task of where a mouse coordinate maps
osgGA::GUEventAdapter now "has a" stack of  PointerData that hold how
the coordinate maps to the successive camera's in the stake.  If you
look at View you'll now see computeIntersections(..) methods that take
the GUIEventAdapter object directly rather than the orphaned x,y mouse
cooridnates.  This extra information enables the intersection
traversal correctly.

The PonterData holds the Camera information, if you look at the
View::computeIntersections(..) methods you'll see how it's used:

bool View::computeIntersections(const osgGA::GUIEventAdapter& ea,
osgUtil::LineSegmentIntersector::Intersections&
intersections,osg::Node::NodeMask traversalMask)
{
#if 1
    if (ea.getNumPointerData()>=1)
    {
        const osgGA::PointerData* pd =
ea.getPointerData(ea.getNumPointerData()-1);
        const osg::Camera* camera = pd->object.valid() ?
pd->object->asCamera() : 0;
        if (camera)
        {
            return computeIntersections(camera,
osgUtil::Intersector::PROJECTION, pd->getXnormalized(),
pd->getYnormalized(), intersections, traversalMask);
        }
    }
#endif
    return computeIntersections(ea.getX(), ea.getY(), intersections,
traversalMask);
}

The old code is still there as a fallback, the new bit is in the #if 1
#endif block.

I realise this will seem like an extra level of complexity, but for
most users they shouldn't be using the getCameraContainingPosition()
method directly and won't need to look at the PointerData either.
What the PointerData gives you is a robust way of getting the mouse
position relative to the active cameras.

Robert.







Robert.

On 8 June 2016 at 15:34, Rick Irons <Rick.Irons at mathworks.com> wrote:
> Hi,
>
>
>
> We are working on updating an application from OSG 3.0.1 to 3.4.0.  We have
> previously relied on getCameraContainingPosition() for selection, but now we
> are noticing that the function is marked as deprecated.  Can someone
> identify the deprecation plan for this API?  Is it still safe to use with
> the understanding that it will not be available in a future release?  Or,
> should we stop using the function now?  Our efforts to locate information on
> the deprecation of this API have not been successful.
>
>
>
> I am asking since the function is not behaving as expected following our
> update.  It is not clear if this behavior is due to the function no longer
> being supported or if some changes on our end are necessary to use the 3.4.0
> version of the API.
>
>
>
> Thanks for any help you can offer.
>
>
>
> Rick
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



More information about the osg-users mailing list