--- deliantra/server/common/noise.C 2011/04/22 02:03:10 1.2 +++ deliantra/server/common/noise.C 2011/04/22 07:56:46 1.3 @@ -30,18 +30,22 @@ for (int i = 0; i < 256; ++i) { - for (int j = 0; j < 2; ++j) - rvec [i][j] = rng () - 0.5f; + vec2d rv; + rv[0] = rng () - 0.5f; + rv[1] = rng () - 0.5f; // normalise - float mag = 1.f / sqrtf (rvec [i][0] * rvec [i][0] + rvec [i][1] * rvec [i][1]); + float mag = 1.f / sqrtf (rv[0] * rv[0] + rv[1] * rv[1]); - rvec [i][0] *= mag; - rvec [i][1] *= mag; + rv[0] *= mag; + rv[1] *= mag; + + rvec[i][0] = rv[0]; + rvec[i][1] = rv[1]; } - rvmap [0].seed (rng); - rvmap [1].seed (rng); + rvmap[0].seed (rng); + rvmap[1].seed (rng); } float @@ -62,15 +66,18 @@ if (d < 4) { - int h = rvmap [0](ix + i) ^ rvmap [1](iy + j); - float *G = rvec [h & 0xff]; - float t1 = 1 - d / 4; float t2 = t1 * t1; float t4 = t2 * t2; float p = (4 * t1 - 3) * t4; - v += (Ax * G[0] + Ay * G[1]) * p; + + int h = rvmap[0](ix + i) ^ rvmap[1](iy + j); + float G0 = rvec[h & 0xff][0]; + float G1 = rvec[h & 0xff][1]; + //vec2d G = rvec[h & 0xff]; + + v += (Ax * G0 + Ay * G1) * p; } } @@ -405,27 +412,25 @@ return clamp (v * 0.25f, 0.f, .9999999f); } -#if 0 +#if 1 void hack() { frac_gen gen (0.5, 2); noise3d n(0); -#if 0 +#if 1 int N = 1024; - printf ("P6 %d %d 255\n", N, N); + printf ("P5 %d %d 255\n", N, N); // pmake&&server/deliantra-server >x&&convert -depth 8 -size 512xx512 gray:x x.ppm&& cv x.ppm for (int y = 0; y < N; ++y) { if (!(y&63))fprintf (stderr, "y %d\n", y);//D for (int x = 0; x < N; ++x) { - putc (128 + 128 * n.noise (x * 0.04 + 0.2, y * 0.04 + 0.2), stdout); - putc (128 + 128 * n.noise (x * 0.04 + 0.2, y * 0.08 + 0.2), stdout); - putc (128 + 128 * n.noise (x * 0.08 + 0.2, y * 0.04 + 0.2), stdout); + putc (127 * gen.noise (x * 0.04, y * 0.04) + 128, stdout); //putc (256 * gen.terrain2 (x * 0.004, y * 0.004, 8), stdout); - //putc (256 * gen.fBm (x * 0.001, y * 0.001, 3), stdout); + //putc (256 * gen.fBm (x * 0.01, y * 0.01, 7), stdout); //putc (256 * gen.turbulence (x * 0.004 - 1, y * 0.004 - 1, 8), stdout); //putc (256 * gen.heterofractal (x * 0.008, y * 0.008, 8, -1.1, 2.0), stdout); //putc (256 * gen.ridgedmultifractal (x * 0.001, y * 0.001, 32, 1.001, 32), stdout);