geometry3d
Luna-Flow/geometry3d 是一条构建在 Luna-Flow/linear-algebra 之上的小型 MoonBit 3D 渲染管线。它让四边形网格依次经过齐次变换、带物理镜头模型的观察相机、透视投影、背面剔除、朗伯着色和阴影贴图,并把结果绘制在终端、HTML 画布上或作为动画 SVG。它有意不做成游戏引擎:每个阶段都短到可以通读,并附有其所实现数学的文档。
本手册描述该模块的 0.5.1 版本,已迁移到 MoonBit 0.10。
包
库中的各个包形成一条链:每个包只依赖其上方的包。底部的可执行程序是演示。
| 包 | 作用 | 页面 |
|---|---|---|
core | 向量、四边形网格与生成器、面法向量、可见性、朗伯亮度、4×4 变换 | API · 教程 · 设计 |
view | 观察相机、透视与正交投影、透视校正深度、传感器与镜头模型 | API · 教程 · 设计 |
frontend | 场景、与后端无关的 DrawList、阴影贴图、亮度深度缓冲、曝光、光流、时间轴 | API · 教程 · 设计 |
backend/tui | 字符帧缓冲、明暗字符表、终端宽高比校正、.tuiimg 与 .tui3d 文件 | API · 教程 · 设计 |
backend/canvas | 带精确遮挡的 HTML 画布输出(仅 js) | API · 教程 · 设计 |
backend/gsap | 按画家顺序排列的 SVG 多边形与 GSAP 播放控制器(仅 js) | API · 教程 · 设计 |
demo | 终端演示:场景、曝光效果、录制与回放(native) | CLI · 教程 · 设计 |
demo_canvas | Canvas 后端的浏览器演示(js) | 页面 · 教程 · 设计 |
demo_gsap | GSAP SVG 后端的浏览器播放器(js) | 页面 · 教程 · 设计 |
包路径为 Luna-Flow/geometry3d/<package>。架构指南展示了一帧画面如何流经它们。
阅读路线
- 初次接触 3D 图形。 先读 core 教程,再读 view 教程,然后运行终端演示。
core和view的设计页面从第一性原理推导了每个公式。 - 渲染场景。 从 frontend 教程开始,再选择一个后端教程:TUI、Canvas 或 GSAP SVG。
- 参与贡献。 阅读架构指南、仓库约定以及你要修改的包的设计页面。迁移指南说明了 0.2 版本的包拆分。
安装
moon add Luna-Flow/geometry3d@0.5.1
moon add Luna-Flow/linear-algebra@0.4.2
只有当你在自己的模块中直接使用 linear-algebra 的类型名时(例如在签名中写 @la.Vector[Double])才需要它。浏览器后端还需要 moonbit-community/rabbita@0.12.4。
工具链
本模块需要 moonc 0.10 或更高版本的 MoonBit。core、view、frontend 和 backend/tui 可在所有目标(wasm-gc、wasm、js、native)上构建。backend/canvas、backend/gsap、demo_canvas 和 demo_gsap 只能为 js 构建,终端演示面向 native。
moon check --target all
bash ./run_test.sh
run_test.sh 在每个目标上运行测试套件,并对演示做冒烟测试。
相关项目
Luna-Flow/linear-algebra提供向量和矩阵类型:https://lunaflow.cn/en/linear-algebra/。Luna-Flow/luna-generic和Luna-Flow/arithmetic提供内部使用的数值 trait:https://lunaflow.cn/en/luna-generic/、https://lunaflow.cn/en/arithmetic/。