物理引擎_js物理引擎 - CSDN
精华内容
参与话题
  • 游戏开发入门(六)游戏物理引擎

    万次阅读 2018-03-03 11:17:44
    视频链接:游戏开发入门(六)游戏物理引擎(4节课 时常:约1小时20分钟 第5节无内容) 该视频主要针对游戏中的物理概念以及应用等方面进行简单的讲解,并不会深入的去分析物理公式与推导细节。 笔记与总结(请...

    视频链接:游戏开发入门(六)游戏物理引擎(4节课 时常:约1小时20分钟 第5节无内容)
    该视频主要针对游戏中的物理概念以及应用等方面进行简单的讲解,并不会深入的去分析物理公式与推导细节。


    笔记与总结(请先学习视频内容):

    1.游戏应用物理的目的就是为了真实

    2.物理引擎:
    可以认为属于游戏引擎的一个构成部分,但是可以独立剥离开来。游戏中的物理模拟的计算都是通过物理引擎根据真实世界物理定律来计算与实现的。市面上主流的物理引擎现在有两款,Havok与PhysX,其他的还有Open Dynamics Engine,Newton Game Dynamics,Tokamak Game Physics

    3.物理引擎带来的表现上的优势

    • a.增加动画表现的丰富性,减少美术的工作量(柔体物理)
    • b.增加游戏的真实性
    • c.快速模拟各种现实中常见的情形(如秋千,用代码现写一个成本高的离谱)
    • d.减少逻辑代码的工作量(比如正常情况下,玩家遇到障碍会停止,在物理世界这是很自然的,但是在非物理世界却很难处理)

    4.如何赋予游戏对象物理?
    给游戏模型创建一个物理包围盒,该包围盒与模型始终保持位置一致,物理引擎作用与该物理包围盒,进而就能影响整个游戏对象了。

    5.物理类型与应用

    • a.刚体物理 刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在游戏中,刚体物理的应用最为广泛。常见的地形,建筑,玩家等基本上都赋予的是刚体物理,游戏中的弓箭,实体子弹也都是通过物理引擎来模拟计算的。其中涉及到速度、加速度、力旋转、动量、摩擦、冲量等
    • b.破碎物理 一个对象受到一定力会破碎,理论上破碎效果可以通过动画师来制作动画,但是想根据不同力的大小产生不同的表现效果,那动画的工作量就显得过于繁重,破碎物理可以完美的解决这个问题。
    • c.粒子物理 游戏中的烟尘,雪花,雨水等,这些粒子在很多游戏中并没有添加物理(因为开销比较大),不过添加物理后可以很方便的处理很多问题,比如雨水穿过房顶的问题
    • d.流体物理 游戏中的瀑布,一些河流等。我们常见的海水一般并不是使用流体物理来做的,因为使用UV动画来处理可以极大的减少运算开销,而且现在的贴图效果表现也很不错

    6.物理引擎的起源与应用
    军事战争,其实这个很容易理解,国外的有些战争题材的游戏稍加修改就可以被用来模拟训练。既然物理引擎的目的就是仿真,那么他的仿真程度越高,其可以应用的场景就越多。

    7.游戏中常见的物理现象

    • a.重力,浮力 虽然这是现实世界中最常见的现象,但是很多游戏中并没有通过物理引擎去模拟重力,而是采用相对简单的逻辑代码模拟
    • b.碰撞 碰撞是最为常见的现象,任何角色在移动过程中碰到障碍都要停止移动,或者互相给力产生位移
    • c.变形 包括布料,头发等容易产生形变的物体
    • d.流体移动 液体的模拟 目前来看一般只有大型游戏或者有特殊需求的游戏才会使用,开销比较大
    • e.破碎 事先对物体进行破碎处理,将其模型与物理绑定拆分成多个碎片,受力后分散
    • f.受物理约束的移动 考虑到摩天轮、钟摆、秋千等在现实世界中受约束的模拟,我们可以对这些物体做特殊处理,这种处理就是物理约束

    8.Unity中的物理引擎(与Unreal相同)
    NVIDIA的PhysX引擎
    Unity中物理是以组件的形式存在的,把组件赋予一个OBject就可以赋予其对应的特性。
    物理组件大概分为6种:RigidBody刚体,Colider碰撞盒,Joint约束关节(前三个是刚体组件),Cloth布料(柔体组件),constant force恒力,CharacterController角色控制器

    9.关于刚体物理常见的应用

    • a.给各个对象添加碰撞实体(球形SphereCollider,长方体BoxCollider,胶囊体CapsuleCollider,轮子WheelCollider,三角网格MeshCollider,地形TerrainCollider),根据这些碰撞实体去进行物理模拟运算
    • b.设置各种铰链约束(joint)
    • c.Ragdoll布娃娃系统 一般针对玩家角色,用来模拟死亡后效果
    • d.碰撞筛选 可以选择特定标记的碰撞盒之间相互碰撞,不标记就不会产生碰撞

    10.关于刚体与碰撞盒的关系
    刚体是赋予物体物理属性的实体(质量,重力,摩擦系数等),而碰撞盒是用来模拟物理之间产生碰撞以及碰撞结果的只有刚体没有碰撞盒,就会互相穿过。只有碰撞盒没有刚体,那么碰撞的力无法正确计算,也没有意义

    11.Trigger
    触发器是游戏中经常用到的一个技术,简单来说就是设定一个区域,玩家或者NPC进去该区域触发某个事件

    12.关于Joint的理解
    在Unity里面叫做关节(铰链),一般在物理引擎中其实现原理就是物理约束。本质上就是给其6个自由度中的某几个自由度做限制,比如该物体只能在XoY平面移动。在Unity里面提供了默认的几个常用的关节类型(unreal中需要自己配置约束),可以方便的实现诸如弹簧、钟摆等效果。

    13.物理材质
    物理材质就是模拟现实中物体的材质,他的主要功能有两个,第一个是表示当前碰撞体的物理表面类型,进而可以根据类型去做特殊处理,第二个是配置摩擦力等参数,可以模拟现实中不同材质物体运动碰撞的效果。

    14.Character controller
    他在Unity中的概念与unreal等其他引擎的差距很大。Unity中是指一个只受玩家作用,而不受其他碰撞体影响的一个偏物理概念。unreal中单纯是指一个控制玩家角色的控制器。

    15.布料系统的实现原理

    • a.弹簧系统 一般采用的是弹簧—质点模型
      https://www.cnblogs.com/shushen/p/5473264.html
      http://blog.csdn.net/silangquan/article/details/15746855
    • b.Long Range Attachment 个人感觉这一点不算什么技术原理,理解弹簧质点模型就可以了
    • c.碰撞检测 布料是由多个顶点构成的,为了保证不会穿模,需要保证每一个点都能产生正确的碰撞
    • d.动画融合 如果物理模拟的结果不是很理想,可以让美术手动做一个动画,然后按照一定权重相结合。
    • e.风扰动 类似植物,可以主动添加一个风扰动来模拟布料飘动的效果
    • f.重力和阻尼 阻尼越大,其飘动所需要的力就越大

    上一篇:游戏开发入门(五)游戏动画系统
    下一篇:游戏开发入门(七)特效系统

    原文链接(转载请标明):http://blog.csdn.net/u012999985/article/details/79224911

    展开全文
  • 物理引擎

    2019-08-12 11:12:06
    物理引擎Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而...

    物理引擎Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。1、刚体在介绍物理引擎之前,需要先学习一下刚体(Rigidbody)。Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力用来保证游戏对象像在真实世界中那样进行运动。任何游戏对象只有添加了刚体组件才能受到重力的影响,通过脚本为游戏对象添加的作用力以及通过NVIDIA物理引擎与其他的游戏对象发生互动的运算都需要游戏对象添加了刚体组件。下面创建一个游戏对象,给这个游戏对象添加上刚体组件。如下图所示。下面我们学习一下物理组件中刚体的一些属性。Mass:质量,该项用于设置游戏对象的质量,数据类型是float类型,默认情况都是1,一般来说,大部分刚体的Mass属性值应该设置为0.1-10.0之间,这样模拟出来的刚体更加接近于生活。Drag:阻力,这里的阻力是指物体移动时的阻力,物体在任何方向移动都会受到Drag的影响。数据类型float类型,默认情况下为0,Drag值是阻碍物体做位移运动,它的方向总是和物体移动的方向相反,通过设置Drag值可以达到羽毛和石头掉落的效果。Angular Drag:旋转阻力,与Drag相似,旋转阻力也是用来物体运动的,旋转阻力是用来阻碍物体旋转的,数据类型是float类型,默认情况都是1。Use Gravity:使用重力,若开启此项,游戏对象会受到重力的影响。Is Kinematic:是否开启动力学,若开启此项,游戏对象将不再受物理引擎的影响从而只能通过Transform属性来对其操作Interpolate:插值,该项用于控制运动的抖动情况,有3项可以选择,None:没有插值;Interpolate:内插值,基于前一帧的Transform来平滑此次的Transform;Extrapolate:外插值,基于下一帧的Transform来平滑此次的TransformCollision Detection:碰撞检测,该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞,有3项可以选择,Discrete:离散碰撞检测,该模式与场景中其他的所有碰撞体进行碰撞检测;Continuous:连续碰撞检测;Continuous Dynamic:连续动态碰撞检测模式Constraints:约束,该项用于控制对于刚体运动的约束刚体变量为了获取和更改物体的运动状态,unity3D还预留了多个变量接口,这些接口简化了对物体运动状态的处理,使得开发人员能够轻易地对物体的运动状态进行干预。碰撞器(体)Unity中碰撞器包括6种,如下所示盒子碰撞器选中游戏对象,添加组件BoxCollider,在场景视图中的立方体就会出现一个绿色的轮廓,这就是碰撞器的真身了。在Unity中会将游戏对象的碰撞器以绿色轮廓显示出来,方便我们手动调整碰撞范围。参数也比较简单:Is Trigger(是否为触发器) 这个选项是供脚本使用的,如果勾选了这个则不会有碰撞的物理效果,但是游戏引擎会通知脚本有物体发生了碰撞。Material(碰撞器材质) 在这里可以选择一种物理材质,来模拟更真实的碰撞效果,比如金属之间的碰撞与石头之间的碰撞效果肯定是不一样的。Center(碰撞器中心点) 可以调整碰撞器离物体中心的距离,也就是移动绿框。Size(碰撞器大小) 调整碰撞器的缩放大小,调整XYZ可以让碰撞器变成任意大小的长方体。球形碰撞器胶囊碰撞器网格碰撞器 车轮碰撞器 地形碰撞器5、物体发生碰撞的必要条件  unity中的两个物体要想发生碰撞,必须依赖于自身的碰撞器组件(Collider),并且至少其中一个物体必须附有刚体组件(Rigidbody),其中附带碰撞检测脚本的物体必须有刚体组件。  unity中的碰撞检测,主要有两种接口函数,一种是碰撞信息检测,一种是触发信息检测(在检视面板碰撞器组件中勾选IsTrigger属性选择框,则为触发器模式),这两种接口函数具体为:  碰撞信息检测:  1.MonoBehaviour.OnCollisionEnter(Collision collisionInfo) 只有进入碰撞器时,调用该方法,在两个物体离开碰撞器之前只调用一次  2.MonoBehaviour.OnCollisionStay(Collision collisionInfo) 在两物体保持接触时调用,在两个物体碰撞器离开之前每帧调用一次  3.MonoBehaviour.OnCollisionExit(Collision collisionInfo) 只有两个物体碰撞器离开时,调用该方法一次  触发信息检测:  1.MonoBehaviour.OnTriggerEnter(Collider colliderInfo)只有进入触发器时,调用该方法,在两个物体离开触发器之前只调用一次2.MonoBehaviour.OnTriggerStay(Collider colliderInfo) 在两物体保持接触时调用,在两个物体触发器离开之前每帧调用一次  3.MonoBehaviour.OnTriggerExit(Collider colliderInfo) 只有两个物体触发器离开时,调用该方法一次  以上的接口函数都是MonoBehaviour的函数,由于我们新建的脚本都继承这个MonoBehaviour这个类。所以我们的脚本里面可以直接写这些函数。这两种模式下的碰撞检测有什么区别呢?区别是这样的:  在使用碰撞器类型检测时,两个物体是不能进入相互内部的,并且两个物体的碰撞器接触时,在附有刚体组件的物体是会受到力的反馈作用的;  而在使用触发器类型检测时,这时候两个物体是可以进入内部的,附有刚体组件的物体并不会受到力的反馈作用,这样一来,如果我们需要检测两个物体是否有接触,同时又不希望他们产生力的影响,就可以使用触发器检测来监测两个物体是否有接触了。6、物理引擎的其它应用 (1)Physics Material
    物理材质 (Physics Material) 用于调整碰撞对象的摩擦力和反弹效果。摩擦力、弹力和柔软度是由物理材质决定的。
    Unity提供的物理材质资源包中包含了大部分常见的物理材质。
    创建Physics Material
    创建方法:1.在Project视图中,点击鼠标右键,依次点击Create->Physic Material即可。
     2.点击菜单栏Assets,然后依次点击Create->Physic Material即可。
    Physics Material应用
    将物理材质 (Physics Material) 从“工程视图”(Project View) 拖动到场景中的碰撞体 (Collider) 上。或拖动到Collider组件的Material栏
    Physics Material属性
    动态摩擦力 (Dynamic Friction):已在移动时使用的摩擦力。通
    常值为 0 至 1。值 0 的状态类似于冰,值 1 会使其非常快速的静止下来,除非有很大的力或重力推动对象。
    静态摩擦力 (Static Friction):对象在某个表面上保持静止时使用的摩擦力。通常值为 0 至 1。值 0 的状态类似于冰,值 1 会使对象非常难以移动。
    弹力 (Bounciness):表面的反弹程度。值 0 不会反弹。值 1 会反弹而不损失任何能量。
    摩擦力合并模式 (Friction Combine Mode):两个碰撞对象摩擦力的合并方式。
    平均值 (Average):计算两个摩擦力值的平均值。
    最小 (Min):使用两个值的较小值。
    最大 (Max):使用两个值的较大值。
    相乘 (Multiply):摩擦力值相互相乘。合并反弹 (Bounce Combine):两个碰撞对象弹力的合并方式。其模式与“摩擦力合并模式”(Friction Combine Mode) 相同。关节Hinge Joint     链条连接  他可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。想想两个物体间连个链条,大家就理解了。 Fixed Joint    固定连接  他模拟了两个物体间存在一根杆子,固定了两个物体的相对位置和相对朝向。 spring Joint    弹簧连接  模拟两个物体间有一根弹簧,大于或者小于固定位置的时候产生相对的弹力,根据弹性系数距离偏移越大作用力越大。 Character Joint    角色关节连接模拟人体骨头间的关节连接,就是两个物体能根据一个关键点自由的朝一个方向旋转,但固定在一个相对距离,而且可以设置关节的限制。可以用在蒙皮骨骼模型上做活动关节,这样就可以做到很多游戏引擎里那种各种自由姿势的死法了。 Configurable Joint  可配置连接万能连接方式,通过配置非常多的参数和限制,你可以做到能想到的任何物体与物体间的连接方式,包括上面所有的,当然配置起来比较复杂。 常见Joint参数用法connectedBody      连接到的物体(必须是rigidbody)breakForce              物体连接断裂所需要的力breakTorque           物体连接断开所需要的扭力     当物体连接断开的时候会触发这个消息 Connected Body 连接体-------------为刚体指定的关节连接物,如不设定,则与世界相连 Anchor 锚点-----------------------主体摇摆围绕的锚点坐标,基于本地坐标系 Axis 坐标轴-----------------------摇摆方向的坐标,基于本地坐标系 Auto configure connected anchor—自动配置连接锚(这个无需更改) Use Spring 是否使用弹簧-----------弹簧使刚体相对它连接的主体达到一个特定的角度 Spring 弹簧-----------------------用于如激活Use Spring的弹簧属性    Spring 弹簧力----------------维持对象移动到一定位置的力    Damper 阻尼------------------值越大,对象移动越慢    Target Position 目标角度-----弹簧的目标角度。弹簧拉向这个角度,以角为单位 Use Motor 是否使用马达-------------Motor使对象旋转 Motor 马达------------------------用于如激活Use Motor的马达属性    Target Velocity 目标速率-----对象设法达到的速度    Force 力---------------------用于达到目标速率的力    Free Spin 自由转动-----------如果启用,Motor永远不会破坏旋转,只会加速 Use Limits 是否有限制-------------如果启用,铰链的角度将被限制在最大和最小之间 Limits 限制-----------------------用于如启用Use Limits 的边界属性    Min 最小---------------------能达到的最小角度    Max 最大---------------------能达到的最大角度    Min Bounce 最小弹跳---------物体碰触最小限制时的弹跳值(5.5.3版本好像不行)    Max Bounce 最大弹跳---------物体碰触最大限制时的弹跳值(5.5.3版本好像不行) Break Force破坏力-----------------允许这个铰链破损的力 Break Torque 破坏扭矩-------------允许这个铰链破损的扭矩 Enable Collision使碰撞------------使连接在一起的物体碰撞 Enable Preprocessing使预处理------禁用关节预处理有助于稳定不可能完成的配置

    展开全文
  • 物理引擎的基础

    千次阅读 2018-07-13 16:47:02
    两种物理引擎根据官方文档的介绍,目前有两大重要的物理引擎, Box2D 和 Chipmunk,并且cocos2d-x已经集成了它们,在3.x版本中可基于Chipmunk的核心API的物理引擎使用。一句话: cocos2d-x 3.x版本中使用Chipmunk...


    两种物理引擎

    根据官方文档的介绍,目前有两大重要的物理引擎, Box2D 和 Chipmunk,并且cocos2d-x已经集成了它们,在3.x版本中可基于Chipmunk的核心API的物理引擎使用。

    一句话: cocos2d-x 3.x版本中使用Chipmunk物理引擎更加方便了,大家都升级成3.x吧=。=

    为什么要用物理引擎

    我为什么要用物理引擎?举个开发中遇到的问题,在上一期的博文中,我们成功创建了一个hero sprite(对,就是那个可爱的僵尸)。现在我们要再创建一个坚果墙 sprite,叫做 wall sprite,它的作用是:hero会被wall而无法继续前进。

    大家都知道,如果什么都不设置,我们控制hero的时候,是会直接穿过wall sprite的。这肯定不是我们想要的,机智的霄同学就想到了一个办法:获取hero要走的下一步位置(仔细看看上一期,就会发现这并不难),然后再判断这个位置(Point)是不是存在一个精灵,如果是,就强制取消移动命令。

    好办法啊,思路清晰,我简直要为他鼓掌了。

    方法虽好,可惜我不会。之前提到过,我是一个呆呆呆呆的初学者,我只想用最方便的方式来实现我要的效我甚至不惜牺牲程序的效率来追求减少代码量,一想到要再次封装一大堆,我就烫烫烫。

    cocos2d-x physics 2D就可以完美解决这个问题,而且方法十分简单。

    存在物理规律的世界?

    我们这个世界受着来自物理规律的支配,那么物理引擎创建出来的scene也同样要存在某种物理规律,身为造物主的你可以自由定义这些规律。

    首先,我们在Demo.cpp中创建一个物理世界。

    很简单对吧?只需要将Scene::create改成Scene::createWithPhysics,在这里scene中的物理世界就算创建成功啦。

    重新创建sprites

    上一次教程中,我们创建了一个hero sprite, 创建的方法是这样的:

    太愚蠢了是不是?高贵的物理世界怎么能这样呢?...

    很遗憾,这样的创建方式是没错的,我们依然沿袭这个方法来创建sprite。

    如果此时,你开启调试,就会发现sprite没有开始自由落体运动。那到底是哪里出现了问题呢?

    这样创建出来的sprite只是一个空壳而已,它没有任何灵魂和信仰的力量(Physics body),我们此时需要给这只可怜的小家伙+1s信仰。

    这样,它拥有了一个Physics body。现在再调试,你就发现我们可爱的hero已经在自由落体了。

    可是,你不想听听createBox到底是什么意思吗?body存在一个边界,里面的空间表示sprite的实体。而这个边界有几种存在的形态:矩形、圆形和多边形。

    在刚刚的例子中,我们创建了一个矩形的边界,规定了边界范围是hero sprite的大小(png图片)。再说说之后要创建的坚果墙吧,它的形状基本趋近一个圆形,那么则可以使用createCircle的方法来创建它的body.

    setPhysicsBody顾名思义,就是将我们的灵魂(body)赋给hero sprite.

    掉...掉下去了

    看着我们的hero能够实现自由落体,我也很开心啊。可是...不一会儿,它就掉到屏幕外面去了,怎么办?

    恍然大悟,我们的背景图片(它也是一个sprite,这不能忘啊),没有被添加body。但是我们又发现一个问题,body是进不去的,所以,物理引擎专门提供了一个方法createEdgeBox,只创建边界。

    再次调试,hero稳稳地落在了地面上。

    支配我的世界

    虽然我不知道什么是G = mg,但是我知道世界上一定是有重力的,嗯。所以我们创建出来的scene中的物体也需要受到重力的作用。
    API
    看API文档了解到我们需要传入一个Vec2类型的重力参数,第一个和第二个数值是什么意思呢?我通过xcode进行调试发现:
    debug
    第二个数值为默认的重力,98。那么我们就可以通过setGravity方法来设置属于我们自己的重力了。

    先使用物理scene中的getPhysicsWorld方法来获取我们的物理世界,然后再设置重力,经过调试就可以看见hero sprite和wall sprite飞快地加速下降了。

    还有很多好玩的功能强劲的API可以供大家使用,比如getAllBodies,都等着我们去探索。

    关系到具体body的属性

    那么我想为hero sprite和wall sprite添加一些属于他们自己的物理属性,怎么做到呢?

    就像现实世界中有人质量大,有人质量小一样,我要给坚果墙设置一个极大的质量以至于不可动摇,而僵尸(our hero)就可以自由行动(如何自由行动上一期已经说过啦~)。

    就像API中所提到的,可以在创建Physics body的时候,就传入一个physics material进去。
    API

    之前我们只是传入一个sprite content进去(第一个参数),现在要传入更多的参数,使hero sprite的physics body达到我们预期的效果。

    什么是Physics Material呢?physics material

    根据API可知,我们可以调用这个类的构造函数来创建一个physics material,使得physics body获取一定量的材质。密度,还原力和摩擦力。对于我们的需求来说,只要设置必要的摩擦力就够了。

    第三个参数offset为偏移量,想要physics body和sprite的位置错开的话,可以填写这个参数。


    这些都是可以在API文档中找到设置physics body的方法,学会之后就可以随心所欲地创建属于自己的物理场景了。

    没有重力的世界

    不是所有游戏都是2D横版闯关的,比如上帝视角。
    重力在这个场景中存在吗?存在,但是它不是明目张胆地表现出来。就比如一个个小棋子,定格在棋盘上,此时我们不能为这个场景添加重力,于是:

    并且还要为sprite设置不受重力影响的效果。

    这样,我们的小棋子就定格在棋盘上了。

    动动动动起来

    既然没有了重力,我们如何让它们在存在一个作用力的情况下,让它们停下来呢?

    首先,你需要一个作用力。applyForce和applyImpulse这两个方法能够很好地帮助我们创建给物体施加的力。

    我们将物体发射到点100.0, 100.0的位置方向去。我还没来得及解释这两个方法是什么意思的时候,心急的朋友就马上开始调试了,结果发现sprite并没有按照预期的那样动起来。这是为什么呢?

    因为力不够大啊孩子,很神奇的是,我们似乎只规定了力的反向而力的大小并没有被规定,但是又如何衡量一个力的大小呢?这是一个很令人纠结的问题。

    force

    且先来看文档, 参数只要求填入一个Vec2类型的数值,而且注释是force ... 

    会不会是默认了添加1N的力呢?于是我将代码改成下面这样:

    果然,精灵动了起来。但是问题又来了,不一会,我就发现精灵根本没有停下来的意思,它在不停地运动。

    造成这种问题,主要有两个原因:1、没有摩擦力;2、添加力的方式存在问题。

    趁热打铁,我们先来解决力的问题。applyForce有什么问题吗?我们仔细看看API文档就会发现,这是添加了一个持续的力,这个力会不停地添加在sprite上,直到你手动地将其停下来。

    那么我们需要一个瞬间的力,就类似弹弓一样。applyImpulse这个时候就出场啦。这个方法能为物体添加一个瞬时的力。

    impulse

    快快快快快停下

    可是我们发现精灵还是不能很好地停下,但是至少它不会像之前那么飞奔了。

    刚刚说了,摩擦力存在问题。我们不是已经设置过摩擦力了吗?它会有什么问题呢?

    摩擦力不代表空气阻力,在cocos2d-x的物理引擎创建的世界中,是默认不存在空气阻力这个高大上的属性的。

    完蛋,物理引擎都没提供的功能,让我如何是好啊。很幸运的是,physics body提供了一个叫做setLinearDamping(设置线性阻尼)的方法。

    linear damping

    这个方法可以很好地使在无重力状态下的物体停下来。

    我将sprite body的阻尼设置为5.0f,其所产生的具体效果,肯定要在调试中才能看出。
    很好,sprite在飞一段时间后,能很好地停下来了。


    展开全文
  • H5动画物理引擎

    2020-07-29 14:18:31
    H5动画 物理引擎
  • 物理引擎介绍

    千次阅读 2012-09-29 11:35:04
    为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现。 然而,当游戏需要比较复杂的物体碰撞、滚动、滑动或者弹跳的时候(比如赛车类游戏...

     

    一、简介

    物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动、旋转和碰撞反映。为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现。

    然而,当游戏需要比较复杂的物体碰撞、滚动、滑动或者弹跳的时候(比如赛车类游戏或者保龄球游戏),通过编程的方法就比较困难了。

     

    物理引擎使用对象属性(动量、扭矩或者弹性)来模拟刚体行为,这不仅可以得到更加真实的结果,对于开发人员来说也比编写行为脚本要更加容易掌握。好的物理引擎允许有复杂的机械装置,像球形关节、轮子、气缸或者铰链。有些也支持非刚性体的物理属性,比如流体。

    物理引擎可以从另外的厂商购买,而一些游戏开发系统具备完整的物理引擎。但是要注意,虽然有的系统在其特性列表中说他们有物理引擎,但其实是一些简单的加速和碰撞检测属性而已。

     自从游戏中加入了物理引擎后就不一样了,物理引擎完全突破了以往按预定脚本执行的方式,而是要求在3D游戏中的那些物体都要遵行物理参数来运行。这样的好处就是如果你的显卡和处理器足够强大,物理引擎就能模拟真实世界中各种物体运动的规律来运动。不过所谓的“物理引擎”并不是指那些实实在在的物理效果,物理引擎和此前理解的3D游戏引擎类似,是给游戏开发者的一个平台,允许游戏开发人员只用几行代码就能在游戏中加入烟雾等效果,非常方便。

      举个简单的例子,在几年前还没有物理引擎的时候,在那种FPS游戏中,一位士兵往一个油桶旁边扔一个手雷,手雷爆炸,引起了油桶的爆炸。不过这个过程显得相当死板,不管是把手雷丢在油桶的左边还是右边,油桶都只会按照预先设计的样子爆炸,不会有区别。如果有了物理引擎,手雷扔在油桶的左边或右边都会产生不同的爆炸效果,石块会朝不同的角度飞溅起来,烟雾也会慢慢冒起来……通过物理引擎,实现这些物体之间相互影响的效果是相当简单的。这是物理计算最初给的印象,虽然这样的设计有点意思,但老是看这些爆炸场景看多以后,但总让人感觉物理引擎的效果也就仅局限于那些爆炸后石头飞起来的场景,感觉有点单一。

     

     

     

     

    1. Havok:

    效率来说Havok是软件模拟最快的。网址,http://www.havok.com/  要license的。

     

      老牌的君王,支持功能如下:

      · Collision Detection - including Continuous Physics?

      · MOPP? Technology - for compact representation of large collision meshes

      · Dynamics and Constraint Solving

      · Vehicle Dynamics

      · Data Serialization and Art Tool Support

      · Visual Debugger for in-game diagnostic feedback

      有不少游戏和软件都选择了他做物理引擎,比如HALO3,失落星球,HL2, 细胞分裂,指环王Online ..etc现在Havok被Intel收购了,以后可能对Intel的CPU会有特别的优化。

      Havok对PS2、XBOX、GameCube、PC多种游戏平台都有支持。也是世界顶级游戏公司Valve(Half Life的公司),Pandemci,Remedy等的合作伙伴。这个物理引擎曾经支持过各种类型的游戏,包括racing game,first-persion shooter,MMOGs,adventure games,puzzle games等等。Hovak还曾经负责电影Matrix的部分效果处理。

      成功案例:

      Crash Nitro Kart、Half-Life 2、Max Payne 2、Medal of Honor、F.E.A.R.、Lord of the Rings: Middle Earth Online。

    2. NovodeX --- AGEIA PhysX

    而PhysX提供的接口是非常好和简单易学的。physX SDK是可以免费使用的,只要注册就可以下载。网址,http://www.ageia.com/

    属于NVIDIA。

     

      新兴的王者,支持功能如下:

      · Massively Parallel Physics Architecture

      · High-speed GDDR3 Memory Interface

      · AGEIA Universal Continuous Collision Detection

      · AGEIA Physical Smart Particle Technology

      · AGEIA Complex Object Physics System

      · AGEIA Scalable Terrain Fidelity

      · AGEIA Dynamic Gaming Framework

      因为特有的硬件卡(物理加速卡-PPU)支持,所以能处理大量的物理运算,其他几款暂时没得比。Unreal3,GameBryo, Reality Engine等多款商业引擎和游戏都使用了他。

      NovodeX是由开发PPU的公司AGEIA进行维护,因此对于将来PPU硬件的支持,无疑NovodeX是最有优势的。NovodeX是一个模拟刚体动力学的物理引擎,支持速度,加速度,动量,冲量,碰撞等等的物理概念。NovodeX的开发库支持跨平台,多线程,高速碰撞检测等特性,专门对汽车物理的模拟做了优化。案例:

      根据官方文档,已经有超过60个游戏工作室、公司和研究机构采用了NovodeX的技术。

    扩展:(PPU介绍)

    PPU就是Physics Processing Unit(物理运算处理器),如果CPU是为了达到更快的运算速度,GPU是为了达到更好的图像效果,那么PPU就是为了使游戏更加真实。在以前的3D游戏中,大多数的背景和物体都只是一些死死的贴图效果,毫无真实感可言。而在去年发布的FPS游戏大作Half Life 2(半条命2)中,游戏开发商就给了玩家们一个非常真实的物理世界。你可以在游戏中捡起一个废纸盒,然后把它抛向远处,然后可以看见它撞击到墙壁以后反弹到上地面上,溅起一阵灰尘。接近于真实物理效果使得游戏不再是由一个个的贴图组成,任何物体都是可移动的,它们都遵守着游戏中的物理参数,组成了一个“真实”的游戏世界。

     

    3. Bullet

      开源届的霸主,支持功能如下:

      · Multi Platform support

      · Supports various shape types:

      · Discrete Collision Detection for Rigid Body Simulation

      · Single Queries:

      · Sweep and Prune Broadphase

      · Documentation and Support

      · Auto generation of MSVC project files,comes with Jam build system

      · Bullet Collision Detection works with Bullet Dynamics,but there is also a sample integration with Open Dynamics Engine.

      · Framework with 2 different Constraint Solvers

      · Hinge,Point to Point Constraint,Twist Cone Constraint (ragdolls)

      · Automatic de-activation (sleeping)

      · Generic 6 Degree of Freedom Constraint,Motors,Limits

      · LCP Warm starting of contact points

      · Collada 1.4 Physics Import using FCollada and COLLADA-DOM

      · Convex Decomposition Code

      这款物理引擎的历史也比较久了,但似乎国内知道的ODE的人更多一些,这款物理引擎被Nvidia的开发人员所关注(Nvidia前些时候说过,要用GPU来实现物理加速,可能会最先在这款物理引擎上实现。)

      (Tip: 这款引擎是开源的,有兴趣的朋友,可以看看。)

    4. ODE(Open Dynamics Engine)

            网址,http://www.ode.org/

      开源的名角,支持功能如下:

      · Rigid bodies with arbitrary mass distribution.

      · Joint types: ball-and-socket,hinge,slider (prismatic),hinge-2,fixed,angular motor,linear motor,universal.

      · Collision primitives: sphere,box,cylinder,capsule,plane,ray,and triangular mesh,convex.

      · Collision spaces: Quad tree,hash space,and simple.

      · Simulation method: The equations of motion are derived from a Lagrange multiplier velocity based model due to Trinkle/Stewart and Anitescu/Potra.

      · A first order integrator is being used. It's fast,but not accurate enough for quantitative engineering yet. Higher order integrators will come later.

      · Choice of time stepping methods: either the standard ``big matrix'' method or the newer iterative QuickStep method can be used.

      · Contact and friction model: This is based on the Dantzig LCP solver described by Baraff,although ODE implements a faster approximation to the Coloumb friction model.

      · Has a native C interface (even though ODE is mostly written in C++).

      · Has a C++ interface built on top of the C one.

      · Many unit tests,and more being written all the time.

      · Platform specific optimizations.

      · Other stuff I forgot to mention...

      嘿嘿,这个就不用做过多的介绍了,国内使用和学习这个的人比较多了。只是最近看到他的网页上有这么一句话:“Russell Smith is the primary author of ODE.”不知道是谁又伤害了这位仁兄。

      (Tip: Google一下,中文文章一大把。)

    5. TOKAMAK

      最近想通了,决定开源了。支持功能如下:

      · Joints

      · Friction

      · Stacking

      · Collision Detection

      · Rigid Particle

      · Breakage

      这个物理引擎出现也比较早了,作者是日本人,其实日本的游戏也很发达的,能把技术共享出来,难得啊。(日文的技术网站还是很多的。)

    6. Newton

      更多的专注于生活中的实例模拟。

      ⒍ Simple Physics Engine

      国产精品,支持功能如下:

      · 使用独创的快速而稳定的Tri-Mesh碰撞检测算法,使载入模型数据异常简单。SPE的碰撞检测系统从一开始就是针对三角形网格(Tri-Mesh)而设计,所以用户可以方便地使用mesh文件创建任意形状的刚体,SPE内部将自动处理所有工作。同时,SPE支持球和胶囊两种基本几何形状,方便用户创建粒子特效和ragdoll系统。此外,SPE支持一定条件下的连续碰撞检测,可以正确地处理大多数情况下的高速运动物体。

      · 碰撞信息分析。SPE对碰撞检测系统产生的数据进行智能化分析,为碰撞反应计算提供更可靠更正确的原始数据,极大地提高了系统的稳定性。

      · 稳定的碰撞与接触解决系统。从1.5版开始,SPE采用全新的解决算法,更正确地计算摩擦与反弹,而且更稳定。

      · SPE提供一种稳定的基本Joint功能,支持最大距离、弹性系数以及破坏力等参数的配置,用户可以使用它方便地创建各种其他类型的Joint。

      · 实时刚体破碎。(Beta)。SPE提供“形状操作”的功能,任何模型均可被一组平面或另一个模型切成小块,SPE生成的模型中包括用于区分原始表面与切面的属性信息,方便用户更合理地渲染出新的形状。目前,可破坏刚体的API已经开放。

      · 高并行计算。SPE已经完成了多线程化以充分利用多核心CPU的性能. 90%以上的计算任务都可均匀地分配到任意数量的线程中去. 与单线程相比,双线程至少能提供60%的性能提升,而四线程可以带来150%以上的性能提升。使用SPEWorld::SetNumThreads()即可在任何时候开启多线程计算。

      · 简单易用而人性化的接口,极大地降低了SPE与其他软件系统结合的难度,使用户在瞬间即可建立一个具有真实物理属性的世界。

     

     

    展开全文
  • 闲聊三大物理引擎

    万次阅读 2013-12-09 15:04:50
    俗称奥加物理。被Nvidia收购之后,称为:NVIDIA PhysX。 AGEIA为一家美国的无厂半导体公司(Fabless),于2002年由五名技术成员成立。在二零零五年三月九日,它在‘游戏开发者论坛’中发表了世界上第一颗采用硬件...
  • Havok物理引擎不完全指南–从入门到放弃 Havok概述 Havok,全称为Havok Game Dynamics SDK,译作Havok游戏动力开发包。 人们经常说到的,与PhysX相提并论的Havok物理模拟引擎,只是Havok引擎中的一部分而已。 Havok...
  • 物理引擎和图形引擎互相的配合

    千次阅读 2018-04-16 17:18:51
    由于还没有学习游戏引擎的相关知识,所以不太清楚物理引擎和图形引擎互相之间是怎么联系起来的。所以根据在网上找到的资料,简单讲一下这两个引擎的实现方式和互相的配合。配合: 物理引擎和图形引擎的配合可以简单...
  • Unity之物理引擎

    2019-04-17 16:14:50
    Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。...
  • unity物理引擎详解

    千次阅读 2019-06-05 20:57:07
    Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。...
  • Havok物理引擎与Unity3D的结合

    万次阅读 2017-07-12 22:43:53
    背景 在重度手游的研发过程当中,游戏中的车辆模拟,场景互动,特效展示等功能很多时候需要物理引擎的介入,以提供丰富的交互体验。目前3D手游的开发主要工具是使用Unity3D引擎,于是,如何在Unity3D的开发过程中...
  • 物理引擎与游戏引擎

    万次阅读 2012-10-27 08:26:26
    找到这些,特意送给那些分不清物理引擎和游戏引擎的童鞋们 物理引擎物理引擎通过为刚性物体赋予真实的物理属性的方式来计算它们的运动、旋转和碰撞反映。为每个游戏使用物理引擎并不是完全必要的——简单的...
  • P2物理引擎——物理小球案例

    千次阅读 2018-08-24 10:25:49
    P2物理引擎——物理小球案例 本教程为大家介绍如何实现Egret官方物理小球的示例效果,借助这个例子简单的介绍了P2物理引擎的使用。 * 第三方库的引入 * 创建一个P2物理项目 1. 第三方库的引入 首先新建一个...
  • 关于游戏的物理引擎

    千次阅读 2015-02-23 11:48:37
    类似的各种游戏都有其一定模仿真实世界物理运动规律能力,就是通过”物理引擎“去实现的,严格意义上说,”物理引擎“模仿的物理运动规律是指牛顿力学运动规律,而非量子力学运动规律。 这篇博客中提到的各种物理...
  • Bullet物理引擎的安装与使用

    千次阅读 2019-01-13 04:36:41
    图形赋予游戏一种视觉的吸引力,但是能够让游戏的世界鲜活起来的还应该是内部的物理引擎物理引擎是游戏引擎中的子模块,是一种软件组件,可仿真物理系统。它根据牛顿力学定律,计算游戏中物体的合理的物理位置,并...
  • Unity物理引擎常用属性

    千次阅读 2018-07-15 08:40:30
    Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。...
  • cocos2d-x 物理引擎

    千次阅读 2015-03-24 14:13:09
    你的游戏进展的很顺利。游戏中添加了精灵对象、游戏机制,你...这一章就来讲物理引擎和如何使用物理引擎。让我们来探讨一下,我们什么时候、什么地点、为什么会使用物理引擎吧。 物理引擎很可怕,我真的需要它么?
  • cocos2d-x3.0 物理引擎之详解 我在编写游戏的时候遇到了这个问题, 物理引擎其他的内容还好理解, 就这三个函数就是没找到有人详细的解释一下。 找了半天终于找到合理的解释,写下来好理解。 先说物理引擎: 想用这...
  • 本教程使用P2物理引擎实现了Egret官方的物理小球示例效果。如有不懂可以查看P2物理引擎GitHub地址或者是EgretP2物理系统文档。 第三方库的引入 创建一个P2物理项目 1. 第三方库的引入   首先新建一个...
  • cocos2dx 3.0 物理引擎概述

    千次阅读 2014-07-07 16:28:33
    在Cocos2d-x 2.0中,游戏直接使用物理引擎,引擎提供了一个简单的CCPhysicsSprite,处理了物理引擎的body与CCSprite的关系,而物理引擎的其他要素并没有和引擎对应起来,游戏需要选择直接调用chip
1 2 3 4 5 ... 20
收藏数 158,690
精华内容 63,476
关键字:

物理引擎