从0开始制作游戏物理引擎(七)

本章说明了射线检测Raycast算法。

大部分Raycast都是使用向量方程的数值解直接得出,这种的公式大全1都有记载不再赘述。

本文主要叙述:

  1. 射线与凸多面体求交的Slab方法(Cyrus-Beck, Liang-Barsky和Kay-Kajiya)
  2. Gino编写的对任意凸体的Raycat算法的论文2解释。此算法也用来做任意凸体之间的Sweep算法。

C++原子内存序和MESI

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

PhysX CCT设计与缺陷

本文基于PhysX5.5.0源码分析(不过PhysX在这方面从4.0开始几乎没有什么改动)。讲述了PhysX CharacterController的设计实现,以及其中存在的问题。

注:PhysX的CCT实现非常简陋(如果不是工作原因不建议看源码,有这时间不如去看看UE或者Jolt这种物理引擎的实现),而且存在很多问题。我是因为工作原因才要学习,没办法。