0

私が書いたパーリン ノイズ プログラムを使用して、Java で 3D 惑星 (球体) のテクスチャを生成する必要があります。ただし、テクスチャを球体に配置できるように、左と右が同じである必要があり、上下も同じである必要があります。

パーリンのノイズソースは長すぎるのでここに置くことはできませんが、ほとんどはhttp://devmag.org.za/2009/04/25/perlin-noise/に基づいています

4

2 に答える 2

1

ノイズ関数が 4D にスケーリングする場合、x、y、z、w に 2 つの 2D 円の座標を入力できます。結果の画像は、x 軸と y 軸の両方で最適にタイル表示されます。

例(非常にずさんですが、わかりやすくするために):

float textureSize = 1024.0f;

    for(float i = 0.0f; i < textureSize; i += 1.0f){

      for(float j = 0.0f; j < textureSize; j += 1.0f){

        nx = cos((i / textureSize) * 2.0f * PI);
        ny = cos((j / textureSize) * 2.0f * PI);
        nz = sin((i / textureSize) * 2.0f * PI);
        nw = sin((j / textureSize) * 2.0f * PI);

        looped_noise = noise_4D( nx, ny, nz, nw, octaves, persistence, lacunarity, blah...);
        noise_buffer[((int)i * (int)textureSize) + (int)j] = looped_noise;

      }
    }

関数を簡単に 4D にスケーリングできない場合は、シンプレックス ノイズの実装を試してみてください。

于 2012-09-21T16:50:33.973 に答える
1

パーリン ノイズが機能する方法は、グリッドの値の間を補間することです。

この目的には、シンプレックス ノイズの方が適しています (そうしないと、球を正方形で正しく舗装できないため、極でのノイズ密度が同じにはなりません)。

球体をシンプレックス (この場合は三角形) に分割し、三角形の角度ごとに (ポイントごとに 1 回だけ)、値をランダム化する必要があります。

次に、シンプレックス ノイズ法で補間することにより、三角形の各ポイントでテクスチャを計算できます。

于 2012-08-28T07:47:57.187 に答える