查看: 33597|回复: 89

OSG+Bullet GImpact碰撞检测Demo(附带源码)

[复制链接]

该用户从未签到

发表于 2012-9-5 10:30:58 | 显示全部楼层 |阅读模式
本帖最后由 liuzhiyu123 于 2013-4-17 08:47 编辑

各位基友,最近用了一个月的业余时间将上次发的Demo 虚拟装配  的整体框架进行了升级。

1.物理引擎采用了Bullet,使用了其中的Detection Collision Model,具体为GImpact,检测效果不错。
2.实现了场景的新的Manipulator(单独的模块),基本和3Dmax中一致。
3.实现了多个模型同时操作的功能。
4.实现了播放模型自带的Animation 和 记录用户操作的Animation,带有回放功能。
5.使用了一个简单的Qt窗口作为操作UI,上次的CEGUI没有使用。

使用说明如下:
1.程序启动之后,是没有模型加载的,点击UI的载入模型按钮,选择你要加载的模型(选Model.ive)。
******如果是其他的模型,需要制作相应的要操作的零件的标示文件******

2.在模型加载之后,可以用鼠标点击模型中的文件,如果这个模型是要操作的(名称存在于标示文件中),那么会相应弹出操作器,也可以在UI上点击:平移拖拽器或者旋转拖拽器

3.可以选择开启或者关闭模型移动时是否进行碰撞检测

4.自动演示功能可以播放模型自带的动画效果

5.播放记录功能就是播放记录的模型操作轨迹(暂不开放)

6.暂停当前播放可以对当前进行播放的动画进行播放或者暂停

7.组装记录可以记录模型被操作的轨迹,新的记录会覆盖上一次的记录(暂不开放)

8.按住Ctrl键,可以选择多个模型同时进行操作

9.当包围框由黄色变为红色时,表示当前操作的模型与其他模型有碰撞

友情提示:***************请在没有中文路径下运行***************
源代码在二楼


Demo截图:

旋转模型

旋转模型

添加完毕

添加完毕

平移模型

平移模型

检测到碰撞

检测到碰撞

程序启动

程序启动

添加模型

添加模型

多模型操作

多模型操作

关闭碰撞检测

关闭碰撞检测


该用户从未签到

发表于 2012-9-5 13:07:37 | 显示全部楼层
:lol沙发挺楼主!

该用户从未签到

 楼主| 发表于 2012-9-5 11:17:07 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2013-4-22 07:42 编辑

源代码

HEAD.zip (1.15 MB, 下载次数: 1628)

program.part03.rar

2.04 MB, 下载次数: 963, 下载积分: 威望 1

program.part02.rar

2.93 MB, 下载次数: 1166, 下载积分: 威望 1

program.part01.rar

2.93 MB, 下载次数: 1407, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2012-9-5 12:51:08 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2013-4-17 08:49 编辑
liuzhiyu123 发表于 2012-9-5 11:17
上传一个测试Demo


飞机2.png

飞机.png

该用户从未签到

发表于 2012-9-5 13:23:36 | 显示全部楼层
liuzhiyu123 发表于 2012-9-5 12:51
在完善几个功能之后,有可能会把源代码托管到github

楼主好强大啊!先膜拜一下!敢问楼主大哥,您能介绍一下那个bullet的collision detection么?或者贡献一点这个方面的代码,供我们参考参考!我想用bullet做碰撞过滤,但是要留下碰撞检测,只是过滤掉碰撞响应,不知道怎么去处理,bullet的函数研究的不是很透彻!还望指点一二!

该用户从未签到

 楼主| 发表于 2012-9-5 13:28:19 | 显示全部楼层
buptronin 发表于 2012-9-5 13:23
楼主好强大啊!先膜拜一下!敢问楼主大哥,您能介绍一下那个bullet的collision detection么?或者贡献一点 ...

只要不使用动力学部分就可以了,碰撞检测完全是由您自己控制的,先看一下Bullet的这个Demo   CollisionInterfaceDemo
利用Bullet中的各种回调函数,呵呵

该用户从未签到

发表于 2012-9-5 15:44:10 | 显示全部楼层
liuzhiyu123 发表于 2012-9-5 13:28
只要不使用动力学部分就可以了,碰撞检测完全是由您自己控制的,先看一下Bullet的这个Demo   CollisionIn ...

谢谢指点!我自己看看!

该用户从未签到

 楼主| 发表于 2012-9-5 15:49:55 | 显示全部楼层
buptronin 发表于 2012-9-5 15:44
谢谢指点!我自己看看!

不过这个是针对的Convex的,不同形状的模型 需要采用的方法不同,还有可能Convexdecompose

该用户从未签到

发表于 2012-9-6 20:36:58 | 显示全部楼层
liuzhiyu123 发表于 2012-9-5 15:49
不过这个是针对的Convex的,不同形状的模型 需要采用的方法不同,还有可能Convexdecompose

谢谢!

该用户从未签到

 楼主| 发表于 2012-9-7 11:15:42 | 显示全部楼层
