| 76 | } |
| 77 | |
| 78 | float FlowFieldFloat::Perlin2D::noise(float x, float y) const { |
| 79 | int xi = ((int)floorf(x)) & 255; |
| 80 | int yi = ((int)floorf(y)) & 255; |
| 81 | float xf = x - floorf(x); |
| 82 | float yf = y - floorf(y); |
| 83 | float u = fade(xf); |
| 84 | float v = fade(yf); |
| 85 | int aa = perm[perm[xi] + yi]; |
| 86 | int ab = perm[perm[xi] + yi + 1]; |
| 87 | int ba = perm[perm[xi + 1] + yi]; |
| 88 | int bb = perm[perm[xi + 1] + yi + 1]; |
| 89 | float x1 = lerp(grad(aa, xf, yf), grad(ba, xf - 1.0f, yf), u); |
| 90 | float x2 = lerp(grad(ab, xf, yf - 1.0f), |
| 91 | grad(bb, xf - 1.0f, yf - 1.0f), u); |
| 92 | return lerp(x1, x2, v); |
| 93 | } |
| 94 | |
| 95 | float FlowFieldFloat::Perlin2D::grad(int h, float x, float y) { |
| 96 | switch (h & 7) { |
no test coverage detected