プレイヤーを 2 つの三角形で構成された四角い壁のトンネルに入れる非常に単純なゲームを作成すると (実際に作成しました)、壁は少し退屈に見え、角度によっては方向感覚を失うことさえあります。正方形のパネルを定義するデータを取得し、Z 値をランダムに摂動して壁に奥行きを持たせる前に、各三角形をさらに細分化することで、より興味深いテクスチャをプロシージャルに生成することを考えています。
2 つの三角形は次のようになります。
typedef struct {
float Position[3];
float Color[4];
float TexCoord[2];
float Normal[3];
} Vertex;
const Vertex Vertices[] = {
// Front
{{0, 0, 0}, {1, 0, 0, 1}, {1, 0}, {0, 0, 1}},
{{1, 0, 0}, {1, 0, 0, 1}, {1, 1}, {0, 0, 1}},
{{1, 1, 0}, {1, 0, 0, 1}, {0, 1}, {0, 0, 1}},
{{0, 1, 0}, {1, 0, 0, 1}, {0, 0}, {0, 0, 1}}
};
この正方形は、壁、床、天井を作るために必要な位置に変換されます。
壁にテクスチャを配置することはできますが、壁を横から見ると (機銃掃射)、明らかに完全に平らです。現代のハードウェアには焼き尽くす三角形があるので、私はこれらの線に沿って考えています。
再帰アルゴリズムの仕事のように見えます。ただし、コーナーに関しては、Z 値をすべて 0 に戻さなければならないという問題が 1 つあります。そうしないと、パネルが 3D でタイル表示されず、プレイヤーはコーナーの隙間から見えてはならない部分が見えてしまいます。ランダムなプロセスからエッジの Z 値を除外するだけでは、見栄えが良くない可能性があります。おそらく、すべての Z 値が正の値によってのみ変更され、荒削りの石のブロック効果が生じる可能性がある場合を除きます。どちらの顔が前を向いているかを知ることは明らかに重要です。
この種のプロシージャルな生成を行ったことがありますか? もしそうなら、どのようにして壁に奥行きを持たせ、パネルの結合をどのように処理しましたか?