geometry3d

Luna-Flow/geometry3d は、Luna-Flow/linear-algebra 上に構築された MoonBit 向けの小さな 3D レンダリングパイプラインです。四角形メッシュを、同次変換、物理レンズモデル付きのルックアットカメラ、透視投影、背面カリング、ランバートシェーディング、シャドウマッピングに通し、結果をターミナル、HTML キャンバス、またはアニメーションする SVG として描きます。あえてゲームエンジンにはしていません。どの段階も読み通せる短さで、実装している数学とともに文書化されています。

このマニュアルは、MoonBit 0.10 に移行したモジュールのバージョン 0.5.1 を説明します。

パッケージ

ライブラリのパッケージは鎖をなし、それぞれが上にあるパッケージだけに依存します。下にある実行ファイルはデモです。

パッケージ役割ページ
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> です。1 フレームがそれらをどう流れるかはアーキテクチャガイドで示しています。

読み進め方

インストール

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 はすべてのターゲットでテストスイートを実行し、デモのスモークテストも行います。