ECS & Hierarchies

本文总结自 [ECS back and forth: Part 4](ECS back and forth (skypjack.github.io)),使用生物通用神经网络翻译成简体中文,并伴有添油加醋之嫌。
文中会使用 entt 作为 ECS 库用于代码示例。

层级结构(Hierarchies)通常的做法是用一个指针来储存父子关系。在各大游戏引擎都可以见到它,或它的变种。

用 ECS 这种面向数据的编程模式来实现这种随机储存的结构,注定没有一个完美的解决方案,我们需按照实际场景来决定数据组织方式。要么使用灵活,要么性能友好,二者不可兼得。

遵循“过早的优化是万恶之源”原则,我会设立几个场景或目标,从需求出发,使用 ECS 思路来进行实现。

Read More

Share

ECS 储存数据的方式

ECS 最终目的是在冯诺依曼存算分离的架构上,降低缓存命中失效,以实现高效的运算。

Read More

Share

Rust规则书

看过一遍 Rust 的语法,如果其他语言也能按照这种思路去写,其实也可以很安全。

本文会简单梳理一下所有权、Trait、生命周期,以重新构建脑内代码思维模式。

Read More

Share

entt.1 组合遍历

过了好一阵子,私以为对 ECS 有了些许了解,在我看来 ECS 是一种 DOD(面向数据设计)的实现方法。而跟诸多数据库一样,entt 提供的是一种紧凑组织、高效遍历的数据框架,并加上各种模板元使代码组织简洁美观。

本文会讨论内存组织方式与遍历的方法。

Read More

Share

Lua Coroutine

C++20 更新了 coroutine 无栈协程的接口,westquote/SquidTasks 就已经使用它在商业产品中作为逻辑框架。它提供了一个近似 javascript 异步操作的写法来构建系统:

1
2
3
4
5
6
Task<int> LoadGame() {
co_await LoadMap("rc.umap");
auto net_handle = co_await CreateNetSession(conf.server);
co_await CreateInstance(net_handle, conf.user);
return 0;
}

这种写法的好处就在于,加载过程不阻塞启动流程,且大幅减少异步回调的函数链。本文会尝试利用 Lua 原生的 Coroutine 系统,来搭建优雅的异步框架。

Read More

Share

【dod】面向数据指南

开新坑了,这回要读一读 Richard Fabian 的 DodBook。这本书主要介绍了一些程式模式于面向数据的实现方式,但也仅仅是介绍,正文几乎没有给到任何代码范例,故我也仅仅提炼一些关键的理念,以备不时之需。

Read More

Share

【和弦分解】Low Roar《Bones》

出自 Death Stranding Orignial Sound Track

1=D, Capo=2

First of march, it’s clear to me

It’s something that’s uncomforting

Your body has a way with me

But I’m exactly where I wanna be

But I’m a long way from home

Read More

Share

看山不是山,看云不是云

回看上一篇日志,已经是一年之前的事情了,结束了百无聊赖的大学生活,开始买车买房、求职相亲……当然不是。如果生活能如此一帆风顺该多好,然而这种看似“平庸”的生活竟成了奢望。

Read More

Share

【CV】相机标定时各种参数干什么用的?!

本文高度致敬张正友的文章《A Flexible New Technique forCamera Calibration》,同时介绍如何在 OpenCV 中实现其方法。虽然看不懂原理,不过东拼西凑姑且能弄出个能用的纯过程代码,放在这里供大伙看个乐。

Read More

Share

【CMake】依赖包调用一瞥

花了一天,终于把 IK 系列连接在了一起,这一波硬读代码,属实有些影响生活了!

本文将列出几个载入外部包的方法,代码已同步至 timrockefeller/IKCMake

Read More

Share