Home Manual Reference Source

WebGL 拡張

概要

WebGL 実装系 (S3GL* クラス群) について説明します。

アーキテクチャ全体図

+-----------------------------------------------------------+
|                        S3GLSystem                        |
| (WebGL全体の管理/描画パイプライン・GLContext管理)        |
+---------------------+---------+--------------------------+
                      |         |
           +----------+         +--------------+
           |                                    |
    +------v-------+                      +-----v------+
    |  S3GLScene   |                      |  S3GLMesh  |
    |(Scene全体管理|                      |(メッシュ/VBO|
    +------+-------+                      +-----+------+
           |                                    |
    +------v-----------+                +-------v---------+
    |  S3GLModel       |                | S3GLTriangle... |
    |(モデル/形状/変換) |                |(三角形インデックス)|
    +------------------+                +-----------------+
           |                                    |
    +------v----------+                +--------v-------+
    |  S3GLMaterial   |                |  S3GLVertex    |
    |  (材質・uniform) |                |  (頂点情報)    |
    +-----------------+                +----------------+

レイヤ・主な責務

1. 抽象・システムレイヤ(S3Systemなど)

2. WebGLレイヤ(S3GL* クラス群)

ファイル構成

主要クラスの役割

S3GLSystem

S3GLScene

S3GLModel

S3GLMesh

S3GLTriangleIndex / S3GLTriangleIndexData

S3GLVertex

S3GLMaterial

S3GLTexture

S3GLLight

S3GLProgram

データフロー/描画パイプライン例

  1. S3GLSystem: setCanvas, setProgram, setBackgroundColor などシステム初期化
  2. メッシュ・モデル生成: createMesh, createModel、ファイル/データからメッシュ生成(例: MQOローダ)
  3. マテリアル・テクスチャ・ライトのセット
  4. シーン生成/モデル・ライト登録
  5. drawScene(scene) でシーン全体描画

    • (a) Uniforms: シーン/カメラ/ライト/マテリアルの uniform をプログラムにバインド
    • (b) VBO/IBO バインド: メッシュごとに属性・インデックスバッファをGLへ
    • (c) Draw Call: drawElements 実行で WebGL へ描画指示
const s3 = new S3GLSystem();
const program = s3.createProgram();
program.setVertexShader("...");
program.setFragmentShader("...");
s3.setProgram(program);

const mesh = s3.createMesh(); // 頂点・インデックス・マテリアル追加
const model = s3.createModel();
model.setMesh(mesh);

const scene = s3.createScene();
scene.setCamera(s3.createCamera());
scene.addModel(model);

s3.drawScene(scene); // ⇒ 描画パイプラインがすべて自動処理

モジュール依存関係

設計の特徴・意図