#include "proctext.h" #include "noise.h" static float valueTab[TABSIZE]; static void valueTabInit(int seed); static float vlattice(int ix, int iy, int iz); float vcnoise(float x, float y, float z) { int ix, iy, iz; int i, j, k; float fx, fy, fz; float dx, dy, dz; float sum = 0; static int initialized = 0; if (!initialized) { valueTabInit(665); initialized = 1; } ix = FLOOR(x); fx = x - ix; iy = FLOOR(y); fy = y - iy; iz = FLOOR(z); fz = z - iz; for (k = -1; k <= 2; k++) { dz = k - fz; dz = dz*dz; for (j = -1; j <= 2; j++) { dy = j - fy; dy = dy*dy; for (i = -1; i <= 2; i++){ dx = i - fx; dx = dx*dx; sum += vlattice(ix+i,iy+j,iz+k) * catrom2(dx + dy + dz); } } } return sum; } static void valueTabInit(int seed) { float *table = valueTab; int i; srandom(seed); for(i = 0; i < TABSIZE; i++) *table++ = 1. - 2.*RANDNBR; } static float vlattice(int ix, int iy, int iz) { return valueTab[INDEX(ix,iy,iz)]; }