查看: 1696|回复: 5

请问层次包围盒在程序中如何构造啊,给个思路也行,多谢了

[复制链接]

该用户从未签到

发表于 2010-12-15 16:36:05 | 显示全部楼层 |阅读模式
关于层次包围盒的文章很多,算法也有,但就是不知道如何在程序中写,是给一个场景树单独再生成一个包围盒层次书吗?这个树该如何构造,如何用空间分解法生成二叉包围盒树呢?说是根据重心分解,但如何求重心。一到写代码就有点迷茫,恳请各位高手解答一下,有代码更好,没有代码给个详细点的思路也行啊,多谢了

该用户从未签到

发表于 2010-12-16 09:18:20 | 显示全部楼层
场景图的概念与包围体层次是可以很顺畅地结合在一起的,父节点的包围体总是正好囊括子节点的包围体,基于这一原则去构建就可以了

该用户从未签到

 楼主| 发表于 2010-12-16 10:52:38 | 显示全部楼层
谢谢您的解答!那请问用层次包围盒方法从上至下依次进行碰撞检测,是临时求各层节点的包围盒进行判断呢,还是需要单独建一个独立的层次包围盒数据结构类,场景中某节点矩阵变换后,直接更新层次包围盒。在进行检测时,从层次包围盒数据结构中取包围盒数据?这样似乎也很麻烦。

如果按照前者,即根据场景中层次关系临时求包围盒,那么由于场景中节点本身是按逻辑关系组织的而不是按物体所在的实际位置即物理关系组织的,这就会存在很大的效率问题。

如果按每个对象的实际位置创建层次包围盒,据说是可以按照二分法,根据重心在剖面的两侧分为两部分,依次类推进行构建,如果有某个对象发生矩阵变换,则需要先对层次包围盒结构进行整体更新,碰撞的时候还得再从中选取包围盒,岂不是严重降低了效率?

该用户从未签到

发表于 2010-12-16 13:20:39 | 显示全部楼层
包围体就是一种构建场景图的方法,因此节点的包围体信息在构建的时候就已经确定了,不需要临时求取。包围体层次就是记录在节点本身上的,使用上一节点的局部参考系,不需要单独再构建一个结构

因此您的第二个问题本身就不成立,因为包围体既不是临时求出的,也不是另外的结构

至于第三个问题,答案是不会影响什么效率,这个节点以下的所有节点都不需要改变包围体信息(因为相对于该节点的坐标系,它们的包围体并无变化)

该用户从未签到

发表于 2010-12-16 15:18:54 | 显示全部楼层
学习了 ~

该用户从未签到

 楼主| 发表于 2010-12-20 12:16:31 | 显示全部楼层
非常感谢Array的解答!真是学习了,思路清晰了好多。多谢您了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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