自分でランダムな地形?を作って表示する。テクスチャもつける
🌱 ステップ①:データの設計(どんな情報を使うか?)
地形を作るには「たくさんの点(てん)」が必要です。
この点は「頂点(ちょうてん)」と呼ばれていて、1つ1つの頂点には次のような情報があります:
名前 | 何の情報? |
|---|---|
position | その点がどこにあるか(x, y, z) |
normal | 光の当たり方(かたむき) |
uv | 絵(テクスチャ)の貼り方 |
これをたくさん集めて、「地面の形」を作っていきます。
地面の形は三角形をたくさん並べてできていて、三角形のつなぎ方を indices という番号のデータで管理します。
🧺 ステップ②:データの準備(どうやってデータを持っておく?)
C++のクラスで、Terrain(テレイン)という「地面クラス」を作ります。
中にはこんな変数があります:
std::vector<Vertex> vertices_; // 点の集まり(地面の形)
std::vector<uint32_t> indices_; // 三角形のつなぎ方(番号)
int width, height; // 地面の横と縦のマスの数
float scale; // 1マスの大きさ(例:1.0f = 1メートル)このクラスで、地面を作ったり、表示したりできるようになります!
🌋 ステップ③:ランダムに地形を作る(でこぼこをつけよう!)
MakeTerrain() という関数で、地面をランダムにでこぼこさせます。
ここでは「サイコロのような乱数(ランスウ)」を使って、山や谷を作ります:
float y = ランダムな数 * 高さの倍率;そして、点を1マスずつ作っていきます:
for (int z = 0; z < 高さのマス数; z++) {
for (int x = 0; x < 横のマス数; x++) {
Vertex v;
v.position = { xの位置, yの高さ, zの位置 };
...
vertices_.push_back(v);
}
}そのあと、「マス」を三角形2枚にわけて、indices_ に三角形を作ります。
🖼️ ステップ④:地形を画面に表示する(ゲームの絵にする!)
できあがった vertices_ と indices_ を「GPU(じーぴーゆー)」に送って、DirectXで描きます。
context->IASetVertexBuffers(...); // 頂点(点)の情報をセット
context->IASetIndexBuffer(...); // 三角形のつなぎ方をセット
context->DrawIndexed(...); // 実際に画面に描く!描くときには、光の当たり方や、テクスチャ(地面の絵)も設定して、見た目をよくします。
✅ まとめ
ステップ | やることの意味 |
|---|---|
データの設計 | 地面に必要な情報を決める(点や三角形) |
データの準備 | 地面の形を覚えるための変数を作る |
ランダム地形生成 | 高さをランダムに決めて地形を作る |
地形の表示 | 地形のデータをGPUに送って画面に描く |