代码正在整理,很快就能放到gitHub上了

该用户从未签到

发表于 2012-9-10 00:04:43 | 显示全部楼层
什么时候,能看到你的源码,启动时TestUI按钮汉字显示正常,但一点击TestUIt上汉字按钮时,按钮汉字和弹出出菜单上显示汉字都变成乱码!

该用户从未签到

 楼主| 发表于 2012-9-10 07:46:33 | 显示全部楼层
wchgood2 发表于 2012-9-10 00:04
什么时候,能看到你的源码,启动时TestUI按钮汉字显示正常,但一点击TestUIt上汉字按钮时,按钮汉字和弹出出 ...

字体问题

该用户从未签到

发表于 2012-9-12 18:21:25 | 显示全部楼层
学习了,高手

该用户从未签到

发表于 2012-9-12 19:48:13 | 显示全部楼层
学习了!

该用户从未签到

发表于 2012-9-12 23:36:49 | 显示全部楼层
源码啊,我就要看拖拽器那部分的。给我们源码吧,给我们源码吧。

该用户从未签到

 楼主| 发表于 2012-9-13 07:37:47 | 显示全部楼层
starmessage 发表于 2012-9-12 23:36
源码啊,我就要看拖拽器那部分的。给我们源码吧,给我们源码吧。

很快放出源码

该用户从未签到

发表于 2012-9-13 12:09:28 | 显示全部楼层
liuzhiyu123 发表于 2012-9-13 07:37
很快放出源码

我打不开啊,打开模型后,显示乱码的提示框,然后什么都没有了。。。。

该用户从未签到

发表于 2012-9-13 21:00:39 | 显示全部楼层
不发源码,我天天过来盖楼。速度,速度。周日前发吧,求你了,我只要拖拽器,和拾取这两个,正在做,有一些问题。参考下你的。

该用户从未签到

发表于 2012-9-15 20:53:41 | 显示全部楼层
我要源码,我要源码

该用户从未签到

 楼主| 发表于 2012-9-21 09:18:32 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-9-24 10:58 编辑
starmessage 发表于 2012-9-15 20:53
我要源码,我要源码


先提供一下里面的Dragger的源码
osgDragger.rar (29.83 KB, 下载次数: 290)

该用户从未签到

 楼主| 发表于 2012-9-21 10:18:13 | 显示全部楼层
代码整理完毕,现在全部开放,有不足之处希望广大基友指正,拍砖手下留情
osgVirtualAssembly.rar (821.76 KB, 下载次数: 959)

该用户从未签到

 楼主| 发表于 2012-9-21 10:25:12 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-9-21 10:26 编辑

如果要实现碰撞检测功能,需要修改一下osg 的源码,在
  1. osgManipulator::Dragger
复制代码
中修改如下:
  1. void dispatch(MotionCommand& command);
复制代码
改为
  1. virtual void dispatch(MotionCommand& command);
复制代码
VirtualAssembly.exe 就可以正常的运行了,将Date中的两个文件夹拷贝到生成exe相应的文件夹下,就OK

该用户从未签到

 楼主| 发表于 2012-9-21 10:26:47 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-9-21 10:27 编辑

我这里测试的版本是:Bullet的版本是2.8.0  Qt的版本是4.7.4 OSG版本3.1.2

该用户从未签到

发表于 2012-9-22 12:16:25 | 显示全部楼层
终于出来了,赶紧看看哦耶。当然还有问题来发,封校了一周,郁闷啊。

该用户从未签到

发表于 2012-9-23 20:16:14 | 显示全部楼层
本帖最后由 wchwell 于 2012-9-23 20:19 编辑
liuzhiyu123 发表于 2012-9-10 07:46
字体问题

我使用Bullet的版本是2.8.0,osg3.1.4,qt4.8.1,vs2008编译通过
原文中
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
下加入下面两句可以统一字码,打开按钮不在出现乱码了!
QFont font("Times",8,QFont:ight,FALSE);
app.setFont(font);

该用户从未签到

 楼主| 发表于 2012-9-24 08:07:00 | 显示全部楼层
本帖最后由 liuzhiyu123 于 2012-10-9 08:21 编辑
wchwell 发表于 2012-9-23 20:16
我使用Bullet的版本是2.8.0,osg3.1.4,qt4.8.1,vs2008编译通过
原文中
QTextCodec::setCodecForTr(QTex ...


插件忘记放进去了

该用户从未签到

发表于 2012-9-24 11:02:46 | 显示全部楼层
GL好牛逼, 顶一个

该用户从未签到

发表于 2012-9-24 13:27:08 | 显示全部楼层
:victory: 顶一个

该用户从未签到

 楼主| 发表于 2012-9-25 08:48:56 | 显示全部楼层
暗夜听雪 发表于 2012-9-24 11:02
GL好牛逼, 顶一个

菜菜

该用户从未签到

发表于 2012-9-25 11:08:31 | 显示全部楼层
支持下 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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