Skip to main content

必要なクラス(Terrain class)を作っていく

🛠 ステップ⑤:Terrain クラスを作ろう!

ゲームに出てくる「地面」や「山」をつくるために、Terrain(テレイン)という 地形クラス を作ります。

これは「地形を作ったり、描いたり、調べたりする便利な道具」だと思ってください。


🧱 1. 必要な情報(メンバ変数)

地形を作るには、「点」や「三角形」、サイズなどの情報が必要です。

class Terrain {
public:
    Terrain() = default; // 何も設定しない初期状態のコンストラクタ

    void MakeTerrain(); // ← ランダムに地形を作る関数
    void Update();      // 地形の更新(今は何もしない)
    void Draw(Transform& t); // 地形を画面に描く関数

    void SetParams(const TerrainParams& params) { params_ = params; }

private:
    std::vector<Vertex> vertices_; // 点のリスト
    std::vector<uint32_t> indices_; // 三角形のリスト

    ID3D11Buffer* vertexBuffer_ = nullptr; // GPU用の頂点バッファ
    ID3D11Buffer* indexBuffer_ = nullptr;  // GPU用のインデックスバッファ
    ID3D11Buffer* globalCB = nullptr;      // 定数バッファ(カメラなどの情報)

    TerrainParams params_; // 地形のサイズ・スケール情報など

    void CreateBuffers();    // GPUにデータを送る関数
    void ComputeNormals();   // 法線(光の方向)を計算する関数
};

🔧 2. 地形の設定データ TerrainParams

params_ に入れるデータはこういう構造になっています:

struct TerrainParams {
    int width = 128;         // 横マス数(点の数)
    int height = 128;        // 縦マス数
    float scale = 1.0f;      // 1マスの大きさ(メートル)
    float heightScale = 10.0f; // 高さの最大値
};

📌 3. Vertex とは?

点(頂点)は Vertex という名前で、こう定義されています:

struct Vertex {
    DirectX::XMFLOAT3 position; // 座標(どこにあるか)
    DirectX::XMFLOAT3 normal;   // 法線(光の方向)
    DirectX::XMFLOAT2 uv;       // UV(テクスチャの貼る場所)
};

💡 補足:DirectXに必要なもの

地形を表示するには、DirectXの以下の機能を使います:

  • 頂点バッファ(点の情報)
  • インデックスバッファ(三角形のつなぎ方)
  • テクスチャ(見た目の模様)
  • 定数バッファ(カメラやライトの情報)

✅ ここまでのまとめ

名前

役割

Terrain

地形を作る・表示するクラス

Vertex

1つの点の情報(位置など)

TerrainParams

地形全体のサイズやスケール

vertices_

点の集まり

indices_

三角形のつなぎ方

Draw()

地形を画面に表示する関数