探索 avoxelgame:一个用 APL 编写的 3D 体素引擎

探索 avoxelgame:一个用 APL 编写的 3D 体素引擎

avoxelgame 项目是一个实验性的 3D 体素游戏引擎,旨在测试 APL 的面向数组的表示法是否能为实现基于体素的游戏逻辑和世界生成提供一种更高效的方式。该项目使用 Dyalog APL 20.0 和 SDL3 构建,其目的是作为技术概念验证,而非生产级游戏。

技术架构与依赖项

该引擎采用混合方法,将 APL 的高级数组处理能力与 SDL3 的低级图形能力相结合。系统需要现代图形后端——Vulkan、DirectX12 或 Metal——才能运行。

核心要求

  • 语言运行时: Dyalog APL 20.0
  • 图形库: SDL3,包括 sdl3_ttfsdl3_image
  • C-Interop: 需要 C 编译器和 CMake 来构建 LSE (Language System Extension) 组件。
  • 硬件加速: 支持 Vulkan、DirectX12 或 Metal。

特定平台的实现

  • macOS 和 Linux: 引擎通过 main.apls 中的 shebang 进行部署,并需要使用 CMake 手动编译和安装 libLSE.dylib (macOS) 或 libLSE.so (Linux)。
  • Windows: 引擎通过 Dyalog 会话使用 ]link.createstate.Play 命令运行。Windows 用户必须使用 SDL3 开发库以及 ./libs 目录中提供的 .dll 文件。

着色器流水线与渲染

该项目使用 GLSL 进行着色器开发。源着色器位于 ./shaders/glsl,必须通过 ./compile_shaders.sh 脚本使用 DirectX Shader Compiler、glslcspirv-cross 编译成各种格式。

当前局限性与已知问题

开发者承认该项目具有高度实验性,并包含若干稳定性问题:

  • 性能: Windows 平台上存在显著的性能退化。
  • 后端支持: Windows 上目前不支持 DirectX12 后端。
  • Windows 稳定性: 在单个会话中尝试多次运行游戏时,引擎容易出现 syserror 999,这表明可能存在内存泄漏。

社区观点

围绕该项目的讨论强调了 APL 的以数组为中心的设计特性与体素数据结构之间的独特契合度。

体素世界对于 APL 来说是一个非常好的推销点:奇怪的部分是表示法,而不是模型。

其他观察者注意到项目文档中这种诚实的罕见性,称赞作者明确地将该工作标记为“一个充满漏洞的激情项目”,而不是夸大其功能。

Sources