我应该如何使用这个一维珀林噪声函数?

我正在尝试用SDL2和C ++创建一个类似terrain的terraria。 为了生成地形我试图从这里使用1D噪声function: https : //github.com/SRombauts/SimplexNoise

这是非常基本的,只需要斧头价值。 我已经搞乱了一阵子,但不能解决什么传递给函数的x值。 我第一次尝试传递只是我find噪音列的x值。 这只是每次返回0。 接下来,我尝试传递0和1之间的值,所以我传递了它的x / width 。 这种工作方式,但我做的地形越宽,它变得越分开。

希望你明白,我做了什么给x值的函数? 提前致谢。

皮卡列克所说的回报价值是绝对正确的,但是他建议的解决方法并不是很好。

除了添加一个随机偏移量,你应该用当前的x值来分配一个渐变值。 我们称这个值为“平滑度”。 较高的平滑度意味着smokther地形:

 float smoothness = 20; float height = 20; // Max height of terrain for (float x = 0; x < COLUMN_MAX; x++) { float val = SimplexNoise::noise(x / smoothness) * height; // Stuff } 

函数文档明确地说:

@return范围内的噪声值[-1; 1],所有整数坐标值为0

由于列号是一个整数坐标,因此将其作为input传递将总是给出0作为输出。 一个简单的方法是给列号添加一个常数小数点偏移量:

 // seed RNG however you need randomOffset = ((float) rand() / (RAND_MAX)); // do other setup as needed // iterate over columns getting a noise value for each for(int a=0; a<COLUMN_MAX; a++){ float noiseValue = SimplexNoise::noise(a + randomOffset); // use noise value for the current column }