诚恳虚心真诚的请教这里的高手关于3D碰撞检测的问题

renxu350 2011-02-16 09:54:18
1.八叉树在实现时是不是使用二叉链表变形得到,实际使用二叉链表操作实际变形的八叉树?还是真实构造八叉链表?

2.一个3D室内不规则场景怎么构造八叉树,做碰撞检测,请给个思路?

3.雷神之锤2/3,魔兽世界,星际争霸2这些游戏分别使用的是什么碰撞检测方法?请给个常用可行的线索思路?

4.对于这些游戏,分别的是哪一种算法效率最高,在当前最常用的效率最高的3D游戏(必须对这些游戏而言)碰撞检测方法是什么?

5.八叉树对于这些游戏而言是不是适合,是不是常用?如果不是的话又是另外的什么方法?
...全文
114 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
思月行云 2011-02-18
  • 打赏
  • 举报
回复
LS的大侠回答的很详细~
咱也是初学,我的理解,八叉树即是为实现场景内所有物体的区域化管理。
这样做的好处是显而易见的。比方说,场景渲染的时候,通过八叉树可以迅速得到摄影机视野内部有哪些物体,其他的物体则不做多余的渲染动作,性能会得到大幅提升。
另外,摄影机移动的时候可以快速判断周围有哪些物体,从而只做摄影机的外包球与这些物体模型的外包球间的碰撞检测。这一点LS的大侠讲的很清楚。LZ可以好好借鉴一下~
至于不规则室内场景,LZ只要在原来八叉树碰撞检测的基础上再加一个不规则的边界检测就可以了。
那些成熟游戏的内部机制咱就不懂了~期待高人出现~
寻开心 2011-02-18
  • 打赏
  • 举报
回复
这个问题真不好回答

碰撞检测本身有多种情况,从最简单的是一个射线和一个三角形的相交计算,一直到复杂场景当中运动状态下(甚至形变当中的)不规则物体和不规则物体的运动中的碰撞计算; 牵涉到很多不同的情况,都需要分别用不同的方法来解决;

最基础的算法是射线和三角形的相交判断,这个在dxsdk的的示例当中是有源码的,csdn的论坛当中也有过多次讨论,这个是碰撞本身的最基础的算法不讨论;

在实际应用当中,更多的碰撞检测处理实际是发生在场景的组织结构上
八叉树也好,二叉树也好,他都是场景的组织形式

场景并不是一堆物体的简单堆砌, 选择什么样的组织方式,是整个游戏或者应用的核心所在
之所以说组织形式是核心,是因为组织形式不仅仅是碰撞检测的基础, 他也是场景渲染的依据,也是数据存储的结构,。。。。

在碰撞检测当中,往往都是执行从粗到细的检测过程, 这个过程是根据场景的组织形式,从上到下逐步深入的。比如二叉树组织的场景, 从跟开始,判断引发碰撞检测的物体在树的哪个分支上,从而决定向哪个方向开始检测或者放弃哪个方向的检测,如果跨越了两个分支,两个分支就都要进行检测, 并把检测的结果反馈回来对比确定选择哪个是最终的碰撞结果。

在遍历场景,到达最终的底层节点,要开始引发碰撞检测物和被检测物体之间的相交计算, 这个计算基本算法就是线段和三角形的相交计算,两个物体之间的碰撞检测从包围盒和包围盒或者包围球等开始确定相交,再进而发展到具体的三角形和三角形之间的检测, 再变成线和三角形之间的检测的,这个不讨论

楼主的问题看起来更是在说场景的组织结构, 八叉树可以认为是二叉树的扩展,但是尤其不同的特性

场景往往是通过一个离线或者非及时操作的场景编辑器来生成的, 然后游戏或者应该用的时候,操纵精灵在预先制定的场景当中运动并触发各种行为的, 这个原始场景是通过单独的场景编辑器逐步搭建起来的

这个场景编辑器是可以用大量的时间来进行复杂的计算,来确定不规则的物体如何划分成八叉树,当八叉树分割面和物体相交的时候,往往场景编辑器可以把物体分割成两个独立的子物体,然后进行后续的迭代建立的过程

选择什么样的场景组织方式实际上没有绝对性, 要根据场景的特点来设置。这个需要多看看相关的资料吧,不是这种论坛所能讨论的问题。
每种不同的组织方式都有各自的特点, 室内的场景往往用room-portal在上层分割不同的房间,每个房间是个子单元,单元和单元至今通过portal来连接到下一个单元,这个组织结构可以在视觉裁剪,场景存储加载,碰撞检测上都有加速作用,比如定位好物体在哪个房间,可以在碰撞的时候只检测本房间内部的物体,现实的时候只现实本房间的,以及通过protal看到的其他房间的物体;
房间内部的组织形式可以用八叉树,也可以用其他的; 只不过八叉树的形式简单方便而已,但是未必是效率最高的。

需要明白的是: 组织形式, 和建立起组织形式的过程是两回事。前者是你做碰撞检测计算的依据,后者是美工和场景编辑器的工作;

最近太忙了,简单说明希望有所帮助
gamemagic 2011-02-17
  • 打赏
  • 举报
回复
没人顶?黑洞

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