GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总
文章目录
- 0 入门资料
- 1 物理引擎
- 基本概念
- Actor & shapes
- Rigid body dynamics
- Collision Detection
- Collision Resolution
- 应用与实践
- Character controller
- Ragdoll
0 入门资料
- GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibili
- GAMES104官方账号 - 知乎
- 课程主页
- 课程小引擎Piccolo
- 课件:
- GAMES104_Lecture10_Physics System_Basic Concepts.pdf
- GAMES104_Lecture11_Physics System_Applications.pdf
1 物理引擎
- 物理引擎的用途:
- 碰撞检测
- 解决碰撞、其它约束限制
- 更新所有物体的世界坐标(world Transform)
基本概念
Actor & shapes
Actor
- 静态 static actor:不会移动,阻碍你
- 动态 dynamics actor:符合动力学原理,可以被 forces、torque、impulse影响
- 触发器 trigger
- kinematic actor:可以违背物理学,让它按照设计的运动
Actor Shapes
- 求交点
| Shapes | 图例 | 备注 |
|---|---|---|
| Spheres 球体 | ![]() | |
| Capsules 胶囊体 | ![]() | - 人体 |
| Boxes 盒子 | ![]() | |
| Triangle Meshes 三角 | ![]() | - 必须是密闭的 - Dynamic actors 不能使用 |
| Height Fields | ![]() | - 用于地形 |
Shape 的属性
- 质量/密度 Mass and Density
- 质心 Center of Mass
- 摩擦力/弹性 Friction & Restitution :受到物理材质的影响
- 力 Forces:常见的力包括拉力、重力、摩擦力
- 冲力/冲量 impulse:例如爆炸
- 移动 movement
半隐式欧拉积分

- 【优点】
- 容易模拟
- 较稳定
- 【缺点】
- 实际消耗时间比真实时间要久一点
Rigid body dynamics
| 粒子动力学 Particle Dynamics | 刚体动力学 Rigid body Dynamics |
|---|---|
| 位置 Position x ⃗ \vec{x} x | 旋转 Orientation R \boldsymbol{R} R |
| 线速度 Linear Velocity v ⃗ = d x ⃗ d t \vec{v}=\frac{\mathrm{d} \vec{x}}{\mathrm{~d} t} v= dtdx | 角速度 Angular velocity ω ⃗ = v ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\omega}=\frac{\vec{v} \times \vec{r}}{|\vec{r}|^2} ω=∣r∣2v×r |
| 加速度 Acceleration a ⃗ = d v ⃗ d t = d 2 x ⃗ d t 2 \vec{a}=\frac{\mathrm{d} \vec{v}}{\mathrm{~d} t}=\frac{d^2 \vec{x}}{d t^2} a= dtdv=dt2d2x | 角加速度 Angular acceleration α ⃗ = d ω ⃗ d t = a ⃗ × r ⃗ ∣ r ⃗ ∣ 2 \vec{\alpha}=\frac{\mathrm{d} \vec{\omega}}{\mathrm{d} t}=\frac{\vec{a} \times \vec{r}}{|\vec{r}|^2} α=dtdω=∣r∣2a×r |
| 质心 Mass M = ∑ m i M=\sum m_i M=∑mi | 转动惯量 Inertia tensor I = R ⋅ I 0 ⋅ R T \mathbf{I}=\mathbf{R} \cdot \mathbf{I}_{\mathbf{0}} \cdot \mathbf{R}^{\mathrm{T}} I=R⋅I0⋅RT |
| 动量 Momentum p ⃗ = M v ⃗ \vec{p}=M \vec{v} p=Mv | 角动量 Angular momentum L ⃗ = I ω ⃗ \vec{L}=\mathbf{I} \vec{\omega} L=Iω |
| 力 Force F ⃗ = d p ⃗ d t = m a ⃗ \vec{F}=\frac{d \vec{p}}{d t}=m \vec{a} F=dtdp=ma | 力矩 Torque τ ⃗ = d L ⃗ d t \vec{\tau}=\frac{d \vec{L}}{d t} τ=dtdL |
Collision Detection
- 碰撞检测:东西是否撞上了
| 碰撞检测的两个阶段 | 方法 | |
|---|---|---|
| 粗筛 | 1. 直接用AABB找到相交的刚体 2. 找到潜在的重叠刚体对 | 1. BVH Tree 2. Sort and Sweep |
| 细筛 | 1. 进一步检测重叠 2. 得到相交信息 1. 相交点 2. 相交法线 3. 穿透深度 | 1. Basic Shape Intersection Test 2. MinkowskiDifference-based Methods 3. Separating Axis Theorem |
- Basic Shape Intersection Test
| 圆与圆碰撞 | 圆与胶囊体碰撞 | 胶囊体与胶囊体碰撞 |
|---|---|---|
![]() | ![]() | ![]() |
- MinkowskiDifference-based Methods
| 碰撞 | 未碰撞 |
|---|---|
![]() | |
![]() | |
- Separating Axis Theorem(SAT)
- 一定能找到一根轴,分离两个凸包
| 碰撞 | 不碰撞 | |
|---|---|---|
| 2D 情况 | ![]() | ![]() |
| 3D 情况 | ![]() | ![]() |
- 连续碰撞检测 Continuous Collision Detection(CCD)
Collision Resolution
- 如何处理碰撞?分离
| 方法 | 具体方法 | |
|---|---|---|
| 加入Penalty Force分离 | 加一个反向的惩罚力 | |
| 转为约束问题 | 解决速度约束 | 不断尝试给一个冲量![]() |
| 解决位置约束 | 见 ragdoll - joint constraints |
应用与实践
Character controller
- 反物理的系统:摩擦力无穷大
- 用 Kinematic Actor
- 不受物理规则影响
- 推动别的物体
- 形状
- 双层胶囊
- Sweep test
- 与物体碰撞后,往旁边平移
- Stepping 爬楼梯
- 尝试往上提,再往前走
Ragdoll

