查看: 1599|回复: 5

模型如何拾取的问题

[复制链接]

该用户从未签到

发表于 2011-12-6 15:53:09 | 显示全部楼层 |阅读模式
大家好!最近再写模型拾取时遇到了问题,请教一下各位前辈。自己实现的类继承于osgrawable,看了论坛上的关于拾取和求交的文章,自己就重载了四个Drawable::accept和Drawable::supports函数
class NurbsSurface :
        public osg::Drawable
{
public:
        .........
        virtual bool supports(const osg::Drawable::AttributeFunctor&) const { return true; }
        void accept(osg::Drawable::AttributeFunctor& af);

        virtual bool supports(const osg::Drawable::ConstAttributeFunctor&) const { return true; }
        void accept(osg::Drawable::ConstAttributeFunctor& af) const;

        virtual bool supports(const osg:rimitiveFunctor&) const { return true; }
        void accept(osg::PrimitiveFunctor& functor) const;

        virtual bool supports(const osg::PrimitiveIndexFunctor&) const { return true; }
        void accept(osg::PrimitiveIndexFunctor& functor) const;
         .........
}
但是当使用PickHandler拾取时if (view->computeIntersections(x, y, intersections))为false,并没有得到交点。
调试的时候发现没有进入上面的四个accept函数。
在computeIntersections函数中不是要调用accept函数吗?为什么没进去?
在accept函数中顶点,法向,类型都传进去了,还需要重载其他的函数吗?

该用户从未签到

发表于 2011-12-8 09:34:28 | 显示全部楼层
首先请判断一下这个NurbsSurface的getBound()是否有值,即您是否设置了一个默认的包围盒,或者重写了computeBound()函数来定义他的包围盒。OSG会首先尝试与包围盒求交,判断相交后才会继续和具体的三角面求交

该用户从未签到

 楼主| 发表于 2011-12-9 11:47:52 | 显示全部楼层
谢谢array前辈的回复,是因为computeBound()函数的问题而使得accept函数没进去。但是在调试时发现调用accept函数是在绘制图形之前,而不是在if (view->computeIntersections(x, y, intersections))时。
这样accept函数完全没有得到图元信息。
还想问一下:
          computeIntersections函数中不是要调用accept函数吗?
         还有就是如果一个物体有很多面的话,只用包围盒去判断不再继续用三角面片判断,是不是能够精确拾取的到?

该用户从未签到

 楼主| 发表于 2011-12-9 13:40:41 | 显示全部楼层
     在用源代码编译调试时,发现是accept函数要进入两次,在drawImplementation函数之前进入了一次,然后在computeIntersections函数时也会调用,现在是第一次是能成功的调用accept函数,但在computeIntersections函数还是没能调用accept函数。
    我没有重载computeBound函数,是因为没有与包围盒求到交集导致不再与三角面片求交?

该用户从未签到

发表于 2011-12-18 22:08:48 | 显示全部楼层
我觉得是因为你的类没有重载计算包围盒函数,导致没有正确得到包围盒,或者包围盒为空,导致程序没有运行到你重载的accept就自动return了,所以我觉得你应该必须写计算包围盒函数,个人意见,希望高手回答

该用户从未签到

发表于 2011-12-20 10:15:27 | 显示全部楼层
我已经回答了,楼上又回答了一次,楼主自己不做实验而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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