查看: 963|回复: 2

OpenSceneGraph三维渲染引擎设计与实践_拖曳器例子中有一段不懂

[复制链接]

该用户从未签到

发表于 2011-5-27 00:59:00 | 显示全部楼层 |阅读模式
case osgGA::GUIEventAdapter:USH{
                                        ···
                                        for(itr=_pointer._hitList.front().first.begin();
                                                itr!=_pointer._hitList.front().first.end();++itr)
                                        {
                                                dragger=dynamic_cast<osgManipulator:ragger*>(*itr);
                                                if(dragger)
                                                {
                                                        dragger->handle(_pointer,ea,aa);
                                                        _activeDragger=dragger;
                                                        break;
                                                }
                                        }
                                        ···
                                        case osgGA::GUIEventAdapter::DRAG:
                                        case osgGA::GUIEventAdapter::RELEASE:
                                       {
                                             if(_activeDragger)
                                             {
                                                 ···  
                                                 _activeDragger->handle(_pointer,ea,aa);
                                                 ···
                                             }
                                       }
                                        1.为什么在按下鼠标的时候,itr指向的是什么内容呢,把它强制转换成dragger是什么意思,
                                        2.最让我疑惑的是执行的那个handle方法
                                           因为我重写了一个AxisDragger但明显的,这里执行的handle方法不是属于我重写的那个类的对象的,那么这里是在干什么呢
                                        3.为什么在按下时执行一次这个handle()方法,抬起时执行一次handle()方法,而拖动时什么都不做。这里的PUSH,DRAG和RELEASE和我重写的
                                           拖动器里handle()方法中的PUSH,DRAG,RELEASE之间是如何协调的呢

                                     高手帮忙讲解一下吧,好几个月了,都还不明白

该用户从未签到

 楼主| 发表于 2011-5-27 01:09:19 | 显示全部楼层
bool CompositeDragger::handle(const PointerInfo& pi, const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
    // Check if the dragger node is in the nodepath.
    if (!pi.contains(this))
        return false;

    for (DraggerList::iterator itr=_draggerList.begin(); itr!=_draggerList.end(); ++itr)
    {
        if ((*itr)->handle(pi, ea, aa))
            return true;
    }
    return false;
}
这是osg的一段源码,dragger的handle()函数的源码,,,我大概明白一点了
调用了点选控制柄的handle()函数

那么问题1和问题3呢

该用户从未签到

发表于 2011-5-27 08:16:06 | 显示全部楼层
您可以好好看一下源码。如果还是不懂,貌似论坛上有人分析过Dragger的处理过程,您可以搜一下看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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