Tiny Wings のように高さと幅が異なるなだらかな丘を生成するにはどうすればよいですか? 現在、sin() を使用していますが、明らかに均一な丘が永遠に繰り返されます。
秘密は何ですか?
ありがとう!
Tiny Wings のように高さと幅が異なるなだらかな丘を生成するにはどうすればよいですか? 現在、sin() を使用していますが、明らかに均一な丘が永遠に繰り返されます。
秘密は何ですか?
ありがとう!
シンプレックス ノイズ、または好きなように見えるその他の 2D ノイズ関数。
確かに手続き型生成の専門家ではありませんが、ランダムに生成された複数の sin/cos 関数を異なる期間で加算的に組み合わせてみることはできます。追加すればするほど、ランダムに見えます。
このようなもの。
正弦波を使用してこれを実現し、このバリエーションを作成する場合は、正弦関数を操作する方法の基本的な概要を次に示します。
x軸、ay軸、および正弦波があるとします。y = sin(x)
y = sin(x * 0.5)
正弦波がx軸を半分の頻度で横切るようにします(周波数)
y = 0.5 * sin(x)
正弦波を半分の高さ(振幅)に到達させます
y = 0.5 + sin(x)
正弦波の中心軸をy軸上に0.5移動します(平行移動/オフセット)
これらの3つのプロパティを使用して、さまざまな外観の波を作成できます。
ここでの秘訣は、これらの波をオーバーレイして、時間の経過に伴う変化を作成する必要があることです。これを行う簡単な方法は、波を足し合わせるだけです。
y = sin(x * 0.5) + 0.5 * sin(x) + (0.5 + sin(x))
または、x軸の特定のサブセットに対して異なる波を定義し、区分的関数を作成することもできます。これは、より制御可能/アート指向可能である可能性があります。
y = {
sin(x * 0.5) for x in (0, 5],
0.5 * sin(x) for x in (5, 10],
0.5 + sin(x) for x in (10, 5] }
ただし、これを試してみると、波に不連続性が生じることに気付くでしょう。これらの区分的関数間でスムーズな遷移を作成できるかどうかを確認するには、さまざまなブレンドオプションを調査する必要があります(最初に線形ブレンドを検索します)。
しかし、私の意見では、スプライン曲線も調べて、それらが目的を達成するかどうかを確認する必要があります。スプラインはグラフィックスとゲームプログラミングの一部として十分に文書化されているため、実装(または他の誰かのコードを取得)が簡単で、レベルを作成するためのより直感的な方法を提供する可能性があります(ノット/コントロールポイントを表すランダムなポイントのセットを生成します、スプラインを通過させます)。