查看: 1353|回复: 3

包围盒显示不正确,真心求指教啊(有代码,有图)

[复制链接]

该用户从未签到

发表于 2011-8-15 18:39:40 | 显示全部楼层 |阅读模式
本帖最后由 sunbaigui 于 2011-8-15 18:44 编辑

这几天在做包围盒效果,但是碰到了一个问题,在显示cow.osg的时候是正确的,但在显示avatar.osg的时候确出现了错误,
看上去像是某个矩阵变换没加上去的样子
我包围盒的代码如下(我是对geode节点进行包围盒显示的,下面的例子中牛是一个geode节点,avatar的右手是一个geode节点):

  1. osg::BoundingBoxf boundbox = geode->getBoundingBox();
  2. osg::ref_ptr<osg::Box> box = new osg::Box(boundbox.center(), boundbox.xMax()-boundbox.xMin(), boundbox.yMax()-boundbox.yMin(), boundbox.zMax()-boundbox.zMin());
  3. osg::ref_ptr<osg::ShapeDrawable> shape = new osg::ShapeDrawable(box);
  4. shape->setColor(osg::Vec4(0.0, 1.0, 0.0, 1.0));
  5. shape->setStateSet(state);
  6. geode->addDrawable(shape.get());
复制代码
显示cow.osg时的效果图:

cow.osg

cow.osg

显示avatar.osg右手geode节点时的效果图(看上去像是大了一倍):

avatar.osg

avatar.osg

avator.osg的节点结构如下所示:

structure

structure


我对osg的文件格式不是很了解,不知到是不是因为结构图中bone节点的作用导致包围盒求法发生了错误。
求指点!感激不尽!

该用户从未签到

发表于 2011-8-15 22:33:06 | 显示全部楼层
你试试用右胳膊的transformmatrix变换下boundbox

该用户从未签到

 楼主| 发表于 2011-8-16 09:37:25 | 显示全部楼层
非常感谢你的建议,但是我看了一下也做了实验,右胳膊的transformmatrix只是进行了平移变换,没有进行放大缩小。而且,因为box是作为一个drawable加入到右胳膊geode节点中的,所以geode节点上面的transformmatrix应该都会作用到box上的。这是我个人的想法,还望大牛解惑啊!

该用户从未签到

发表于 2011-8-17 09:51:53 | 显示全部楼层
不能排除这就是左手的包围体,您可以查看一下模型本身是否有孤立的顶点或者默认包围体设置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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