🧪
自作ゲームエンジンでのゲーム開発...Chapter1
自作ゲームエンジン作成ノート
1. 必要なライブラリ一覧
既存のライブラリ
- GLFW: ウィンドウ作成と入力管理。
- GLAD: OpenGL関数のローダー。
- GLM: 数学ライブラリ(行列、ベクトル演算)。
- Assimp: 3Dモデルのインポート。
- Dear ImGui: デバッグ用のGUI。
追加する便利なライブラリ
-
STB(stb_image.h)
- 用途: 画像読み込み(PNG, JPG, BMPなど)。
-
セットアップ: ヘッダーオンリーのライブラリで、
include
ディレクトリに配置するだけ。
-
EnTT
- 用途: ECS(エンティティ・コンポーネント・システム)の管理。
- 特徴: パフォーマンスが高く、軽量。
- セットアップ: 公式GitHubから取得して使用。
-
spdlog
- 用途: ログ出力(ファイルやコンソールに簡単にログを記録)。
- 特徴: フォーマットが豊富で高速。
- セットアップ: ヘッダーオンリーで簡単に導入可能。
-
TinyOBJLoader
- 用途: OBJ形式の3Dモデル専用の軽量ローダー。
- 特徴: Assimpよりも軽量でシンプルな実装向け。
- セットアップ: ヘッダーオンリー。
-
nlohmann/json
- 用途: JSONデータの読み書き。
- 活用例: 設定ファイルの読み込み、シーンデータの保存など。
- セットアップ: ヘッダーオンリーで簡単に使用可能。
-
Bullet Physics
- 用途: 物理エンジン(衝突判定、剛体シミュレーション)。
- 特徴: 高性能な物理演算ライブラリ。
- セットアップ: CMakeを使ってビルドし、ライブラリをリンク。
-
ImGuizmo
- 用途: Dear ImGui用のトランスフォームギズモ(移動、回転、スケール)。
- 活用例: オブジェクトの位置や回転の直感的操作が可能。
- セットアップ: ImGuiと一緒に使用。
-
KTX-Software
- 用途: KTX/KTZ形式のテクスチャ読み込みと管理。
- 特徴: 圧縮テクスチャフォーマット(Basis Universal対応)。
- セットアップ: 公式GitHubから取得。
2. 機能別ライブラリの役割
1. ウィンドウと入力管理
- GLFW: キーボード、マウス入力処理、ウィンドウイベント管理。
2. レンダリングとシェーダー
- GLAD: OpenGL関数のローダー。
- GLM: カメラ、投影行列、モデル行列の計算。
- STB: テクスチャ画像の読み込み(PNG, JPGなど)。
3. モデルとアセット管理
- Assimp: マルチフォーマット(OBJ, FBX, DAE)のモデルインポート。
- TinyOBJLoader: 軽量なOBJ専用ローダー(必要に応じて選択)。
- KTX-Software: 圧縮テクスチャの読み込みと管理。
4. デバッグとGUI
- Dear ImGui: パラメータ調整、統計情報の表示。
- ImGuizmo: オブジェクトの位置や回転の操作GUI。
5. ECS(エンティティ・コンポーネント・システム)
- EnTT: ゲーム内のエンティティ(キャラクター、アイテム)とその状態を効率的に管理。
6. データ管理
- nlohmann/json: 設定やシーンデータの保存・読み込み。
7. ログとデバッグ情報
- spdlog: ゲームの状態を詳細に記録し、不具合を追跡。
8. 物理エンジン
- Bullet Physics: 衝突判定や剛体シミュレーションを簡単に追加。
3. 機能統合のポイント
-
GLFW + GLAD
- GLFWでウィンドウ作成後、GLADを初期化してOpenGLを利用可能にする。
-
GLM + Assimp/TinyOBJLoader
- GLMを使い、インポートしたモデルの変換やカメラの制御を簡単に実装。
-
Dear ImGui + ImGuizmo
- ImGuiでデバッグメニューを作成し、ImGuizmoでオブジェクトの操作を視覚的に行う。
-
EnTT
- ゲーム内のエンティティ(キャラクター、アイテム)とそのコンポーネント(位置、見た目、物理特性など)を分離して効率化。
-
Bullet Physics + GLM
- 物理エンジンの結果をGLMの行列やベクトルで管理し、描画と物理を統合。
-
spdlog + nlohmann/json
- ログを記録しつつ、JSONでエンジン設定やシーンの状態を保存。
Chapter2では、実際のコードとAIの活用について書きます
Discussion