在Shiffman的Nature of Code中练习,要求我使用Processing的noise()函数创建Perlin Noise。这里是我的代码,我做了创建柏林噪声为什么Perlin噪声图像比其他图像更平滑?
float xSpace = 0; // Signifies "space" between noise() values on the x coordinate.
float ySpace = 0; // Signifies "space" between noise() values on the y coordinate.
void setup(){
size(500,500);
background(0);
loadPixels();
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
//Each pixel in the pixels[] array is a color element.
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
updatePixels();
}
当我跑我的代码,它像这样
我看着教科书的解决方案创建的图像。教科书的解决方案和我的解决方案几乎完全相同,只是教科书在外循环的每次迭代中将ySpace
重新初始化为0
。
// Textbook's solution
for(int x = 0; x < width; x++) {
ySpace = 0;
for(int y = 0; y < height; y++) {
float bright = map(noise(xSpace,ySpace),0,1,0,255);
pixels[(y * width) + x] = color(bright);
ySpace = ySpace + 0.01;
}
xSpace = xSpace + 0.01 ;
}
然而,当我运行教科书的代码,该代码创建这样
为什么,当ySpace
在外环被重新初始化一个更平滑的图像,并在图像出来比当它不是更平滑?换句话说,为什么教科书的代码比我的代码创造出更平滑的图像?
我注意到一旦for循环完成,我代码中的ySpace
将比教科书代码中的ySpace
大得多。但我不确定这是为什么我的代码图像不够流畅。根据我的理解,噪声(x,y)会产生2d Perlin噪声。应用于像素时,像素应该与其周围像素的颜色相似,但看起来不像它在我的代码中发生的那样。
不知道这里的问题是什么。您更改了算法的基本参数,并且当结果与未修改的算法不匹配时会感到惊讶。请注意,本书的代码不会“在第一个循环中初始化'ySpace'” - 它会在外循环的_every_迭代中将该值初始化为零。 –
好的,我编辑了我的帖子以纠正我的错误。 “ySpace”的重新初始化是为什么教科书的图像比我的平滑得多? –