int i:
index - new unsigned char[256]: assert(index);
for(i - 0: 1 < 256: i++) index[i] - i: // fill array with indices // заполняем массив индексами
ford- 0: 1 < 256: i++) // shuffle it // перемешиваем его
{
int which - randO * 256: // choose random place in array // выбираем случайное место в массиве
unsigned char tmp - index[which];
// swap them
// меняем их местами
index[which] - index[i]:
index[1] - tmp;
}
noiseTable - new float[256]: assert(noiseTable):
ford - 0: i < 256: i++) noiseTable[i] - rand()/32767.99:
}
// end of constructor // конец конструктора
float noiseCfloat scale. Point3& p) { // linearly interpolated lattice noise // линейно интерполированный шум решетки
#define lerp(f. А. В) A + f * (В - A)
float d[2][2][2]:
Point3 pp:
pp.x - p.x * scale + 10000: // offset avoids negative values // смещение позволяет избежать отрицательных значений РР-У - Р-У * scale + 10000:
pp.z - p.z * scale + 10000:
long ix - (long)pp.x: long iy - (long)pp.y;
long iz - (long)pp.z:
float tx.ty.tz. x0.xl.x2.x3. yO.yl:
tx - pp.x - ix; ty - pp.у - iy: tz - pp.z - iz: // fractional parts // дробные части
float mtx - 1.0 - tx. mty - 1.0 - ty. mtz - 1.0 - tz:
fordnt k - 0: k <- 1: k++) // get noise at 8 lattice points // получаем шум в В точках решетки
fordnt j - 0: j <- 1:
fordnt 1 - 0: i <- 1: i++)
d[k][j][i] - latticeNoisedx + i. iy + j.iz + k):
xO - lerp(tx. d[0][0][0].d[0][0][l]):
xl - lerp(tx. d[0][l][0].d[0][l][l]):
x2 - lerp(tx. d[l][0][0].d[l][0][l]);
x3 - 1erp(tx. d[l][l][0].d[l][l][l]):
yO - lerptty. xO. xl):
В4. Класс NOISE
yl - lerpCty. x2. x3): return lerp(tz. yO. yl):
}
float turbulence(float s. Point3& p) {
float val = noise(s . p) / 2 +
noise(s * 2. p) / 4 + noise(s * 4. p) / 8 + noisets * 8. p) / 16;
return val:
}
float marbleCfloat strength.Point3& p) {
float turbul - turbulencedO. p):
float val - sin(6 * p.z + strength * turbul):
return mySpline(val):
}
float gaussO
{ // Add up 12 independent noise samples. Sum is Gaussian // with mean zero and variance 1.0. // добавляем 12 независимых отсчетов шума. Сумма является // Гауссианой с нулевым средним и дисперсией 1.0