2021SC@SDUSC
1:初步分析
flaxEngine 源码中已经将物理引擎系统单独分出一个包来,很方便我们确定代码位置。
在阅读代码之前我们需要先确定源代码的内容和整体框架。这样会让我们更加清楚读到的是什么代码而不是像无头苍蝇一样 对着源代码一顿分析一顿看结果看了半天什么也没看懂。所以我在阅读源码之前先要通过对源码大致的框架的分析和阅读在结合网上的关于游戏引擎的初步介绍来分析flaxEngine游戏引擎中的物理系统的结构,在了解和掌握不同.cpp,.h文件的作用的任务后在深入源代码进行源码的分析。
所以本次博客我将针对flaxEngine物理引擎进行框架的分析,了解不同包和.cpp,.h文件的内容和相关的作用。
在查阅相关资料下我基本确定了几次关键术语
1:actors:角色,大概是指所有参与运算的实体,也就是在场景中的运算单位
(1)刚体:物理引擎中最重要的基本单元
其物理定义是刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对· 位置不变的物体。
而在游戏引擎中Rigidbody(刚体)可以为游戏对象赋予物理属性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的运动效果。
也就是说一个游戏模型只有添加了刚体这个组件才能使其受到物理系统的影响,所以说刚体是游戏引擎中最基本的组件,也是物理引擎受用的基本组件。换句话说刚体是物理引擎的基本组件之一。
在一个物理引擎中,刚体是非常重要的组件,通过刚体组件可以给物体添加一些常见的物理属性,如质量、摩擦力、碰撞参数等。通过这些属性可以模拟该物体在 3D 世界内的一切虚拟行为,当物体添加了刚体组件后,它将感应物理引擎中的一切物理效果。
(2)SplineRopeBody
这个应该是动态的连线条:3D游戏中的线条具有线性特征。也是类似刚体一样是游戏引擎中物理模型的一个载体,也就是一个物理组件。这个组件用的并不是很多,在网上也难以找到相关资料。所以针对此组件我将在之后深入源代码进行更加细致的分析。
(3)WheeledVehicle
这个组件的用来创建有轮子的交通工具的例如—汽车等。也是一种物理引擎的组件不过是一个大组件是基于上面两种小组件形成一个大组件,而由于汽车的应用很广所以在flaxengine中直接使用刚体这个基本组件合成大组件汽车来简化操作。
2:Colldiers:碰撞体:顾名思义对撞体就是让角色(actor)具有现实中碰撞后的效果。
(1)BoxCollider:盒碰撞器
盒碰撞器是一个基本的方形碰撞原型。
可以将箱体碰撞体 (Box Collider) 大小调整为不同形状的矩形棱镜。它十分适用于门、墙壁、平台等。它还可有效地作为布娃娃中的人体躯干或车辆中的车体,用来模拟长方形碰撞。
(2)CapsuleController:胶囊碰撞体
由两个半球体与一个圆柱体相连接而构成。它与胶囊 (Capsule) 基元形状相同。
可以相互独立地调整胶囊碰撞器 (Capsule Collider) 的半径 (Radius) 和高度 (Height) 。它在角色控制器 (Character Controller) 中使用,适用于柱状物,也可以与其他碰撞器 (Collider) 结合用于异常形状。
(3) Mesh Collider:网格碰撞器
利用 网格资源 并在其上构建碰撞器。对于复杂网状模型上的碰撞检测,它要比 基元碰撞器(boxCollider、capsuleCollider等)精确的多。标记为 Convex 的网格碰撞器才能够和其他网格碰撞器发生碰撞。
(4)其他碰撞体:我在网上找到了相关的资料可以总结在一种图中
3:Joints:连接 用来模拟现实中的各种连接 比如弹簧的连接等等
(1)Hinge Joint 铰链关节
其作用是将两个刚体束缚在一起,在两者之间产生铰链效果
(2)Fixed Joint 固定关节
固定关节组件用于约束一个游戏对象对另一个游戏对象的运动。
固定关节适用于以下的情形:当希望将对象较容易与另—个对象分开时,或者连接两个没有父子关系的对象使其一起运动,使用固定关节的对象自身需要有—个刚体组件。
(3)Spring Joint 弹簧关节
弹簧关节组件可将两个刚体连接在—起,使其像连接着弹簧那样运动。
(4) Distance Joint 固定距离关节
两个刚体之间固定距离。
(5)D6 Joint :不知道具体用途在网上也找不到相关内容,在之后查看源码后,进行相关内容的解释。
本次分析就flaxengine 游戏引擎的物理系统的大致框架来进行分析。下次我将深入源代码进行物理引擎的分析。