X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=fractalnoise.c;h=5d68d196e6bcf8c2e95cbe105788323d9bf551cc;hb=d935102f6ffdbfed14a50ee67f0231407c2073db;hp=40beb8af3cc2315451627ead0816164fecda78be;hpb=e8b5598ebc14182bb5c2582d7b7708004ae51393;p=xonotic%2Fdarkplaces.git diff --git a/fractalnoise.c b/fractalnoise.c index 40beb8af..5d68d196 100644 --- a/fractalnoise.c +++ b/fractalnoise.c @@ -154,12 +154,13 @@ float noise4f(float x, float y, float z, float w) noisetable[i] = (rand() / (double)RAND_MAX) * 2 - 1; // r is a remapping table to make each dimension of the index have different indexing behavior for (i = 0;i < NOISE_SIZE;i++) - r[i] = (int)(rand() * (double)NOISE_MASK / (double)RAND_MAX); + r[i] = (int)(rand() * (double)NOISE_SIZE / ((double)RAND_MAX + 1)) & NOISE_MASK; + // that & is only needed if RAND_MAX is > the range of double, which isn't the case on most platforms } - frac[1][0] = x - floor(x);index[0][0] = (int)floor(x); - frac[1][1] = y - floor(y);index[1][0] = (int)floor(y); - frac[1][2] = z - floor(z);index[2][0] = (int)floor(z); - frac[1][3] = w - floor(w);index[3][0] = (int)floor(w); + frac[0][1] = x - floor(x);index[0][0] = ((int)floor(x)) & NOISE_MASK; + frac[1][1] = y - floor(y);index[1][0] = ((int)floor(y)) & NOISE_MASK; + frac[2][1] = z - floor(z);index[2][0] = ((int)floor(z)) & NOISE_MASK; + frac[3][1] = w - floor(w);index[3][0] = ((int)floor(w)) & NOISE_MASK; for (i = 0;i < 4;i++) frac[i][0] = 1 - frac[i][1]; for (i = 0;i < 4;i++)