Hi, I think I found the bug. Fixed implementation attached.
If you look at the implementation of the function osgViewer::View::computeIntersections() taking the nodepath argument, you'll see that it compute the LocalToWorld transformation using the complete given path. But this is incorrect if the last node of the path is a transformation. In which case the last transformation is applied twice before computing any intersections. I've currently copy/pasted the current implementation and changed it to a standalone function so that I could test and use it as a fixed version without modifying OSG code. See attachment. The two important lines are: const osg::NodePath shortPath(nodePath.begin(), nodePath.end() - 1); osg::Matrix matrix = osg::computeLocalToWorld(shortPath) * camera->getViewMatrix() * camera->getProjectionMatrix(); Robert, if you agree with these modifications, what should I do for them to be integrated back into the trunk? Cheers, Tanguy -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Tanguy Fautre Sent: Friday 28 November 2008 15:21 To: [email protected] Cc: Neil Groves Subject: Spam: [osg-users] View::computeIntersections with a node path Hi, Has anyone been able to successfully use osgViewer::View::computeIntersections() taking a node path argument on a non-trivial scenegraph? I currently have a fairly complex scenegraph, but I only want a small part of it to collide with computeIntersections. When I use computeIntersections without the nodepath, everything works perfectly. But as soon as I use the overload with the node path, I get an empty intersection set. I'm pretty sure the node path I'm giving is correct. Looking at the implementation of computeIntersections() with the node path, the only thing that puzzles me is the use of osg::computeWorldToLocal(nodePath) before computing the matrix inverse, I'm not sure I fully understand why this is the case. It seems to me the whole operation should be LocalToWorldMatrix * ViewMatrix * ProjectionMatrix instead. In any case, if anyone has a working example (which would show computeIntersections() with a node path is working correctly, or help finding the mistake I'm doing), it would be appreciated. Regards, Tanguy _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
computeIntersections.cpp
Description: computeIntersections.cpp
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

