查看: 2108|回复: 13

求助:使用osgBullet做自由落体碰撞时出现的问题

[复制链接]

该用户从未签到

发表于 2013-9-11 11:15:01 | 显示全部楼层 |阅读模式
本帖最后由 天行剑 于 2013-9-12 21:45 编辑

这么说吧,我做了一个长方体(3ds max做的),其上表面作为地面(长宽相等,高度较小与长度宽度比可忽略不计,这样可以近似地看为一个平面了),然后再地面上加了一个隆起的土丘(扁扁的半球体放到长方体上),又在地面上挖了一个大坑(用球体和长方体做布尔减运算得到,坑的最低点不会低于长方体的下表面的),最后用小球与地面实施碰撞,出现的问题是:小球与土丘、地面碰撞完全符合物理现象,可是小球落向大坑时出现问题了,总是落在与原始地面(长方体上表面)平行的地方,看上去就像悬浮在坑上一样。这个怎么解释呢?该如何才能在平面上作出合适的“坑”呢?我在引擎中使用的包围盒是CONVEX_HULL_SHAPE_PROXYTYPE和TRIANGLE_MESH_SHPAE_PROXYTYPE,没有使用BOX_SHAPE_PROXYTYPE
1.jpg 2.jpg 3.jpg

该用户从未签到

发表于 2013-9-12 09:32:22 | 显示全部楼层
只能是复杂曲面的碰撞检测,简单的包围盒肯定不能满足

该用户从未签到

 楼主| 发表于 2013-9-12 21:47:06 | 显示全部楼层
liuzhiyu123 发表于 2013-9-12 09:32
只能是复杂曲面的碰撞检测,简单的包围盒肯定不能满足

可是该如何做才能检测到地面的“坑”呢?

该用户从未签到

发表于 2013-9-13 09:06:43 | 显示全部楼层
你的球的shape的margin做的多大的?还有你要考虑地形的margin。

该用户从未签到

发表于 2013-9-13 10:46:42 | 显示全部楼层
坑的话 就要做一个曲面了  简单的相似 肯定是不精确的

该用户从未签到

发表于 2013-9-13 16:51:20 | 显示全部楼层
自己写碰撞检测吧!

该用户从未签到

 楼主| 发表于 2013-9-13 23:59:26 | 显示全部楼层
abnerring 发表于 2013-9-13 16:51
自己写碰撞检测吧!

那么物理引擎就失去使用价值了,而且很多重力、惯性作用还是引擎效果比较好呢

该用户从未签到

 楼主| 发表于 2013-9-15 22:30:14 | 显示全部楼层
liuzhiyu123 发表于 2013-9-13 10:46
坑的话 就要做一个曲面了  简单的相似 肯定是不精确的

这个坑和凸起都是一个曲面,我在3ds max里面做好后导进去的,不知为何包围盒只认凸起不认凹下

该用户从未签到

 楼主| 发表于 2013-9-15 22:31:50 | 显示全部楼层
buptronin 发表于 2013-9-13 09:06
你的球的shape的margin做的多大的?还有你要考虑地形的margin。

我用的包围盒是CONVEX_HULL_SHAPE_PROXYTYPE,地形、球体什么样它就包围什么样的,不会有半径问题吧?

该用户从未签到

发表于 2013-9-25 13:49:15 | 显示全部楼层
物理引擎的碰撞模型并不一定是以精准为第一要务的,而是以速度和准确性的均衡来决定。据我所知Physx默认的碰撞模型也存在这种对于非凸包形状的碰撞问题,不过换用PCM模型就会好很多,当然这是以性能为代价的。Bullet有没有类似的情形我不清楚

该用户从未签到

发表于 2013-9-27 11:08:10 | 显示全部楼层
天行剑 发表于 2013-9-15 22:31
我用的包围盒是CONVEX_HULL_SHAPE_PROXYTYPE,地形、球体什么样它就包围什么样的,不会有半径问题吧?

包围盒不是完全贴着你的模型的,它加有margin区域,任何一个shape都有,你可以试着对margin进行修改。当然,模型的尺寸单位也有一定的影响的。也许你看着这个模型在场景中显示很小,但是,他的shape却非常的大,这种情况都有,我记得osgBullet里边有一个osgbCollision::GLDebugDrawer类,它可以显示出刚体的shape边框,你可以看看。

该用户从未签到

 楼主| 发表于 2013-9-27 12:24:48 | 显示全部楼层
array 发表于 2013-9-25 13:49
物理引擎的碰撞模型并不一定是以精准为第一要务的,而是以速度和准确性的均衡来决定。据我所知Physx默认的碰 ...

谢谢Array!我使用物理引擎的最终目的是想建立一个在不平坦的地面上行驶的汽车这么一个场景,既然引擎不能识别凹凸面中凹下去部分,那么怎么把地面、汽车放到引擎中使用呢?总不能始终用大平面让汽车跑吧~

该用户从未签到

 楼主| 发表于 2013-9-27 12:25:53 | 显示全部楼层
buptronin 发表于 2013-9-27 11:08
包围盒不是完全贴着你的模型的,它加有margin区域,任何一个shape都有,你可以试着对margin进行修改。当然 ...

好的,我再去看看,谢谢你啦~

该用户从未签到

 楼主| 发表于 2013-10-14 16:39:46 | 显示全部楼层
这个问题终于解决了,虽然解决方法有点繁琐:只要把3ds max做好的地形模型放到creator里面去,把每一个面分离开,然后保存、放到osg中使用即可,这样,无论凸面还是非凸面都可以在bullet物理引擎里面完好识别。不过,在creator里面把每个面分离相当麻烦,如果面数太多的话。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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