🧪

自作ゲームエンジンでのゲーム開発...Chapter1

2024/11/20に公開

自作ゲームエンジン作成ノート

1. 必要なライブラリ一覧

既存のライブラリ

  • GLFW: ウィンドウ作成と入力管理。
  • GLAD: OpenGL関数のローダー。
  • GLM: 数学ライブラリ(行列、ベクトル演算)。
  • Assimp: 3Dモデルのインポート。
  • Dear ImGui: デバッグ用のGUI。

追加する便利なライブラリ

  1. STB(stb_image.h)

    • 用途: 画像読み込み(PNG, JPG, BMPなど)。
    • セットアップ: ヘッダーオンリーのライブラリで、includeディレクトリに配置するだけ。
  2. EnTT

    • 用途: ECS(エンティティ・コンポーネント・システム)の管理。
    • 特徴: パフォーマンスが高く、軽量。
    • セットアップ: 公式GitHubから取得して使用。
  3. spdlog

    • 用途: ログ出力(ファイルやコンソールに簡単にログを記録)。
    • 特徴: フォーマットが豊富で高速。
    • セットアップ: ヘッダーオンリーで簡単に導入可能。
  4. TinyOBJLoader

    • 用途: OBJ形式の3Dモデル専用の軽量ローダー。
    • 特徴: Assimpよりも軽量でシンプルな実装向け。
    • セットアップ: ヘッダーオンリー。
  5. nlohmann/json

    • 用途: JSONデータの読み書き。
    • 活用例: 設定ファイルの読み込み、シーンデータの保存など。
    • セットアップ: ヘッダーオンリーで簡単に使用可能。
  6. Bullet Physics

    • 用途: 物理エンジン(衝突判定、剛体シミュレーション)。
    • 特徴: 高性能な物理演算ライブラリ。
    • セットアップ: CMakeを使ってビルドし、ライブラリをリンク。
  7. ImGuizmo

    • 用途: Dear ImGui用のトランスフォームギズモ(移動、回転、スケール)。
    • 活用例: オブジェクトの位置や回転の直感的操作が可能。
    • セットアップ: ImGuiと一緒に使用。
  8. 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. 機能統合のポイント

  1. GLFW + GLAD

    • GLFWでウィンドウ作成後、GLADを初期化してOpenGLを利用可能にする。
  2. GLM + Assimp/TinyOBJLoader

    • GLMを使い、インポートしたモデルの変換やカメラの制御を簡単に実装。
  3. Dear ImGui + ImGuizmo

    • ImGuiでデバッグメニューを作成し、ImGuizmoでオブジェクトの操作を視覚的に行う。
  4. EnTT

    • ゲーム内のエンティティ(キャラクター、アイテム)とそのコンポーネント(位置、見た目、物理特性など)を分離して効率化。
  5. Bullet Physics + GLM

    • 物理エンジンの結果をGLMの行列やベクトルで管理し、描画と物理を統合。
  6. spdlog + nlohmann/json

    • ログを記録しつつ、JSONでエンジン設定やシーンの状態を保存。

Chapter2では、実際のコードとAIの活用について書きます

Discussion