查看: 3623|回复: 11

node型节点如何求包围盒(不是包围球)?

[复制链接]

该用户从未签到

发表于 2010-12-8 21:55:53 | 显示全部楼层 |阅读模式
本帖最后由 lanxun1988 于 2010-12-8 21:59 编辑

请教大家一下,我想求一个node类型的节点的包围盒时发现,node型节点只有getBound()方法,但这个方法返回的是BoundingSphere类型的包围球,那怎么求包围盒呢?之所以要求node类型的包围盒,是因为我用osgDB::readNodeFile将一个建好的模型文件读进来的,这个函数的返回值是一个Node类型,而我现在想做的就是求这个模型的包围盒(不用包围球是因为我模型基本都是方的
    我查了一下发现geode类型的节点有getBoundingBox()方法可以返回包围盒,但node类型没有这个方法。
    昨天QQ群里一位热心人提醒说,每一个Node型节点下面都有一个geode节点,找到这个geode节点然后就可以计算包围盒了,说有一个查找孩子节点的函数。这段话我也没有很明白是什么意思。
    谢谢各位提点。

(我不需要得到这个节点在世界坐标系中的位置,我只想得到他的局部坐标系的位置,以前array教过直接求节点在世界坐标系中的包围盒的方法,但我一直也没弄成功,所以打算把局部的位置得到,然后用矩阵转到世界坐标系中去)

该用户从未签到

发表于 2010-12-9 08:31:49 | 显示全部楼层
根据包围球(bs)来创建包围盒(bb)
利用bb.expandBy(bs);

不知是否可行,仅供参考

该用户从未签到

发表于 2010-12-9 08:49:29 | 显示全部楼层
ComputeBoundsVisitor即可得到世界坐标系下的节点“包围盒”,您可以用它来完成一些自定义的工作

该用户从未签到

 楼主| 发表于 2010-12-9 09:27:59 | 显示全部楼层
2# icing

该用户从未签到

发表于 2010-12-10 20:59:04 | 显示全部楼层
使用ComputeBoundsVisitor来做。不能用物体的BoundingSphere来计算BoundingBox,那样得到的BoundingBox一定是一个正方体,那是不对的。

不过在此我倒有一个疑问:如何求出一个物体的最小包围盒?最小包围盒不是普通的BoundingBox。普通的BoundingBox的边一定是和xyz坐标轴平行的。物体的最小包围盒,通常就不大可能正好和坐标轴平行。这个问题我研究了几年,从2D一直研究到3D,到现在狗屁成果都没有。

该用户从未签到

发表于 2010-12-11 19:32:29 | 显示全部楼层
你去看看数据分析方面的教程,好像有一章是讲聚类的,可以解决你这个问题,最开始用统计方法求出最合理的坐标系,然后再该坐标系下求包围盒。

该用户从未签到

发表于 2010-12-13 09:08:28 | 显示全部楼层
不过在此我倒有一个疑问:如何求出一个物体的最小包围盒?最小包围盒不是普通的BoundingBox。普通的BoundingBox的边一定是和xyz坐标轴平行的。物体的最小包围盒
您所说的是OBB(有向包围盒)吧?这个算法应该已经比较成熟了,相关的代码实现也有很多

该用户从未签到

发表于 2011-3-17 19:51:45 | 显示全部楼层
谢谢了。我在看到这个方面的时候,也很迷惑,多谢解答

该用户从未签到

发表于 2011-3-18 14:17:54 | 显示全部楼层
OBB,呵呵,叫法都不一样

该用户从未签到

发表于 2011-7-14 21:09:16 | 显示全部楼层
ComputeBoundsVisitor难道不是世界坐标系下的?真的是父节点坐标系下的?

该用户从未签到

发表于 2011-12-4 17:26:18 | 显示全部楼层
array 发表于 2010-12-13 09:08
您所说的是OBB(有向包围盒)吧?这个算法应该已经比较成熟了,相关的代码实现也有很多

请教array:如何创建obb包围盒啊?谢谢了~~

该用户从未签到

发表于 2011-12-5 09:57:08 | 显示全部楼层
网上资料很多,一般需要手动指定个方向
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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