[toc] 原文的项目采用的是链式管理内存的方法 # PoolInfo 123456789101112131415161718192021222324252627282930struct FPoolInfo{ DWORD Bytes; // Bytes allocated for pool. DWORD OsBytes; // Bytes aligned to page size. DWORD Taken; // Number of allocated elements in this pool, when counts down to zero can free the...

[toc] # 追踪调用栈原理 123456789void main() { int m= 3, n= 4, s= 0; s= f( m, n); } int f( int a, int b) { int c= 2; return a+ b+ c; } 上述代码从 f() 函数开始可以用如下汇编描述 1234567891011121314151617181920push npush mcall fpush bpmov bp...

# radiance 和 iradiance radiance: 光照到表面上反射出的能量 iradiance: 入射的能量 基于反射率方程产生的三个挑战 - 1. How to get incoming radiance for any given incoming direction. - 对于人给定的入射方向如何获得入射的能量 - 2. Integral of lighting and scatting function on hemisphere is expensive - 半球表面上完整的计算照明与散射函数的消耗是昂贵的 - 3. To evaluate incoming...

[toc] # 序 RHI 前端 # 流程图 即从引擎层深入到 RHI 层的流程,流程主要如下: Engine 的每次 Run 中进入两个 Tick 逻辑 Tick 渲染 Tick 渲染 Tick 分为 SurfaceTick 和 handles 处理 SurfaceTick 中进入 RHI 的渲染流程和 UI 的渲染流程 handles 中的处理 handle 是来自 RHI 中的反向注册 RHI 流程 绘制 Frame 产生 Handles handles 处理实际的 Mesh,Material, 骨骼等 # Vulkan 延迟渲染流程 # 1....

[toc] # Pilot 引擎 Github 与课程地址 课程: https://www.bilibili.com/video/BV14r4y1p7tt?spm_id_from=333.337.search-card.all.click Pilot 引擎 Github: https://github.com/BoomingTech/Pilot # 大体逻辑 先通过 reflection 和 serializer 中定义的宏在对应需要反射的类中声明反射的 Operator 类 REFLECTION_TYPE(Quaternion) CLASS(Quaternion,...

层次包围盒是一个多叉树,用来存储包围盒形状,常见的有 AABB 包围盒树 / 球形包围盒数 # AABB 包围盒树 如上图,左边的 AABB 包围盒可以表示为右侧所示,这种表示方法比较容易理解。通常会用在光线追踪、碰撞检测、射线检测以及 NavMesh 的生成等之中,但是,在实际的项目中大部分物体都会发生位移 / 旋转或形变,于是又有一种算法是动态层次包围盒,大体思路是节点发生更新时,一层一层向上走查看自己新的位置 在 recastnavgation 里用的就是 AABB 层次包围盒,具体看 recast 学习笔记 #...

跟着烟雨的博客可以先打开下述界面 (https://www.lfzxb.top/cpp-recastnavigation-to-unity-or-server/) 其中右下角的 Build 按钮就是 Navmesh 的 Build 界面,其中 Build 是通过 **`Sample`** 类作为入口进行的, 在原项目 (RecastDemo) 中,总共有四个 Sample 派生类,分别是 Sample_Debug、Sample_SoloMesh、Sample_TempObstacles、Sample_TileMesh 以 Sample_SoloMesh 为例: 先初始化...

#include using namespace std; class A{ public: int i=3;//4 字节 virtual void testFunc (){ std::cout<<“Hello”<<std::endl; } }; class B{ public: int c=4,n=5; virtual void testFunc2(){ std::cout<<“World”<<std::endl; } }; class C : public A,public...

最近在看 ECS 架构的优点,后面忽然想到,基于节点的系统设计确实很容易在设计阶段就能够得到是现阶段想要的效果以及如果想要更改逻辑只需要连连看即可 但是有这么一种情况比如 Moba 类的游戏,如果出现一个人断线了,假设技术已经实现的情况下,这时候好处理,其他人按照预测逻辑来继续推演即可,但是如果那个人断线重连了呢? 这就出现了一个问题,帧同步是按照一帧一帧的输入确认向前进的,所以如果断线重连,假设无法计算快照 (即可类比为当前状态的哈希值,且可以解码) 的情况下,就只能从第一帧向前不断推演,这个过程是很慢的,而且不能跳过 (因为跳过就可能出现小怪血量出现问题之类的情况)。 而 ECS...

[toc] # Lua 虚拟机到执行代码流程 如上图所示步骤如下: lua_open->lua_newState 创建一个 luaState虚拟机 ,在这个过程中会触发内存分配 lua_openlibs 这个过程会注入所有的 lib lua_dofile 会执行对应的 lua 源码,do_file 时会先进行 luaL_loadfile , 然后进入 lua_pcall 执行对应的代码 最终会进入 f_parser , 通过这个函数开始词法 (lexer) 和语义 (parser) 分析 先进入 luaX_next (词法分析), 获取到...