ogitor小结

      由于没有帮助文档,自己只能照着代码看qtogitor的编写流程和框架,这里抽空总结一下:

      1)先谈谈dragdrop问题。在qtogitor当中,主要相应dragdrop是在ogrewidget类中,也就是我们的渲染窗口了。里面有相应drag和drop的四个函数,而他的drag和drop调用的是ogitorsroot里面的dragdrop,由于在注册ogitorsroot的时候我们注册了dragdropHandlermap(PS:ogtior用了很多相关容器)的找到对应的evt->source()对应的widget,然后调用对应的widget的处理dragdrop的函数,当然在这其中还包括了根据屏幕位置找到物体三维位置(当然这时一entity为搜索路线)等等。下面以qtogitor如何创建实体为例(由于用SVN导致工作目录路径的更好,导致一些source不能调试,耽误了很多时间,以后再也不能犯这种错误了):

          MainWindow::addDockWidgets    ----含有---mEntityViewWidget = new EntityViewWidget(parent);【listWidget = new QListWidget(this);OgitorsRoot::getSingletonPtr()->RegisterDragDropHandler((void*)listWidget, this);】先讲解一下,这个是加入MESH文件的widget,listwidget主要是指那些图片所对应的list,然后我们注册了listWidget所对应的dragdrop,至于这个组建的初始化有在 MainWindow::openSceneOptions中调用prepareview()准备。这里主要完成注册功能。

         现在来追逐Entity的生成:(以dragEnterEvent为例)

         OgreWidget::dragEnterEvent---含有----OgitorsRoot::getSingletonPtr()->OnDragEnter(source)---含有---if(it->first == source)找到我们注册的组件,由于这些组件的父类都是EntityViewWidget,所以我们调用的是EntityViewWidget::OnDragEnter()----含有------mDragData.Object = factory->CreateObject(&parent, mDragData.Parameters);找到我们需要创建的实体编辑的factory,用factory创建CEntityEditor,也就是编辑对象,这里面也包含我们右边属性栏显示的那些参数,这还不够,我们要创建ogreEntity,这个主要是调用CEntityEditor的load()函数来实现;来看看 CEntityEditor::load(),他首先调用了CNodeEditor::load()创建来创建场景节点Node,然后回到CEntityEditor::load()创建我们的ogre实体对象,并且加入到Node当中。

         相信你看了头大,这是CHINAGRAPH回来之后每天泡实验室才走清楚的路线,只有知道了在哪创建实体,我才能随意添加一些功能把我的系统集成进去,现在这个目标终于实现了。至于dragdrop的其他几个函数主要有映射二维屏幕坐标到三维屏幕坐标,查找最合适优先级最高的viewport窗口等等。我想,知道了Editor的用途举一反三,其他的也就差不多游刃有余了。

      PS1:特地给ogitor小组发了一个建议,回的很效率,期待以后的版本出来教程或参考文献。

      PS2:今天下午做组成原理实验好郁闷,由于学生都是教师用书,然后布线他们都不动脑筋,我这个助教表示鸭梨好大,而且自己也不知道怎么在机器指令运行过程中测寄存器堆的数据,明天上午再去跟着指令微码测试一下数据总线,但愿成功。

 

转载于:https://www.cnblogs.com/bite_the_bullet/archive/2010/10/27/1862887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值