グリッドで川をレンダリングする


8

ランダムな高さマップを作成したので、川を作成します。私はa *に基づいてアルゴリズムを作成し、川をピークから海に流しました。今では、それらをレンダリングするためのエレガントなアルゴリズムを考え出そうとしています。

これは2Dの正方形のマップグリッドです。川が通過するセルには、次の形式の単純な整数値があります:rivernumber && pointOrder。つまり、10、11、12、13、14、15、16 ... 1 + Nは最初の川、20、21、22、23 ... 2 + Nは2番目の川などです。これは、グリッド生成時間をマップし、ワールドが生成されるときに一度だけ実行されます。

各河川をベクトルとして扱いたかったのですが、同じ河川に枝がある場合(ノイズを入れて枝を生成するため)、点を順番に接続できないという問題があります。

2番目の代替案は、各ポイントを分析し、次が分岐でないかどうかを確認する複雑なアルゴリズムを生成することです。そうでない場合は、分岐を処理する別のアルゴリズムをトリガーしてから、本川に戻ります。非常に複雑で洗練されていません。

おそらく、これらのケースで一般的に使用されているワールド生成アルゴリズムまたはリバーレンダリングアルゴリズムに解決策があり、私にはわかりません。

任意のヒント?ありがとう!!


迷路の生成に使用されるいくつかのアルゴリズムを使用して、より現実的な河川地図を作成するためにいくつかのエッグをカットすることができると思います。
Ali1S232 2011年

1
私は川の小道を持っていますが、それらをレンダリングし、ポイントを接続するときにブランチを処理する方法がわかりません。
Gabriel A. Zorrilla

特別な種類のノードとして扱われる合流点(2つの川の合流点)にポイントがありますか?
共産主義者のダック

1
タイルマップに道路をレンダリングする方法の作成に関する記事を見たことがある。隣接するタイルにも道路プロパティが設定されているタイルを選択しました。それは約16の異なるタイル(すべての回転を含む)を作成しました。このステップは、シーンの生成中にのみ行われました。同じことができるかどうかわからない。
Ali1S232 2011年

4
あなたが何をしようとしているのかをよりよく示すために、いくつかのスケッチを載せたスクリーンショットを私たちに提供できますか?
AttackingHobo

回答:


1

このチュートリアル/ゲーム開発ブログは、川を生成する優れた方法を提供しており、非常にうまくレンダリングされます。別のアプローチを採用している(そしてグリッドベースのマップを持っている)ため、これが状況に効果的に適用できるかどうかはわかりませんが、検討する価値はあります。


それは本当にうれしいです。
Tim Holt

1
役立つ可能性のある詳細:プロジェクトの川は山から海に流れます。下り坂を流れると水量が増加し、合流する川が水量を増やします。マップ上の線の幅は、ボリュームのsqrtです。川のすべての場所が下り坂を指しています。川の分岐点とは、2つ以上の場所が同じ下り坂の地点を指していることを意味します。これはグリッドでも使用できると思います。
amitp '10

0

あなたができることの1つは、個々のノードにそれ自身を処理させることです。生成後、ただし各川の四角形に表示する前に通過し、入口(小さい数、同じ川)と出口(大きい数、同じ川)のリストを渡します。

このデータから、入口と出口がどこにあるかを把握できるはずです(相対位置を格納するとおそらく役立つでしょう)。そこから、接続に基づいてその広場の川をレンダリングできます。分岐を行う最も簡単な方法は、入口/出口を正方形の中心に接続することです。

これをグラフィカルに表現するにはさまざまな方法が考えられますが、私が直接推奨するために使用するための十分な情報がありません。代わりに私はただ言及します「下り坂」水の各セグメントは、動的フローparticleishシステムを含む方法を。

ルートスクエアに各入口でいくつかの「ウォーターピース」を開始させ、作成時に使用可能な出口からランダムに決定させる。出口に当たったら、入口に当たったタイルに1つスポーンし、水の駒を正方形の最初に戻します。すでに次の正方形にスポーンしていて(正方形のピースごとに1回だけ)、設定と計算がわかっている(再ランダム化しないでください)ため、このピースを非常に少ない正方形でループさせることができます。計算、および必要に応じて、おそらくシェーダーを使用します。

これには、分岐後に小さな川に進むことができるという利点もあり、結果として生じる2つの川は同じサイズである必要はありません。川が上から下に完全に集まるには少し時間がかかりますが、結果として得られる効果は、どのノードに川があるかに基づいて単純にこのようなものになる可能性があるため、かなり楽しいはずです。

10--10--6--6--2--2
    |      |     
    4--4   4
       |   |
       4---6--6--6
       |  
       2

また、シードとコードによっては、ノードの配置が同じであっても、実行するたびに異なる外観になる可能性があります。

この例があなたが探している線のどこかにあることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.