查看: 3904|回复: 16

如何用QT界面操纵OSG三维物体?

[复制链接]

该用户从未签到

发表于 2011-3-29 10:59:14 | 显示全部楼层 |阅读模式
如何用QT的按钮或动作(action)操纵OSG三维物体,比如按一下按钮,就可以让三维物体旋转或移动;按下按钮就可以给三维物体添加材质等。

该用户从未签到

发表于 2011-3-29 11:12:09 | 显示全部楼层
应该是哟osgqQT的例子

该用户从未签到

 楼主| 发表于 2011-3-29 11:27:30 | 显示全部楼层
回复 2# tianxiao888


   是osgviewerQT吗?这个例子没有界面交互的吧

该用户从未签到

发表于 2011-3-29 14:47:56 | 显示全部楼层
从界面线程直接操作三维场景中的数据并不是一个好的方案,因为您不知道此时同一套数据是否正在被渲染。好的作法是按下键后传递命令缓存(command buffer),然后在更新回调中执行命令

该用户从未签到

发表于 2011-3-29 14:49:17 | 显示全部楼层
从界面线程直接操作三维场景中的数据并不是一个好的方案,因为您不知道此时同一套数据是否正在被渲染。好的作法是按下键后传递命令缓存(command buffer),然后在更新回调中执行命令

该用户从未签到

 楼主| 发表于 2011-3-29 16:10:13 | 显示全部楼层
回复 4# array

谢谢array!
不知道此时同一套数据是否正在被渲染是什么情况,能举个例子吗?如果想用QT界面(公司需要)操作的话,有没有好的方法?

该用户从未签到

发表于 2011-3-29 16:40:28 | 显示全部楼层
这很好理解,因为界面线程和渲染线程是分开的。当您在界面线程中调用诸如node->removeChild()这样的指令时,没有人能判断渲染线程执行到了哪一步。如果它正好也在处理node的内容的话,那么就会形成数据访问冲突而崩溃。

Command Buffer应当是此时最好和最常用的方案

该用户从未签到

 楼主| 发表于 2011-3-29 17:26:36 | 显示全部楼层
回复 7# array
对Command Buffer方案不理解,还麻烦array讲下,是不是使用EventQueue来记录所有事件的一个事件队列?

该用户从未签到

 楼主| 发表于 2011-3-29 19:30:44 | 显示全部楼层
这很好理解,因为界面线程和渲染线程是分开的。当您在界面线程中调用诸如node->removeChild()这样的指令时, ...
array 发表于 2011-3-29 16:40

    对Command Buffer方案不理解,还麻烦array讲下,是不是使用EventQueue来记录所有事件的一个事件队列?

该用户从未签到

发表于 2011-3-29 19:49:12 | 显示全部楼层
应该是把鼠标键盘消息事件传递给osg,在osg的事件回调里统一处理

该用户从未签到

 楼主| 发表于 2011-3-29 20:02:59 | 显示全部楼层
回复 10# tianxiao888


    谢谢!

该用户从未签到

发表于 2011-5-24 13:18:12 | 显示全部楼层
学习了。。。

该用户从未签到

发表于 2011-8-28 08:01:11 | 显示全部楼层
我也想要实现这个功能,不知道对于Command Buffer方法能否解释的具体点呢?不知道osg例子中有没有具体的解决方案,谢谢了?

该用户从未签到

发表于 2011-8-28 13:50:23 | 显示全部楼层
我以前也有这样的问题还请array详细介绍一下,或由示例程序参考一下

该用户从未签到

发表于 2011-8-29 09:00:37 | 显示全部楼层
一个可以公开的示例程序会在年末的新书osg cookbook中提供,其中演示了最简单的GUI与三维场景的交互方法,使用一个线程锁就可以了

该用户从未签到

发表于 2011-8-29 11:05:55 | 显示全部楼层
回复 15# array


    还要到年底呀 array能不能先把这部分贴出来让我们学习学习呀?

该用户从未签到

发表于 2011-8-30 08:41:56 | 显示全部楼层
一个简单的思路就是有一个结构体Operation,其中存储了要发送到底层的指令和参数,然后界面操作时将一个个新的Operation实例压入到全局的operationList中,同时加线程锁。
OSG层面的updateCallback中首先加锁,然后解析这个operationList的内容。一个高效的方法是直接swap到一个新的临时list中,然后就可以解锁并开始解析处理了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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