4.7k 4 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # 「Scene Queries」AABBTree—— 下 下篇主要介绍 AABBTree 的增量版本 ——IncrementalAABBTree。阅读本文之前建议请先了解 「Scene Queries」AABBTree—— 上,不然很可能看的迷迷糊糊 (~ ̄▽ ̄)~ IncrementalAABBTree 相比于 AABBTree 最大的区别在于支持了插入删除时能够动态更新树结构(旋转操作,并且由于动态特性,一定程度上简化了数据结构,没那么扣扣嗖嗖了~ #...
11k 10 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # 「Scene Queries」AABBTree—— 上 AABBTree 是 PhysX 用来实现场景查询的基本数据结构,通过 AABBTree 可以实现高效的 AABB 粗筛,从而提高物理检测的查询效率。 之所以把 AABBTree 单独拎出来说,主要是因为其涵盖的内容较多。当作一个单独的篇幅来展开讨论完全合适~ # AABBTree 中的数据组成 AABBTree 中的类变量总计有十个: PxU32* mIndices;PxU32...
3.6k 3 分钟

纯粹记录个人知识盲区,并系统性的做个学习 # C++ 中的 extern extern 可以应用于「变量」「函数」和「模板」,用于只声明不定义。 这里有个比较严格的规则:所有常规「变量」「函数」「模板」可以多次声明,只能有一次定义;这个很好理解,如果定义多次的情况下,编译器也不清楚改用哪次的定义作为最终的结果。 这里先做个简单的测试: // test_extern.h#pragma onceint a;void func() {}template<typename T1>void func(T1...
17k 15 分钟

本文主要是介绍一些个人开发过程中遇到的奇怪代码,奇怪并非指代代码错误或写法低效,单纯个人知识盲区 # 杂项 # new 运算符和对象初始化 一般调用构造函数的时候,都会初始化对象里的变量,如果不指定的情况下就会执行零构造,对于以下代码,想必大家都很熟悉: class CMyClass{ int c;}CMyClass a = new CMyClass();// a.c == 0初始化一个类对象,但其中实际还隐含了一个操作 —— 值初始化。这一步实际上会把 CMyClass 中的成员 c 初始化为...
9.5k 9 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档 # PhysX——Transform 篇 用于描述 PhysX 系统下 Transform 操作的类,其提供了两个数据: PxQuat q:用于描述旋转的四元数 q PxVec3 p:用于描述平移的向量 p # PxVec3 一个三维向量,用于表示一个物体从 A 点移动到 B 点所需的方向和距离 # PxQuat 四元数,用于描述三维空间下角度变化的数据结构,说到四元素,这里就不得不提到「旋转矩阵」和「欧拉角」,三者均用于表示空间层面的旋转。 四元数:由四个数字组成 旋转矩阵:由 3X3...
13k 12 分钟

# UE 基础篇 # Unreal 中常见类说明 # UObject 所有 UE 对象的基类 # UClass 用于描述 UObject 类型的类型 # FField 字段,组成复杂结构的基本单元 # UField 成员(成员字段 | 成员函数 | 成员结构),于 Unreal4.25 更新后移除了成员字段的作用,仅作为成员函数和成员结构使用。 https://docs.unrealengine.com/4.27/en-US/WhatsNew/Builds/ReleaseNotes/4_25/ # Unreal 中反射和类关系 #...
3k 3 分钟

# UE 蓝图篇 蓝图作为 Unreal 的大杀器,为 Unreal 提供了可视化编程的能力,把一些代码层面的概念通过可视化形式实现,从而能够让艺术家和策划们实现更为复杂的逻辑。 一句话讲:让不会写代码的人,可以基于已有的内容,通过排列组合的形式实现复杂业务。 # 蓝图类型 Unreal 4 的蓝图目前有以下几种: /** Enumerates types of blueprints. */UENUM()enum EBlueprintType{ /** Normal blueprint....
16k 14 分钟

以下为个人学习笔记整理。B 站课程传送门 # CMake CMake 是用来统一编译代码,相当于是执行编译的自动化脚本。定义 CMakeLists.txt 以后,就不需要对项目代码进行逐个的编译。 # 编译一个简单代码 main.cpp #include <iostream>int main(){ std::cout << "hello world" << std::endl; return...
4.3k 4 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # PhysX——Memory Management 篇 (未完待续) PhysX 所有对象的分配都是基于 Foundation 内的 PxAllocatorCallback 完成,这里以 PsPool 作为按理简单介绍一下 先来看看 Pool 的构造函数,这里稍微有些绕: // 通过泛型模板定义好该类型的分配器 Alloctemplate <class T, class Alloc = typename AllocatorTraits<T>::Type>...
718 1 分钟

以下为个人学习笔记整理。参考 PhysX SDK 3.4.0 文档,部分代码可能来源于更高版本。 # PhysX 内置容器介绍(未完待续) 本文主要归纳了 PhysX 里看到的一些内置容器,因为用的时候每次都要确认一下,干脆做个系统记录。 # 基础容器 # Array 常规数组,支持扩容。插入时如果容量不够了触发扩容,每次扩容容量翻倍。 # InlineArray 支持提前分配好 N 个元素的 Array。 # Pool Pool 其实是一个维护多个指针的数组,其继承自 PoolBase: mSlabs:InlineArray 的数组指针,初始时大小为...