C#XNAでマーチングキューブクラスを作成し、Libノイズを使用して3dパーリンノイズを生成していますが、マーチングキューブの密度としてパーリンノイズの値を使用して地形を生成しようとすると、一見ランダムな三角形が内部にあるマーチングキューブ。マーチングキューブを分離し、密度の任意の3D配列を指定して、すべてが機能し、正常に見えることを確認しました。地形生成コードで通常の立方体を生成し、通常の外観の地形を取得しましたが、問題が発生しました。は、各キューブのコーナーがノイズから値を取得するため、マーチングキューブがごちゃごちゃしたように見えるほど速く、常に負から正に切り替わります。
これは、地形を生成するために使用しているコードです。
public MarchingCube[, ,] getTerrainChunk(int size, int stepsize)
{
MarchingCube[, ,] temp = new MarchingCube[size / stepsize, size / stepsize, size / stepsize];
for (int x = 0; x < size; x += stepsize)
{
for (int y = 0; y <size; y += stepsize)
{
for (int z = 0; z < size; z += stepsize)
{
Vector3[] corners = { new Vector3(x,y,z), new Vector3(x,y+stepsize,z),new Vector3(x+stepsize,y+stepsize,z),new Vector3(x+stepsize,y,z), new Vector3(x,y,z+stepsize), new Vector3(x,y+stepsize,z+stepsize),
new Vector3(x+stepsize,y+stepsize,z+stepsize), new Vector3(x+stepsize,y,z+stepsize)};
float[] densities = { GetDensity(corners[0]),GetDensity(corners[1]),GetDensity(corners[2]),GetDensity(corners[3]),GetDensity(corners[4]),
GetDensity(corners[5]),GetDensity(corners[6]),GetDensity(corners[7])};
if (x == 0 && y == 0 && z == 0)
{
temp[x / stepsize, y / stepsize, z / stepsize] = new MarchingCube(densities, corners, device);
}
else
temp[x / stepsize, y / stepsize, z / stepsize] = new MarchingCube(densities, corners);
}
}
}
return temp;
}
GetDensityメソッドは次のとおりです。
private float GetDensity(Vector3 point)
{
return (float)terrain.GetValue(point));
}
問題は、マーチングキューブの角の密度を取得するためにノイズを正しく使用していないことだと思いますが、これまでのところ、私のグーグル検索結果はまったく役に立ちませんでした。では、ノイズを適切に使用して滑らかな地形を生成する方法を知っている人はいますか?または、他に何がこの問題を引き起こしている可能性がありますか?
スクリーンショットをhttp://imgur.com/a/D1uMCに投稿しまし た。最初の2つはマーチングキューブを使用して表示され、最後の1つは通常のキューブです。
編集:マーチングキューブが実際に与えられた値で想定どおりに機能していることが写真からわかりました。問題は私のノイズとそれをどのように使用しているかに反抗しています。誰かが良いリソースを知っていますか?ノイズに基づく3D地形生成の場合?