2012-04-15 23 views
2

私はMinecraft-esqueチャンクを使用する地形エンジンをプログラミングしています。チャンクはDiamond-square algorithmを使用して別々に生成されます。地形チャンクの整列(ダイヤモンドスクエアアルゴリズム)

問題は、これらのチャンクが並んでいないことです。完全に分離していることです。私はそれらをそうするために多くのことを試しましたが、これまでのところ何も働かなかったはずです。

編集:私が作成しようとしている世界は無限ではありません。他のDiamond-squareジェネレータによって割り当てられたグローバルな高さ値を持つチャンクの33x33配列を生成します。

チャンクが整列するようにダイヤモンドスクエアエンジンを修正する方法はありますか?

答えて

0

ダイヤモンドスクエアアルゴリズムの各トップレベルの正方形を別々のチャンクとして生成しますか?

周囲のチャンクとそのチャンクの4つのコーナーポイントを共有する必要があります。

これは非常に簡単な方法です。 2つのパラメータ(2次元で地形を生成していると仮定)を持つノイズ関数が必要です。同じシード(常にマップ全体で一定です)と2つのパラメータに対して同じ擬似乱数を返す関数です。したがって、座標[-100、500]の値を関数に問い合わせると、常に同じ数が得られます(周囲のチャンクが並んでいることが保証されます)。

function Noise1(integer x, integer y) 
    n = x + y * 57 
    n = (n<<13)^n; 
    return (1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff)/1073741824.0);  
end function 

Source:そのような関数の

例はこれです。

EDIT:

私の悪い - あなたが唯一の4隅の点のためのパラメータ化ノイズ関数に頼るべきではありませんが、あなたはダイヤモンド正方形のアルゴリズム内で生成されたすべての乱数のためにそれを使用する必要があります。

これで解決しない場合は、あなたの側で何か間違ったことをしています。

+0

はそれが非常に出て働いていない - 私は忘れてきた情報のビットとの質問を更新しました。 –

+0

@ BK-TN申し訳ありませんが、私は私の答えに少し明確化を追加しました。 –

+0

私は答えが実際にチャンクに対してパーリンノイズを使用していると推測しています - 私はすでに簡単な方法を見つけましたが、これを試してみるかもしれません:) –

0

がこの回答を参照してください: Making the diamond square fractal algorithm infinite

をあなたのより良い賭けは完全にノイズ行く、または私の気の利いた無限のダイヤモンドは、アルゴリズムを乗使用するかだろう。そして、あなたの端にそれを切り捨ててください。いくつかの領域をチャンクと呼びたい場合は、それをチャンクにします。そのような無限の分野の任意の点を検索するのは簡単です。

それとも私の説明とここで実装例: http://godsnotwheregodsnot.blogspot.com/2013/11/field-diamond-squared-fractal-terrain.html