- 人体的 joint 约束(joint constraints)
| Hinge 铰链 | Ball-and-socket 球窝 | Pivot 枢轴 | Saddle 鞍状 | Condyloid 髁状突 | Gliding 滑行 |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
相关文章:
GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总
文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…...
【linux】Xorg的工作原理
介绍 在linux系统上执行nvidia-smi时,总有一个进程占用gpu。 1 N/A N/A 2174 G /usr/lib/xorg/Xorg 4MiB /usr/lib/xorg/Xorg 是与X Window System(简称X11或X)相关的一个应用程序。X Window System是一个…...
02-docker下部署seata
官方部署文档 http://seata.io/zh-cn/docs/ops/deploy-by-docker 配置参数说明 http://seata.io/zh-cn/docs/user/configurations 1、镜像拉取 docker pull seata-server2、复制配置文件 mkdir /home/server/seata cd /home/server/seata docker run -d -p 8091:8091 -p 709…...
回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测
回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…...
精益生产咨询背后的秘密:企业如何实现价值最大化
精益生产,起源于丰田生产系统,是一种集中于削减浪费、优化流程、提升顾客价值的生产方法。它的核心在于确保每一步生产过程都能为顾客创造价值。以下是实现精益生产咨询的详细步骤: 1.确定客户价值 一切从顾客需求出发。企业需深入理解顾客…...
创建SERVLET
创建SERVLET 要创建servlet,需要执行以下任务: 编写servlet。编译并封装servlet。将servlet部署为Java EE应用程序。通过浏览器访问servlet。编写servlet 要编写servlet,需要扩展HttpServlet接口的类。编写servlet是,需要合并读取客户机请求和返回响应的功能。 读取和处…...
python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索
课程目标 了解树/图的深度遍历,宽度遍历基本原理;会使用python语言编写深度遍历,广度遍历代码;掌握拓扑排序算法 搜索算法的意义和作用 搜索引擎 提到搜索两个子,大家都应该会想到搜索引擎,搜索引擎的基…...
thinkphp5实战之phpstudy v8环境搭建,解决Not Found找不到路径问题
引言 thinkphp以快速、简约的大道至简的思想广受欢迎,适合开发小型项目。本地环境下,phpstudy v8是一款比较优秀的集成环境软件。部署完项目后,访问的时候傻眼,报错。 解决方案 不要慌,这个是伪静态的原因。选择apach…...
fastjson-BCEL不出网打法原理分析
FastJson反序列化漏洞 与原生的 Java 反序列化的区别在于,FastJson 反序列化并未使用 readObject 方法,而是由 FastJson 自定一套反序列化的过程。通过在反序列化的过程中自动调用类属性的 setter 方法和 getter 方法,将JSON 字符串还原成对…...
部署mysql主从同步,部署mysql数据读写分离结构+mycat2
主要命令 [rootmysql59 ~]# yum –y install mysql-server mysql[rootmysql59 ~]# systemctl start mysqld[rootmysql59 ~]# vim /etc/my.cnf.d/mysql-server.cnf[mysqld]server-id59log-binmysql59:wq[rootmysql59 ~]# systemctl restart mysqld//用户授权[rootmysql59 ~]# my…...
【最新!超详细C++入门】
01_C语言基础 一、课程目标 1、掌握 C基本语法:变量、常量、注释、标识符命名规范 2、掌握C数据类型 3、掌握C的输入和输出 4、掌握C运算符和表达式 5、掌握条件语句 6、掌握循环语句 二、课程内容 1 C初识 1.1 第一个C程序 编写一个C程序总共分为4个步骤…...
【Linux】【实战系列】10 分钟掌握日常开发中 Linux 网络处理相关命令
文章目录 lsofnetstatpingnslookupsshssh-keygenscpsftp 网络工具 curl网络工具 wget最后个人简介 hello,大家好,我是 Lorin,上一期和大家分享一期日常开发中常用的 Linux 文件和文本命令实战教学,这一期给大家带来常用的网络处理…...
语义分割常用评价指标
在图像处理领域中,语义分割是很重要的一个任务。在实际项目开发中,评估模型预测效果以及各指标的含义对于优化模型极为重要。 本文将主要评价指标的计算算法进行了详细说明,并加上注释解释每个指标的含义。这对理解各指标背后的数学原理以及能否在实践中应用或许有…...
从0开始学习C++ 第一课:你的第一个C++程序
第一课:你的第一个C程序 当然可以。让我们从C的基础开始,我们的第一课将覆盖以下几个主题: 程序结构编写和运行你的第一个C程序基本的输入输出(I/O) 第一课:你的第一个C程序 在C中,所有的程…...
Dubbo-admin监控中心
监控中心 Dubbo-admin监控中心执行操作启动provider和consumer项目进行测试总体流程 Dubbo-admin监控中心 dubbo-admin下载路径 git clone https://github.com/apache/dubbo-admin.git图1-1 dubbo-admin项目文件展示 执行操作 # 启动zookeeper# 前端 cd dubbo-admin-ui npm i…...
216. 组合总和 III - 力扣(LeetCode)
题目描述 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 输入示例 k 3, n 7输出示例 [[1,2,…...
LeetCode-题目整理【5】:O(1) 时间插入、删除和获取随机元素
RandomizedSet结构体存在切片和哈希表的原因: 变长数组由于可以根据下标定位到特定元素,因此可以在 O(1)的时间内完成获取随机元素操作,但是由于无法在 O(1) 的时间内判断元素是否存在,因此不能在 O(1) 的时间内完成插入和删除操作…...
服务器感染了.wis[[Rast@airmail.cc]].wis勒索病毒,如何确保数据文件完整恢复?
导言: 在当今数字化的时代,恶意软件攻击已经变得越来越复杂和狡猾,[[MyFilewaifu.club]].wis [[backupwaifu.club]].wis[[Rastairmail.cc]].wis勒索病毒是其中的一种新威胁。本文91数据恢复将深入介绍[[MyFilewaifu.club]].wis [[backupwaif…...
ContentNegotiationManagerFactoryBean 内容协商
一.什么是内容协商 简单点说,就是同一资源,可以有多种表现形式,比如xml、json等,具体使用哪种表现形式,是可以协商的。 这是RESTfull的一个重要特性,Spring Web MVC也支持这个功能。 1.Spring MVC REST是如何决定采用…...
html css js 开发一个猜数字游戏
以下是一个使用HTML、CSS和JS开发的简单猜数字游戏的示例: HTML代码: <!DOCTYPE html> <html> <head><title>猜数字游戏</title><link rel"stylesheet" type"text/css" href"style.css&quo…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...




















