|
本帖最后由 lanxun1988 于 2011-1-9 22:48 编辑
问题:射线求交时候,
osgUtil:ineSegmentIntersector::Intersections intersections;
osg::NodePath& nodePath = intersection.nodePath;
这里的nodePath具体是指什么?我看了那个帮助文档说是从根节点到相交节点的路径上的所有节点的指针集合,但我用std::cout<<nodePath.size()<<std::endl;时候发现并不是这样,我做了一个测试如下:
一个很简单的场景:root---node节点(这里是那头牛);
问题1: 当我用射线求交时候,如果我鼠标点在牛身上,确实是选中了,但是nodePath.size()的结果是4,而不是2,这个场景不就2个节点么?为什么会是4呢?不应该是2么?
问题2:附录代码中的currentNodeParent节点是不是指向root?
问题3:我要实现的目标是这样的:场景是root---matrixtransform---node,然后用户每点种node一次,就让matrixtransform偏移一下。我的想法就是每选中一个node,让其作为currentNode,然后让currentNodeParent进行偏移工作(当然,转换的时候要转成osg::MatrixTransform类型),但是结果不对。。。。
附:
OSG编程指南书上pick中的一段代码是:
void pick(osg::ref_ptr<osgViewer::View> view,float x,float y)
{
osgUtil::LineSegmentIntersector::Intersections intersections;
if(view->computeIntersections(x,y,intersections))
{
osgUtil::LineSegmentIntersector::Intersection intersection = *intersections.begin();
osg::NodePath& nodePath = intersection.nodePath;
currentNode = (nodePath.size()>=1)?(nodePath[nodePath.size()-1]):0;
currentNodeParent = (nodePath.size()>=2)?dynamic_cast<osg::Group*> (nodePath[nodePath.size()-2]):0;
}
if(currentNode.get()&¤tNodeParent.get())
{
/* .....*/
}
}
谢谢各位老师~~~ |
|