Home Manual Reference Source

一般

概要

このプロジェクトは、純粋なJavaScriptで3DCG描画やモデルデータの管理、各種ファイルフォーマット対応(OBJ, MQO, JSON等)を可能にするシンプルな3DCGライブラリです。 主な構成要素は、ジオメトリ(メッシュ・頂点・面)、マテリアル、ライト、カメラ、シーン管理、システムユーティリティ、各種データローダー/エクスポーターなどです。

アーキテクチャ全体図(概要)

[S3System] ──┬─> [S3Scene] ─┬─> [S3Model] ──> [S3Mesh]
             │               │                ├─> [S3Vertex]
             │               │                ├─> [S3TriangleIndex]
             │               │                └─> [S3Material]
             │               ├─> [S3Light]
             │               └─> [S3Camera]
             ├─> [S3MeshLoader] <─ [OBJ/MQO/JSON File]
             └─> [Utility: Math, Vector, Matrix, Angles]

コアモジュールの責務

S3System

S3Scene

S3Model

S3Mesh

S3Vertex / S3TriangleIndex

S3Material

S3Texture

S3Light

S3Camera

数学系ユーティリティ

メッシュローダー(データ入出力)

S3MeshLoader(Facadeパターン的役割)

S3MeshLoaderOBJ

S3MeshLoaderMQO

S3MeshLoaderJSON

拡張性について

モジュール依存関係と流れ

  1. S3Systemがすべてのファクトリ・管理・計算の中核となり、インスタンス生成も担当。
  2. S3Sceneが、各モデル・ライト・カメラを保持し、S3Systemからの描画要求で内容を渡す。
  3. S3MeshLoaderを通じて、外部3Dデータを読み込み、S3Meshへ展開。
  4. 各モデルは自身のS3Meshを持ち、ワールド変換行列はS3Systemで算出。
  5. 描画時は、S3Systemがモデル・カメラ・シーン情報からMVP行列等を組み立て、Canvasにライン/シェーディング等を描く。

シンプルな利用例

import S3 from "./S3.js";
const sys = new S3.System();
const scene = sys.createScene();
const camera = sys.createCamera();
scene.setCamera(camera);

const mesh = sys.createMesh();
// ... meshに頂点・面・マテリアル追加 ...

const model = sys.createModel();
model.setMesh(mesh);
scene.addModel(model);

sys.setCanvas(document.getElementById("canvas"));
sys.drawScene(scene);

まとめ