0
我試圖平滑我的2D數組。我確信有更好的方法,但我還沒有找到它。到目前爲止,我正在使用這一點代碼來平滑它。平滑數據的問題
您可以在後面看到有一個區域,單個條目在錯誤的方向上升/下降。它使單個像素看起來比周圍的任何物體都更暗/更輕。
我在做什麼錯誤,在我的數據平滑?
for (int i = 0; i < 3; i++) {
for (int y = 0; y < mapChunkSize + 2; y++) {
for (int x = 0; x < mapChunkSize + 2; x++) {
int count = 0;
int dir = 0;
if (x - 1 >= 0 && y - 1 >= 0 && noiseMap [x - 1, y - 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x - 1, y - 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (x - 1 >= 0 && noiseMap [x - 1, y] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x - 1, y] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (x - 1 >= 0 && y + 1 <= mapChunkSize && noiseMap [x - 1, y + 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x - 1, y + 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (y - 1 >= 0 && noiseMap [x, y - 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x, y - 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (y + 1 <= mapChunkSize && noiseMap [x, y + 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x, y + 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (x + 1 <= mapChunkSize && y - 1 >= 0 && noiseMap [x + 1, y - 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x + 1, y - 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (x + 1 <= mapChunkSize && noiseMap [x + 1, y] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x + 1, y] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (x + 1 <= mapChunkSize && y + 1 <= mapChunkSize && noiseMap [x + 1, y + 1] != noiseMap [x, y]) {
count += 1;
if (noiseMap [x + 1, y + 1] > noiseMap [x, y]) {
dir += 1;
} else {
dir -= 1;
}
}
if (count > 4) {
if (dir > 0) {
noiseMap [x, y] += stepHeight;
}
if (dir < 0) {
noiseMap [x, y] -= stepHeight;
}
}
}
}
}
前:
後:
一個容易的事情嘗試是使用源和目標陣列,讓你產生每平滑值僅源自未平滑的值,並且永遠不會來自已經平滑的值。 – mcdowella