查看: 3669|回复: 3

OSG与MFC结合的问题

[复制链接]

该用户从未签到

发表于 2009-1-15 13:53:49 | 显示全部楼层 |阅读模式
请问各位一下OSG与MFC结合的问题:
参照OSG自带的MFC程序,在MFC主线程中开启一个绘制线程,当然,系统绘制的资源均放在MFC的C***View中,
但是当为了响应MFC的一些命令和消息时,例如菜单命令,需要MFC的主线程去操纵控制场景中的数据,那么问题就出现了:
1.osg中严格遵循update() cull() draw()三个阶段;
2.在MFC主线程中进行场景数据的操作很可能与draw阶段发生重叠,从而导致对数据的冲突而系统崩溃;
3.而在MFC中进行的这些操作,如果放在osg的事件处理器中进行不会出现上述问题;
4.那么对于这些MFC中的操作我们要创建一个EventHandler通过Switch case语句一直在那里等待,进行处理吗?
不知我把情况说明白了没有,请问一下各位大侠,类似的问题都是采取什么方式解决的?
还有如果创建自定义的事件USER,怎么实现?

该用户从未签到

发表于 2009-1-15 14:42:51 | 显示全部楼层
对于各种控件事件,比如按下某个按钮希望在场景中增加一个显示对象,可以考虑在控件的响应事件中设一个全局的标志位,例如 bool _btnXXX_clicked。然后在场景的更新回调中,判断这个标志位如果为true,则执行相应的场景操作,并且将标志位重置为false。

这只是一种思路,具体的实现您可以根据自己的系统架构灵活设置,方法有很多,可以不拘一格。

还有记得要设置动态对象的变度参数setDataVariance(),设置为DYNAMIC。

该用户从未签到

 楼主| 发表于 2009-1-15 23:21:32 | 显示全部楼层
谢谢版主回复,这个方法倒也想过,但总觉得很别扭,感觉为了这些不常进行的(当然可能会有很多种)操作,设置类似标志,而且每帧循环会一直无味进行判断,呵呵。总想应该有高效的方法,呵呵!

该用户从未签到

发表于 2009-1-16 00:04:30 | 显示全部楼层
这个 if 耗费的时间很少的,转成汇编的话也不过区区数行(无非就是把数压入寄存器,然后做一个jn之类的判断),和大量封装繁杂的MFC函数比起来,几乎可以忽略。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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