2021SC@SDUSC
上一次我针对flaxEngine 游戏引擎中的物理引擎进行系统的全面分析各种类包的内容和任务。大致了解了flaxEngine 游戏引擎中的物理系统的实体和相应的功能。所以从本次博客中我将深入代码层分析源码来对flaxEngine 游戏引擎的物理引擎进行分析。
刚体(RigidBody):
本次博客我将针对flaxEngine游戏引擎中的基本单位刚体进行源码分析。
1:什么是刚体:
刚体是物理引擎中最重要的基本单元。
其物理定义是刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对· 位置不变的物体。
而在游戏引擎中Rigidbody(刚体)可以为游戏对象赋予物理属性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的运动效果。
也就是说一个游戏模型只有添加了刚体这个组件才能使其受到物理系统的影响,所以说刚体是游戏引擎中最基本的组件,也是物理引擎受用的基本组件。换句话说刚体是物理引擎的基本组件之一。
2:flaxEngine 中的刚体:
在介绍刚体的源码前先介绍一下flaxEngine的物理引擎的模型基类(physical actors)——PhysicsActor (为actor类的子类)所有实体类都是其子类,因为是基类所以其代码量较少所规定的内容也较少,在此我将简短的介绍一下。
首先是 Actor 的构造函数 是level (土地)类的子类,至于这个土地类我稍微了解了一下大致就像我们地球的大陆一样 由土壤类 为基类 其子类 level (土地)类 上面衍生出 实体(actor)。
而PhysicsActor类则是继承自actor类
PhysicsActor类都是抽象函数其实现都是子类的内容。
刚体(RigidBody):
下面我将重点介绍一下本次源码分析的主人公 刚体
针对刚体的源码分析我们先从 rigidbody.h 文件进行分析
首先是刚体API的构造函数:
定义了其成员变量和成员函数
这里重点介绍一下其成员变量:
float_ mass :表示大小或者量
float_linearDamping :表示线性阻尼
float_angularDamping: 角阻尼
float_maxAngularvelocity: 最大角速度
float _massScale :规模
Vector3 _centerOfMassOffset: 重心
RigidbodyConstraints _constraints:刚体约束
int32 _enableSimulation : 1 :开始模拟
int32 _isKinematic : 1 :运动学
int32 _useCCD : 1 : 使用CCD
int32 _enableGravity : 1 重力
int32 _startAwake : 1 :唤醒
int32 _updateMassWhenScaleChanges : 1 更新规模
int32 _overrideMass : 1 重置规模
等等都是针对物理内容的定义。
而其成员函数大部分的针对 成员变量的get和set函数
例如 以下截图就是针对线性 阻尼的get和set函数,其他的get和set 函数这里就不在详细讲述
其他成员函数:
实体 sleep 和 wakeup 相关函数 定义 和线程库。
其次是碰撞 模型 的定义函数
OnCollisionEnter: 被碰撞
OnCollisionExit: 碰撞函数的定义
最后就是函数的重写
有关游戏的开始和结束。
本次针对刚体 中的 (Rigidbody.h)文件进行源码分析。
下次我将针对 刚体文件 的(Rigidbody.c )文件进行源码的分析。