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_canvas | Canvas バックエンドのブラウザデモ(js) | ページ · チュートリアル · 設計 |
demo_gsap | GSAP SVG バックエンドのブラウザ用プレーヤー(js) | ページ · チュートリアル · 設計 |
パッケージのパスは Luna-Flow/geometry3d/<package> です。1 フレームがそれらをどう流れるかはアーキテクチャガイドで示しています。
読み進め方
- 3D グラフィックスが初めての方。 core チュートリアル、次に view チュートリアルを読み、ターミナルデモを動かしてください。
coreとviewの設計ページでは、各式を第一原理から導いています。 - シーンを描画したい方。 frontend チュートリアルから始め、バックエンドのチュートリアル(TUI、Canvas、GSAP SVG)を 1 つ選んでください。
- コントリビュートしたい方。 アーキテクチャガイド、リポジトリの規約、触るパッケージの設計ページを読んでください。移行ガイドではバージョン 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は内部で使う数値トレイトを提供します:https://lunaflow.cn/en/luna-generic/、https://lunaflow.cn/en/arithmetic/。