据我所知,我一直致力于使用 Perlin Noise 和 FBM 生成噪音,但我似乎遇到了一些问题。
我生成的图像本来应该是灰度的,但它们似乎太灰了,但我看不到白色或黑色的变化。
此图像的一个示例是(这是使用 8 个 Octave 音程生成的)
我期望生成的图像;
我按如下方式产生噪音;
float result = 0.0f;
float amp = 1.0f;
float frequency = 2.0f;
float maxAmplitude = 0.0f;
int i = _octaves;
while (i--){
result += noise(x * frequency, y * frequency, z * frequency) * amp;
frequency *= 2.0f;
maxAmplitude += amp;
amp *= 0.5f;
}
return result / maxAmplitude;
}
其中噪声函数是 Ken Perlin 在此处找到的改进噪声函数; http://mrl.nyu.edu/~perlin/noise/我正在使用默认的排列表。
然后在生成图像时,我执行以下操作以获得灰度图像;
ppm_image.pixel_colour[kk] = 255.0f * noise;
我只是想知道如何生成具有更广泛颜色变化的相同高度图(更多的白色和黑色,而不仅仅是狭窄的灰色)。
最佳答案
我通常发现我需要应用某种方式的 histogram equalization作为噪声数据的后处理。这通常对我有用:
float min = data[0];
float max = data[0];
for (float& f : data){
if(min > f)
min = f;
if(max < f)
max = f;
}
for (float& f : data){
f = (f-min) / (max-min);
}
关于c++ - 柏林噪声和 FBM 生成的图像太灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28095771/