查看: 2909|回复: 7

osg框选问题

[复制链接]

该用户从未签到

发表于 2009-7-8 14:55:15 | 显示全部楼层 |阅读模式
目的:实现在场景中选择位于多边形内的节点。
实现:
1)实现画多边形的橡皮筋效果
2)写一个节点访问器,判断节点的包围盒球心是否在画的多边形内。如果在多边形内,则存储到一个容器中。
3)渲染选择的物体。
问题:如果场景中节点没有加MatrixTransform节点,该算法能正常使用。但是加了MatrixTransform节点后,这时算法失效。比如给MatrixTransform加了一个group节点,group节点有3个房子的子节点,将group加个平移,然后加到场景,这时单选其中某一个房子节点,算法失效。
原因:房子节点包围盒没有随着MatrixTransform节点的变化而变化。举例来说,我把房子平移后,房子的包围盒球心并没有平移。导致算法失效。换句话说,如果我在判断包围球球心是否在多边形内的时候,加上房子相应的平移量,则能达到目的。
求助:
1)osg中,有实现框选的好办法吗?上述办法,在框选的时候,每次都要遍历场景中的所有房子节点,这样肯定会影响效率。
2)如果要对上述算法进行改进的话,大家有什么建议吗?谢谢。

该用户从未签到

发表于 2009-7-8 22:55:17 | 显示全部楼层
包围球当然不能发生变化,它是针对局部坐标系的,否则场景的包围体层次就没有意义了。
所谓的框选就是用一个相交访问器和节点树计算而已,比如用PolytopeIntersector,或者您自行编写相交计算工具

该用户从未签到

 楼主| 发表于 2009-7-9 12:40:27 | 显示全部楼层
PolytopeIntersector应该是个不错的选择。QSG上那个Pick的例子中,就用到它了。
另外多说一句,用包围球的方式去实现选择,会带来很多后遗症。。。。

该用户从未签到

发表于 2011-11-10 20:47:19 | 显示全部楼层
我用PolytopeIntersector实现的框选,不过效率不是很高,大模型下计算会很耗时,不知道你实现得怎么样?用的什么方法呀?谢谢啦

该用户从未签到

发表于 2011-11-11 20:14:06 | 显示全部楼层
今天看了PolytopeIntersector源代码,感觉效率确实不是很高,主要是需要遍历所有的几何节点不知道有没有其他更好的方法?

该用户从未签到

发表于 2011-11-12 09:48:13 | 显示全部楼层
提高拣选效率的方法是使用具有空间层次结构的场景组织方法

该用户从未签到

发表于 2011-11-12 09:50:18 | 显示全部楼层
另外你如果要求精度不是很高,可以修改PolytopeIntersector让其在geometry一级采用包围盒检测而不是采用图元检测

该用户从未签到

发表于 2011-11-25 16:47:25 | 显示全部楼层
如何实现的啊,指点下偶,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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