私が書いたパーリン ノイズ プログラムを使用して、Java で 3D 惑星 (球体) のテクスチャを生成する必要があります。ただし、テクスチャを球体に配置できるように、左と右が同じである必要があり、上下も同じである必要があります。
パーリンのノイズソースは長すぎるのでここに置くことはできませんが、ほとんどはhttp://devmag.org.za/2009/04/25/perlin-noise/に基づいています
私が書いたパーリン ノイズ プログラムを使用して、Java で 3D 惑星 (球体) のテクスチャを生成する必要があります。ただし、テクスチャを球体に配置できるように、左と右が同じである必要があり、上下も同じである必要があります。
パーリンのノイズソースは長すぎるのでここに置くことはできませんが、ほとんどはhttp://devmag.org.za/2009/04/25/perlin-noise/に基づいています
ノイズ関数が 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 にスケーリングできない場合は、シンプレックス ノイズの実装を試してみてください。
パーリン ノイズが機能する方法は、グリッドの値の間を補間することです。
この目的には、シンプレックス ノイズの方が適しています (そうしないと、球を正方形で正しく舗装できないため、極でのノイズ密度が同じにはなりません)。
球体をシンプレックス (この場合は三角形) に分割し、三角形の角度ごとに (ポイントごとに 1 回だけ)、値をランダム化する必要があります。
次に、シンプレックス ノイズ法で補間することにより、三角形の各ポイントでテクスチャを計算できます。