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_canvasCanvas 后端的浏览器演示(js)页面 · 教程 · 设计
demo_gsapGSAP SVG 后端的浏览器播放器(js)页面 · 教程 · 设计

包路径为 Luna-Flow/geometry3d/<package>。架构指南展示了一帧画面如何流经它们。

阅读路线

安装

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 在每个目标上运行测试套件,并对演示做冒烟测试。