我要发帖 回复

正式会员

10

主题

58

积分

0

专家分

:

私信
发表时间 : 2007-12-13 23:12:22 | 浏览 : 3118    评论 : 19
大家好,
前段时间请教了cts制作的大地形在vp中的碰撞检测问题,得到答案后我是这样设置的,
设置tripod碰撞检测,由于大地形特殊的数据结构,tripod的target设置为scene,mask为FFFFFFFF,其余实体(object)均设置tripod从而实现与大地形地面的碰撞检测,mask为00000000。具体可见附件中的acf。
由于实体较多,三四百个,其中80个左右需添加碰撞检测,现使用Hp的9300图形工作站,2G内存,4500的专业显卡,运行起来后桢数极低,经测试主要是由于碰撞检测降低效率,现附上源代码中的configure()函数,其中包括动态生成object、配置特效、加载碰撞检测。写的很烂,误骂。付与附件中。
请教:
一.        采取这样的碰撞检测实现与大地形的碰撞,是否合理(应该是不合理, 确实很耗资源),只是不知道是碰撞检测的问题还是采取这种方式的问题。
二.        有无更好的生成或配置办法, 可提高效率,现在实在是实时性太差,不能忍。
三.        主要是碰撞检测,不知道还有什么方法或思路,实在不行就只能自己写来判断了。
四.        急。。。。。
谢谢

问题及代码.rar

14.82 KB, 下载次数: 122

最近VR访客

bobovip 评论于2007-12-14 10:02:00
。。

[ 本帖最后由 bobovip 于 2007-12-14 10:08 AM 编辑 ]
z4318055 评论于2007-12-14 10:08:50
没有人回答
我试了利用其他的碰撞检测模式也不行。。。
superdemo 评论于2007-12-14 11:27:09
采用vpIsectorServiceAsynchronous试试,把碰撞算法实例(比如m_isectorTripod)加入到其中,比如在acf中生成有一个vpIsectorServiceAsynchronous。

vpIsectorServiceAsynchronous *myIsectorService = vpIsectorServiceAsynchronous::find("myIsectorService");
  if(myIsectorService)
     myIsectorService->addIsector(m_isectorTripod);  
异步服务, 很管用,  帧率会提高不少。
z4318055 评论于2007-12-15 16:57:22
太感谢superdemo了
我试试  
不知道其他的mask设置是否可以再调整?》
我又用等大小的creator生成的flt地形跑了一遍,加入等量实体和碰撞检测,
再次验证了碰撞检测确实十分消耗资源。
大家以后用碰撞检测要注意了。。
z4318055 评论于2007-12-15 17:01:10
不知道碰撞检测为什么如此好耗资源  无奈了。。。
297006329 评论于2007-12-16 22:56:45
学习!·
superdemo 评论于2007-12-16 23:37:07
地形匹配、碰撞检测本身是费时间的,所以此类实例不能太多,许多对象是可以共用一个碰撞及地形匹配实例的,代码上可以优化,抓住主要的、弱化次要的。
tan_dunming 评论于2007-12-17 00:18:57
要彻底的解决这个问题,就要好好看看膨胀检测的原理, 有些东西不能只 “拿来主义”, 还要消化啊, 有些底层的东西也有必要看看,要不怎么创新呢?别动不动就买外国的,对国内的不屑一顾,关键时候还要自力更生!
追求卓越
z4318055 评论于2007-12-19 13:30:29
楼上说的有道理 可关键是项目要得紧
没办法啊
我用了异步服务:
采用vpIsectorServiceAsynchronous试试,把碰撞算法实例(比如m_isectorTripod)加入到其中,比如在acf中生成有一个vpIsectorServiceAsynchronous。)
     myIsectorService->addIsector(m_isectorTripod);
可是所有实体都加这个碰撞检测,会使碰撞检测失效??
paul_huang 评论于2007-12-19 19:59:07
帮楼主顶一个,学习!!
z4318055 评论于2007-12-25 21:43:13
........
kevin0442 评论于2007-12-26 13:45:42
楼主应该是 tripod碰撞检测实例添加的过多的原因吧.
我建议只在场景中添加 一个tripod碰撞检测实例,然后在移动某一个object 的时候动态设置tripod碰撞检测和该object 关联起来,当移动另外的object 时再次设置tripod碰撞检测和其关联,这样就能重复利用这一个tripod,当然这种方法只适合每次只移动1个object的情况, 同理可以扩展到一次移动若干object的情况. 我猜测楼主也不可能一次移动80多个object 吧.

只是个人一点拙见,若是这种想法不对,望高人不吝指教.谢谢

[ 本帖最后由 kevin0442 于 2007-12-26 01:47 PM 编辑 ]
stevenww9821307 评论于2007-12-26 22:17:30
楼上说的方法听起来不错,具体怎么实现啊,是不是很麻烦,能贴代码吗?
如果采用建模设置碰撞检测框是不是有效果?
obuil 评论于2007-12-26 23:22:04
实例一个不行吗?
kevin0442 评论于2007-12-27 09:08:37
原帖由 stevenww9821307 于 2007-12-26 10:17 PM 发表
楼上说的方法听起来不错,具体怎么实现啊,是不是很麻烦,能贴代码吗?
如果采用建模设置碰撞检测框是不是有效果?


不是不想贴代码,因为我没有写这类的代码,只是一种想法,所以提出来讨论一下
关于建模设置碰撞检测框的问题我不了解,不好意思,你最好问问obuil老大.

[ 本帖最后由 kevin0442 于 2007-12-27 09:12 AM 编辑 ]
season030441 评论于2008-1-16 16:35:49
学习中
oucluo 评论于2008-4-3 20:54:09
我也想学碰撞检测
jpucnpczjx 评论于2011-9-27 11:58:19
有道理,学习下。
峰子 评论于2011-9-28 16:30:27
帮楼主顶一个,捧个场

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-10-26 01:01 AM

返回顶部