float sum = 0:
forCint i - 0: i < 12; 1++) sum +- noiseO:
return sum - 6.0:
}
private:
float* noiseTable: // array of noise values // массив значений шума
unsigned char * index: // Pseudorandom indices // псевдослучайные индексы
float mySpline(float x) // used for marble // используется для мрамора
{
if(x <-0.4) return 0.15 + 2.857 * SQR(x + 0.75): else if(x < 0.4) return 0.95 - 2.8125 * SQR(x); else return 0.26 + 2.666 * SQR(x - 0.7):
}
float latticeNoise(int i. int j. int k)
{ // return PR noise value on an integer lattice // возвращаем значение псевдослучайного шума // на целочисленную решетку
♦define PERM(x) index[(x) & 255]
♦define INDEXCix. iy. iz) PERM( (ix) + PERM(Ciy) + PERM(iz))) return noiseTable[INDEX(i.j.k)];
}
// end of Noise class // конец класса Noise
Приложение В. Некоторые полезные классы и служебные подпрограммы
В5. Некоторые классы, полезные при трассировке лучей
//тттттеш Pointciuster class emmmmoom
class PointCluster{
public:
// holds array of points for the bounding hull of a shape // содержит массив точек для граничной оболочки формы
int num:
Point3* pt:
PointClusterO {num - 0: pt - NULL:}
PointClusterCint n) // make a cluster of n points // создаем кластер из n точек
{
pt - new Point3[n]; assert(pt): num - n;
}
}:
i/emmmmmmm sphereinfo oommmmm
class SphereInfo{
// holds the center and radius of a sphere // содержит центр и радиус сферы public:
Point3 center:
float radSq:
void settfloat x. float y. float z. float rsq) {
center.set(x.y.z); radSq - rsq:
}
}:
//mmmmmmm Cuboid тоттетотт
class Cuboid{
// holds six border values of a cuboid
// содержит шесть граничных значений кубоида
public:
float left. top. right, bott. front, back:
void set(float 1. float t. float r. float b. float f. float bk)
{
left - 1: top - t: right - r: bott - b: front - f: back - bk:} void set(Cuboid& c) {
left - cleft: top - c.top: right - cright: bott - сbott: front - с front: back - с back:
}
}:
//mmmmmm Ray ommmmmemm
class Ray{ public:
Point3 start:
Vector3 dir:
int recurseLevel:
В5, Некоторые классы, полезные при трассировке лучей