Skip to main content

新しいDx11base設計方針



✅ 主要クラスの役割一覧

クラス名

役割

主な責務

他クラスとの関係

Dx11Base

DirectX初期化&基盤

デバイス・コンテキスト・スワップチェイン・バックバッファなどの管理

ビューポートやラスタライザ設定もここで一元化

全クラスが依存。最下層の基盤クラス

ShaderBucket

シェーダーの一括管理

.hlsl

 を読み込んで、VS/PS/IL を生成・キャッシュ

キーでシェーダー切り替えを容易にする

ModelRenderer

 や

Sprite

 など描画系から利用される

Camera

カメラ情報の管理

ビュー行列・プロジェクション行列を提供

LookAtや移動処理も持つ

ModelRenderer

 などが View/Proj を取得する

SimpleModel

モデルの純粋なデータ保持

頂点・インデックス・テクスチャ・サンプラ・名前など

必要なバッファを持ち描画準備済みの状態

ModelManager

 から生成され、

ModelRenderer

 に使われる

ModelManager

モデルの読み込み・キャッシュ

ファイルから

SimpleModel

 を生成

ハンドル付きでモデルを管理・再利用

ModelRenderer

 からハンドル経由で取得される

ModelRenderer

モデル描画の実行役

SimpleModel

 +

Transform

 情報を使って描画

内部で

Dx11Base

,

Camera

,

ShaderBucket

 を使って描画する

SimpleModel

 を渡されて描画処理を行う

Transform

(補助)

モデルの変換行列生成

SRTからWorld行列生成、法線変換行列も作成可

ModelRenderer

 が使用


🎯 クラス関係図(概略)

┌────────────┐
│ Dx11Base   │ ← デバイスやレンダリングパイプラインの基盤
└────┬───────┘
     │
┌────▼───────┐          ┌──────────────┐
│ ShaderBucket│◄────────┤ ModelRenderer │
└────────────┘          └────┬─────────┘
                             │ uses
                       ┌─────▼────────┐
                       │ SimpleModel  │◄─────┐
                       └──────────────┘      │
                                             │
                          ┌────────────┐     │
                          │ ModelManager│────┘
                          └────────────┘

┌────────┐
│ Camera │ ← View/Proj取得用
└────────┘

🧠 役割分離の利点

設計

メリット

SimpleModel

 に描画コードを持たせない

同じモデルを複数箇所で描画可能(インスタンス化)

ModelRenderer

 に描画処理を集中

ステート設定、シェーダー設定、描画の変更が一元管理できる

ModelManager

 に読み込みとキャッシュを集中

同じファイルを何度も読み込む無駄を防止

ShaderBucket

 のキー管理

"Basic3D"

"Sprite"

"ShadowMap"

など切り替えが簡単

Dx11Base

 に初期化・基盤処理を集中

DirectX設定の複雑さを隠蔽し、他クラスをシンプルに保てる


🔚 まとめ

このような分離設計は、
単体テストや差し替えがしやすく、
✅ **描画方式の拡張(PBR、影、インスタンス描画など)**にも柔軟に対応できます。

必要であれば、ModelRenderer::Draw() や ModelManager::GetHandle() など、具象的なコード実装例も提供できます。


モデル関係責任分割

クラス

責任

SimpleModel

データ所有者

:頂点・インデックス・テクスチャ等のDirectXリソース保持。

※レンダリングコードは持たない

ModelRenderer

描画担当

SimpleModel

のデータを使って描画処理を実行。Transformやシェーダーとの連携もここで処理

ModelManager

管理担当

SimpleModel

をファイルからロードし、キャッシュとして保持。ハンドル管理なども行う