本文述说了在SceneQuery场景下的加速结构BVH。
本文是SceneQuery的最后一篇文章。至此,所有的SceneQuery技术都已叙述完毕。
当然还有其他空间划分方法(SAP,OctTree,K-DTree等)。但这些一般用于模拟时的空间划分,等到模拟章节再说。
绝大部分理论来自于Erin Catto的GDC分享(建议阅读)和PBRT[^1],而实现则参考PhysX5.4.0。
BVH构建更多的理论来源于渲染中光线追踪方向。其中有很多乱七八糟的BVH构建(在CPU上,或使用并行计算,或在GPU上构建)。本文不说那么多乱七八糟的,只说常用的方法。
本章说明了射线检测Raycast算法。
大部分Raycast都是使用向量方程的数值解直接得出,这种的公式大全都有记载不再赘述。
本文主要叙述:
- 射线与凸多面体求交的Slab方法(Cyrus-Beck, Liang-Barsky和Kay-Kajiya)
- Gino编写的对任意凸体的Raycat算法的论文解释。此算法也用来做任意凸体之间的Sweep算法。
本文说明了游戏开发中的寻路算法。从BFS到Dijkstra到A*以及A*的变体等。
大部分参考这篇由浅入深的文章
这一章描述了判交和MTD算法,包括SAT等。
大部分的判交算法都在公式大全中有推导。这里只记录一些难理解的。
这一章描述了各种几何体的最近点计算
大部分的算法在公式大全中都有详细推导。我只记录一些较难理解的。
这一章描述了物理引擎的结构,并对整个系列文章的路线进行介绍
在使用C++ atomic原子变量的时候,需要指定内存序(memory order),比如memory_order_relaxed,memory_order_acquire等。我一直没搞明白这些内存序是在做什么。这几天深入理解了一下于是写下这份文章。