- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级碰撞检测技术.doc
自从计算机游戏出现以来,程序员就不断地想办法来更精确地模拟现实世界。就拿乒乓游戏为例子(译者:Pong—被誉为电子游戏的祖先,有幸见过一次:),能见到祖先做的游戏感觉真是爽啊,想看的可以到FTP上下载“地球故事”就可以看到了:),游戏中有一个象征性的小方块(球)和两支拍子,游戏者需要在恰当的时间将拍子移动到恰当的地点,将小球反弹回去。这个基本操作的背后(以现在的标准来看)就是最原初的碰撞检测了。今天的游戏比“乒乓”要高级得多,并且基本上是基于3D的。3D游戏中的碰撞检测比“乒乓”游戏里的要更加难实现。玩一些早期模拟飞行游戏的体验向我们展现出糟糕的碰撞检测是如何毁灭一个游戏的。当穿过一座大山的尖顶的时候仍然活着,感觉很不真实。即便是现在的一些游戏也还是有碰撞上的问题,许多玩家曾经失望地看着他们喜爱的英雄或女英雄的部分身体穿进了墙里。甚至更糟的是,许多玩家都有过这样糟糕的体验,就是被那些离得很远的子弹或火箭击中。因为游戏者们要求提升真实性,我们开发者就不得不绞尽脑汁想办法让我们的游戏世界尽可能地接近现实世界。 阅读这篇文章前首先假设你对与碰撞检测相关的几何和数学知识已经有了基本的了解。在文章的最后,我将提供一些这方面的参考资料,以免你对它们感觉有点生疏。另外我还假设你已经读过 Jeff Lander 的图形专栏里关于碰撞检测文章(“Crashing into the New Year,” ; “When Two Hearts Collide,”;和 “Collision Response: Bouncy, Trouncy, Fun,”)。我将首先进行一个大概的描述,然后快速地切入到核心内容里,通过这两步从上至下地深入到碰撞检测中。我将讨论两种类型的图形引擎中的碰撞检测:基于 portal 的和基于 BSP 的。每种引擎中多边形的组织各不相同,因此在 world-object 型的碰撞检测上存在很大的差别。而object-object 型的碰撞检测绝大多数地方在上述两种引擎里的是一样的,主要看你是如何实现的了。当我们接触到多边形的碰撞检测时,我们还会实验如何将其扩展到我们学过的凸型物体上。预览 为了创建一个理想的碰撞检测程序,我们不得不在开发一个游戏的的图形管道的同时就开始计划并创建它的框架。在项目的最后加入碰撞检测是相当困难的。想在开发周期的末尾创建快速的碰撞检测将很有可能会使整个游戏被毁掉,因为我们不可能使它能高效地运行。在好的游戏引擎中,碰撞检测应该是精确、有效并且十分快速的。这些要求意味着碰撞检测将要与场景的多边形管理管道紧紧地联系起来。这也意味着穷举法将无法工作――今天的3D游戏中每帧处理的数据量很可能导致打格,当你还在检测一个物体的各多边形是否与场景中的其它多边形碰撞时,时间已经过去了。 让我们从基本的游戏引擎循环开始吧(列表1)。快速浏览这些代码来得到碰撞检测的相关策略。我们先假设碰撞没有发生,然后更新物体的位置,如果发现发生了碰撞,我们将把物体移回原来的位置不允许它穿越边界(或将物体销毁或执行一些预防措施)。然而,这个假设太过简单因为我们无法得知物体原来的位置是否仍然有效。你必须为这种情况设计一个方案(否则你可能会体验到坠机或被子弹击中的感觉――就是前面举的例子)。如果你是一个热心的玩家,你可能已经注意到了在一些游戏当中,当你挨着墙壁并试图穿过去的时候,摄像机就开始震动。你正经历的就是将主角移回原位的情况。震动是因为取了较大的时间片引起的。Listing 1. Extremely Simplified Game Loopwhile(1){??? process_input();??? update_objects();??? render_world();}update_objects(){??? for (each_object)??????? save_old_position();??? calc new_object_position {based on velocity accel. etc.}if (collide_with_other_objects())??? new_object_position = old_position();{or if destroyed object remove it etc.}Figure?1.?Time?gradient?and?collision?tests. 但是我们的方法有缺陷,我们忘了在等式中加入时间。图1告诉我们时间太重要了不能忘了它。即便物体在 t1 或 t2 时刻没有发生碰撞,它仍有可能在 t 时刻穿过边界(t1tt2)。这会在两个连续帧中产生大幅度地跨越(就好象击中了燃料室或其它类似的东
您可能关注的文档
最近下载
- 苏S13-2022 预制混凝土排水检查井工程图集规范 .docx VIP
- 一种钛合金离子渗氧的方法.pdf VIP
- 冀人版(2024)小学科学一年级下册《认识自然物和人造物》说课课件.pptx VIP
- 2025人教版英语八年级上册全册教学设计教案.pdf
- 刮研方法与 技巧.ppt VIP
- 摄影笔记完整版.docx VIP
- 工课:即将失传的轴瓦刮研-王震.pdf VIP
- T_CEA 0052.2-2025《电梯电缆及线束试验方法 第2部分:电气性能》.docx VIP
- T_CEA 0052.1-2025《电梯电缆及线束试验方法 第1部分:机械物理性能》.docx VIP
- 陕西省专业技术人员继续教育2025公需课《党的二十届三中全会精神解读与高质量发展》20学时题库及答案.docx VIP
原创力文档


文档评论(0)