PhysX CCT设计与缺陷

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

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

基于约束的物理求解

本文述说了基于约束的物理求解器,这是很多游戏物理引擎的核心。

EnTT源码分析【四】:storage

本文分析了开源项目EnTT v3.12.2的原理和实现。述说了ECS中的核心数据结构storage。

storage

storage是在sparse_set上进行封装的类,主要用于将组件(component)和实体(entity)关联起来。

引用折叠和完美转发

模板参数推导

模板参数有三种写法:

1
2
3
4
5
6
7
8
template <typename T>
void Foo(T) { static_assert(false); } // 直接使用T

template <typename T>
void FooWithRRef(T&) { static_assert(false); } // 使用T&

template <typename T>
void FooWithLRef(T&&) { static_assert(false); } // 使用T&&

根据《C++ Templates 2》的说法,第一种写法会decay(等同于调用std::decay),即:

EnTT源码分析【二】:Entity

本文分析了开源项目EnTT v3.12.2的原理和实现。述说了ECS中的Entity部分。

Entity

Entity的本质

EnTT中的Entity是正整数,或者更严谨一点,是enum class

EnTT源码分析【三】:sparse set

本文分析了开源项目EnTT v3.12.2的原理和实现。述说了ECS中的核心数据结构sparse set。

sparse set

结构介绍

sparse set是一个数据结构,用于极快速地对正整数进行增删改查并能够较好地利用CPU Cache。而EnTT中的Entity部分正式用正整数实现的。