
物理引擎
文章平均质量分 95
由浅入深,逐步剖析物理引擎实现原理。
游蓝海
游戏编程
展开
-
物理引擎学习-开篇
物理引擎是游戏引擎中一个非常重要的基础模块,也是一个非常有趣的模块。虽然现在商用的物理引擎已经很多了,而且都非常成熟,但是引擎毕竟不是万能的,有些特殊场合还是需要自己去实现。比如:要实现一个小游戏,使用很简单的碰撞检测就够了,引入庞大的物理引擎,效率反而低而且不够灵活;要实现一些超自然场景。比如宇宙类宏观题材,或是量子等微观题材,本来常规的物理定律就不适用,更别说是基于常规物理定律实现的物理引擎了;运动的物体数量太多的游戏,比如弹幕类游戏。这种情况下,物理引擎可能就是瓶颈之一了,也许我们要的仅仅是碰原创 2020-08-30 15:01:08 · 2027 阅读 · 4 评论 -
物理引擎学习08-AABB树
AABB树是由AABB结点构成的二叉树,常用来加速场景中的射线检测和碰撞检测。树的每个结点都是一个包围盒,且结点的包围盒包裹了所有子结点的包围盒。本文深入的讲解了AABB树相关的算法,以及结合物理引擎使用。原创 2022-05-19 00:41:27 · 6570 阅读 · 1 评论 -
物理引擎学习07-小游戏飞机大战
到目前为止,碰撞检测的基本内容(狭义的碰撞检测)已经讲完了。广义的碰撞检测,我们到下一阶段再继续。本小节,在上节“碰撞反馈”的基础之上,扩展支持多物体间的碰撞检测。使用最简单的方法来检测哪些物体间会发生碰撞。算法每次遍历所有的物体,两两之间进行碰撞检测测试。所以时间复杂度是O(N2)O(N^2)O(N2)。算法伪代码:for i = 1 to n - 1 do for k = i + 1 to n do 检测物体 i 和物体 k 是否发生了碰撞 endendGJK碰原创 2021-08-22 17:15:33 · 792 阅读 · 1 评论 -
物理引擎学习06-碰撞反馈
原本计划06章是一个碰撞检测的小demo,上手之后才发现,碰撞反馈也是一个非常复杂的话题,所以就单拎出来一章,详细说明。碰撞反馈是基于碰撞检测的结果,将发生接触的物体分离开,同时应用上物理效果,使碰撞表现的接近于自然情况。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 刚体运动1.1 刚体的概念刚体,英文称作Rigidbody,是物理世界中的一个基本运动单元,包含了位移、旋转、质量、速度、力等物理属性。在物理引擎中,通常会把刚体看做是一个不可见的点,通过附加上不同的形状,才能与其他物原创 2021-02-08 19:00:31 · 1922 阅读 · 4 评论 -
物理引擎学习05-GJK和EPA计算穿透向量
EPA,是扩展多边形算法(Epanding Polytop Algorithm) ,用来计算两个多边形碰撞的穿透深度。本文的写作目的,主要是对GJK和EPA算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇,本篇是第三篇,强烈建议从第一篇开始看:GJK碰撞检测算法基础GJK计算多边形之间的最近距离GJK和EPA计算穿透向量本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 基本原理当碰撞发生时,原点到最近的闵可夫斯基差集多边形的边(下文称作原创 2020-08-30 15:05:14 · 4917 阅读 · 8 评论 -
物理引擎学习04-GJK计算多边形之间的最近距离
计算多边形之间的最近距离,才是GJK算法原本的目的。只有两个多边形不相交,计算最近距离才有效。如果相交,则最近距离无效,但是可以使用EPA算法要计算碰撞深度。本文的写作目的,主要是对GJK算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇,本篇是第二篇,强烈建议从第一篇开始看:GJK碰撞检测算法基础GJK计算多边形之间的最近距离GJK和EPA计算穿透向量本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。文章目录1. 基本原理2. 算法解析2.1原创 2020-08-30 15:04:07 · 6428 阅读 · 4 评论 -
物理引擎学习03-GJK碰撞检测算法基础
GJK是由Gilbert,Johnson,Keerthi 三位前辈发明的,用来计算两个凸多面体之间的碰撞检测,以及最近距离。GJK算法可以在O(M+N)的时间复杂度内,检测出碰撞,算法在每次迭代的过程中,都会优先选择靠近原点的方向,因此收敛速度会很快。算法的证明过程比较复杂,但是原理还是比较容易理解的。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。本文的写作目的,主要是对GJK算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇:GJK碰撞检测算法基础原创 2020-08-30 15:02:59 · 12731 阅读 · 6 评论 -
物理引擎学习02-分离轴碰撞检测
分离轴碰撞检测算法,SAT(Separating Axis Theorem),适用于凸多边形之间的碰撞检测。 如果能找到一个轴,将两个多边形分离,则说明两个多边形不相交。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1.传统分离轴算法传统的算法是找到一个分离轴,得到分离轴的垂线(投影轴),然后将两个多边形的所有点都分别投影到该垂线上,如果两个多边形的投影区间不重叠,说明不相交。投影轴,需要选择两个多边形的所有边的垂线。算法的复杂度为:O((M+N)2)O((M+N)^2)O((M+N)2)。原创 2020-09-06 13:22:02 · 2096 阅读 · 0 评论 -
物理引擎学习01-碰撞检测基础内容
碰撞检测的基础内容很多,这里仅挑一些常用的和经典的内容进行说明。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 常用的向量知识1.1 向量点乘向量点乘常用于计算向量之间的投影长度和夹角。如果夹角小于90度,则点乘结果为正数;大于90度则为负数。a⋅b=∣a∣∣b∣cos(θ)=axbx+aybya \cdot b = |a||b|cos(\theta) = a_x b_x + a_y b_ya⋅b=∣a∣∣b∣cos(θ)=axbx+ayby1.2 向量叉乘2D向量叉原创 2020-09-06 20:04:29 · 1344 阅读 · 0 评论