游戏物理引擎.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
游戏物理引擎 1 Body 2 Shape 3 Joints 物理引擎的工作流程就是对渲染场景的每一帧进行物理模拟,再对具有物理特性的模拟实体进行状态与受力分析。然后,进行碰撞检测,找出运动实体间相互的约束信息,并通过牛顿力学原理计算出每个实体新的位移和速度,从而更新实体的方位,获得新的虚拟场景。基本处理步骤如下: ①物理模拟。以牛顿力学定理为基础,根据实体对象的物理属性,计算各种力对实体的作用,从而确定其运动状态。 ②计算各个实体对象所受的合力(Force)和(Torque) ③进行碰撞检测。根据实体的运动状态检测他们之间的交互情况。一般的碰撞检测分为两个检测阶段:粗略检测阶段主要是利用物体的包围盒(AAB/BOBB/Sphere),配合一种空间划分法(BSP/OCTree)来进行粗略的层次碰撞检测。目的是快速过滤掉没有发生碰撞的物体。如果物体的包围体发生碰撞,那么就进入到精细检测阶段进行更精细的判断。精细检测一半是基于三角形的碰撞。由于3D游戏世界中的物体模型都是有三角形网格组成的,因此在精细检测阶段可以找到确切的碰撞点坐标和碰撞法线。 ④如果有碰撞发生,响应碰撞并进行碰撞处理。一般用冲量定理来计算刚体碰撞后的速度。 另外,物理引擎不知道也不必关心它进行模拟的对象是如何显示的。它根据对象的物理而非图形描述对这些对象的运动和交互过程进行模拟,该抽象化了的描述信息可以用于生成“追踪”模拟的显示。对象物理特性的图形显示则交给图形渲染系统来进行处理。 Box2D是一款为2D游戏设计的刚体模拟物理库。程序开发人员可以在游戏中通过使用这个库,达到让物体遵守令人信服的轨迹,让虚拟世界的交互性体验更深。从游戏的角度来看,一个物理引擎的应用就是让动画程序 1 Body 实体(Body)是物理引擎中可相互交互的基本对象。它包含了质量,质心位置和密度等属性。开发人员可以应用一个力,力矩或者脉冲到这个实体上。实体可以有静态的和动态的。静态实体自始至终都不动,并且不与其他静态实体相互碰撞。实体是形状的内在支撑。实体承载着具体的外形在世界中来回移动。在Box2D引擎中, 2 Shape 形状(Shape)定义了一个Body所应该拥有的外形特征,可以使用多边形,矩形或者圆形之中的任意一个。形状同时也用来定一个实体的质量。这一功能让开发人员能够通过给定密度,Box2D将会计算出形状的面积从而求解出实体的质量属性。同时,形状还拥有摩擦力等属性。形状还可以带有碰撞过滤信息,能够防止某些特定的游戏物体发生碰撞。形状总是由一个实体所拥有,开发人员可以同时附加多个形状到一个实体上面。形状是一个抽象类,因此在Box2D中可以实现很多种具体的形状。只要开发人员下足够的功夫,是能够实现自定义的形状和相应的碰撞检测算法的 3 Joints 关节(Joints),两个刚体的链接部位,它可以影响和约束不同缸体之间的行为和运动方式。在游戏中的典型应用有滑轮,链条和合页等。通过各种巧妙的不同组合,各种关节能够拼凑出很多有趣的运动方式。一些关节提供有属性的限制指,因此开发人员能够控制运动的幅度。而有一些关节提供有马达,这些马达能够驱动关节以一定的速度运转知道这个力量或者是力矩消失。关节的马达能够通过很多种方式应用上。例如开发人员可以使用这个马达去模拟关节的摩擦:把关节的速率调为0,并且提供一个小的但是明显的最大动力值。然后这个马达将会试图保持关节运动直到 ①Distance Joint 最简单的一种关节就是远程关节,它指的是两个实体上的两个点之间的距离是常量的。当开发人员指定一个远程关节的时候,连接的两个物体必须已经摆放就绪。然后通过在世界坐标系中指定两个锚点,第一个锚点连接着实体1,而第二个锚点连接实体2。这些点将约束这两个实体之间的距离,如图1所 图1 远程关节 ②Revolute Joint 转动关节强制将两个实体绑定到一个公共的锚点上,通常我们也叫做合页(hinge point)。转动关节只有一个自由活动的角度:绕着两个实体相对转动。它也叫做关节角度。如图2所示: 2 转动关节 ③Prismatic Joint 柱状关节,这是一种能够允许两个实体之间沿着某个轴做相对位移的关节,并且能够防止他们之间有相对的旋转。总而言之他们只能在某一个方向上做自由运动。如图3所示 图 3 柱状关节 Initialize()方法初始化柱状关节时,关节点的位置偏移量保持为0。 ④Pulley Joint 滑轮关节用来创建一个理想化的滑轮。滑轮的两根绳子端点绑定在一个静态的实体上,绳子绕过若干个动态的实体,当其中一个上升的时候其他的则在下降,绳子的总长度根据初始化时给出的值来决定 图 4 滑轮关节 0。在这一点上,约束方程变成奇异方程,不能被解出。因此,滑轮的联合约

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档