EPA论文解析

本文是Gino van den Bergen写的EPA1论文解析。

GJK算法只能获得两个不相交物体之间的距离以及最近点对,或者判断两个物体是否相交。但在相交时无法确定穿透深度和挤出距离。使用EPA可以解决这个问题。

本论文的大部分前置知识都基于Gino之前写的GJK优化论文。建议先看。此论文中也有对这些知识的回顾,但本文不再赘述。

GinoGJK论文解析

本文是《A Fast Robust GJK Implementation for Collision Detection of Convex Object》1论文的解读。

此论文基于GJK原始论文2。阅读本文前也可阅读原始论文,或阅读我这篇的原始论文解析。

由于这篇论文是Gino Van Den Bergen写的。我后文中就称其为GinoGJK。

GinoGJK是目前游戏物理引擎中广泛采用的GJK实现。此论文的代码在Github3。几乎是现代GJK的标准实现。十分建议参考。本论文也是偏工程向的,看起来比原始GJK论文舒服很多。

本论文的算法假定在$R^3$下。但可以推广到$R^n$。

Gino Van Den Berge这个人也有著作《Collision Detection in Interactive 3D Environments》4。里面详细描述了此论文的GJK实现(以及后续他发布的带有Margin的GJK和EPA的论文实现)。

GJK原始论文解析

本文是对GJK原始论文1的解析。着眼于GJK算法本身的正确性证明,以及阐述数值上的缺陷。补充了一些原论文中证明的省略步骤。

建议看过更白话的文章中的GJK,了解GJK整体算法流程之后再看。

C++原子内存序和MESI

在使用C++ atomic原子变量的时候,需要指定内存序(memory order),比如memory_order_relaxedmemory_order_acquire等。我一直没搞明白这些内存序是在做什么。这几天深入理解了一下于是写下这份文章。