bug时时有,MS不例外。
HLSL自带的noise()出了点问题,迫使我自己实现一个,借此机会我也调整了一下,缔造一个适合自己的鲁棒noise()。
噪声在图像的作用非常重要,而且Perlin的思想非常简单,至于Perlin的说明,我是不会在这说明的(这里只会写其它地方找不到的内容)。
#define PI 3.141592653589793240
float Perlin(int n) {
n = (n << 13) ^ n;
return 1.0 - ((n * (n * n * 15731 + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0;
}
float CosineInterpolate (float a, float b, float x) {
float f = (1.0 - cos (x * PI)) * 0.5;
return a * (1.0 - f) + b * f;
}
float SmoothedNoise(int v) {
return Perlin(v) / 2 + Perlin(v-1) / 4 + Perlin(v+1) / 4;
}
int FastFloor (float v) { return (int) (v < 0) ? v - 1 : v; }
float InterpolatedNoise (float v) {
int i = FastFloor(v);
float v1 = SmoothedNoise (i);
float v2 = SmoothedNoise (i + 1);
return CosineInterpolate(v1, v2, v - i);
}
float PerlinNoise(float v)
{