查看: 1945|回复: 4

关于osgkeyboardmouse鼠标选取的问题

[复制链接]

该用户从未签到

发表于 2009-5-19 18:01:32 | 显示全部楼层 |阅读模式
看了看OSG例子里面的osgkeyboardmouse,换了个自己的模型试了下,发现OSG这个例子里面鼠标选取的都是模型的叶结点,有没有办法让鼠标点取选中上一层的(模型本身的)组结点呢?


[ 本帖最后由 shypzms 于 2009-5-20 11:18 编辑 ]

该用户从未签到

发表于 2009-5-19 19:20:53 | 显示全部楼层
相交测试返回的osgUtil:: LineSegmentIntersector::Intersection结构体中,有一项nodePath,即是从根节点到当前叶节点所经过的所有节点的列表,可以从中判断和选取;其他Intersector与此类同

该用户从未签到

 楼主| 发表于 2009-5-20 12:07:54 | 显示全部楼层
试了一下,有个问题,比如下面这个模型
zy1.JPG
似乎OSG搜寻模型是找到模型没有多个子结点为止,修改了一下例子,让它每次点击都使上一级的模型加上边线。
结果是当点中o1或o8时VIFS01正常加上了边线,但是当点中o5时,似乎因为它的父结点VIFS05只有一个子结点于是OSG默认选中了更上一级的g2。有没有办法能仅选中VIFS一级的模型?
另外还有个问题,能不能检索到模型中名叫VIFS05的结点然后对他操作?有没有相关的例子?

[ 本帖最后由 shypzms 于 2009-5-20 12:09 编辑 ]

该用户从未签到

发表于 2009-5-20 12:25:26 | 显示全部楼层
“当点中o5时,似乎因为它的父结点VIFS05只有一个子节点于是OSG默认选中了更上一级的g2”,我不认为是这样,您可以再仔细检查一下自己的代码

按名称检索模型只需要简单地派生并应用NodeVisitor就可以了。老旧的NPS海军教程中有一个不妨一用的findNodeVisitor,可以参考一下

该用户从未签到

 楼主| 发表于 2009-5-22 16:53:14 | 显示全部楼层
node = (nodePath.size()>=1)?nodePath[nodePath.size()-1]:0;
parent = (nodePath.size()>=2)?dynamic_cast<osg::Group*>(nodePath[nodePath.size()-2]):0;
关于这两句,当什么时候nodePath.size()会为0呢,什么都没有选中的时候?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表