4

現在、ちょっとした楽しみのために小さなプロジェクトに取り組んでいます。OpenGL を使用した C++、WinAPI アプリケーションです。

六角形のグリッドでプレイされる RTS ゲームになることを願っています。基本的なゲーム エンジンが完成したら、さらに拡張する予定です。

現在、私のアプリケーションは、頂点と高さマップの情報を保持する VBO で構成されています。高さマップは、中点変位アルゴリズム (ダイヤモンド スクエア) を使用して生成されます。

六角形グリッドを実装するために、ここで説明したアイデアを採用しました。通常のグリッドの奇数行を下にシフトして、複雑になりすぎずに六角形を比較的簡単にレンダリングできるようにします (願っています)。

数日後、まとまり始め、マウス ピッキングを追加しました。これは、グリッド内の各ヘックスを一意の色でレンダリングし、この FBO 内の特定のマウス位置をサンプリングして、選択したオブジェクトの ID を識別することによって実装されます。セル (下のスクリーンショットの右上に表示されます)。

ここに画像の説明を入力

私のプロジェクトの次の段階では、より「プレイ可能な」地形の生成を検討したいと考えています。私にとってこれは、各六角形の形状が上の画像に見られるものよりも規則的であることを意味します。

だから最終的に私のポイントに来て、そこにある:

  • 六角形のすべての点を 1 つの平面 (同一平面) に配置する現在の方法で頂点を平滑化または調整する方法。

編集:ここでポイントを共平面にする方法に関する情報を探している人にとっては、素晴らしい説明です。

  • この種のことのより良い制御を可能にする手続き型地形生成へのより良いアプローチ。
  • これを可能にする別の方法で頂点情報を表現する方法。

明確にするために、私は隆起したエッジまたはプラットフォーム (以下に示すように) を備えた平らな六角形のグリッドを実現しようとしているわけではありません。

ここ)

すべてのジオメトリが結合して次のビットにつながるようにしたいと思います。

私は現在のようなもの (起伏のある丘と地形は比較的良好) を達成したいと思っていますが、台地はより制御しやすくなっています。これにより、必要に応じてより詳細なメッシュを追加できる、後で領域 (再生できないタイル) をコード化する柔軟性が得られます。

フィードバックは大歓迎です。私はこれを学習演習として使用しています。すべてのコメントを歓迎します。

4

1 に答える 1

3

それは、実際に何を望んでいるか、および「より制御された」とはどういう意味かによって異なります。

「座標 [11, -127] に半径 20 の山がある」と言えるようになりたいですか? これの複雑さは、どこまで行きたいかによって異なります。山だけが必要な場合は、放射状のグラデーションで十分です (グラデーション値をノイズ値に追加するだけです)。しかし、もっと複雑な形状が必要な場合は、ごちそうになります。

私は自分のプロジェクトでこのアイデアを深く掘り下げています(公開されたバージョンは単なるプロトタイプであり、現在大幅な再設計が行われていますが、マップ ジェネレータとしては完全に使用可能です)。

もう 1 つの方法は、生成をより手続き的にすることです。一連の数学関数を指定するだけで、それを地形に適用できます。単純な値の変換でさえ、非常に遠くまで到達できます。

これらのメソッドはすべて、16 進グリッドに対して問題なく機能するはずです。奇数行のシフトが原因でアーティファクトが発生する場合は、代わりに奇数行を補間できます (単純な線形補間式を使用して、その間にある 2 つの頂点から頂点の高さの値を計算するだけです)。

紫色の線を青色の曲線にマッピングする関数を考えてみましょう。これは、低い位置の高さと非常に高い位置の高を強調しますが、それらの間の遷移をより急勾配にします (この例は単なるコサイン関数であり、曲線の滑らかさを低下させると、変換がより顕著になります)。

コサイン値変換

また、曲線の下半分のみを使用して、ピークをよりシャープにし、低い位置の領域をよりフラットにすることもできます (したがって、よりプレイしやすくなります)。

コサイン値変換 II

曲線の「鋭さ」は、パワー (効果をより劇的にする) または平方根 (効果を減らす) で簡単に調整できます。

ここに画像の説明を入力

これの実装は実際には非常に簡単です (特にコサイン関数を使用する場合)。マップ内の各ピクセルに関数を適用するだけです。関数が数学的にそれほど自明でない場合は、ルックアップ テーブルで問題なく機能します (テーブル値間の 3 次補間を使用すると、線形補間によりアーティファクトが作成されます)。

ランダム ノイズ地形の「ゲーミフィケーション」のいくつかの簡単な方法は、この論文「コンピュータ ゲームで使用する侵食されたフラクタル地形のリアルタイム合成」で見つけることができます。

あなたのプロジェクトで頑張ってください

于 2012-12-23T09:12:22.973 に答える