Листинг 14.8. Скелет метода hitO для класса TaperedCylinder

bool TaperedCylinder::hit (Ray Sr. Intersection Sinter) {

Ray genRay: // generic ray // базовый луч

xfrmRay(genRay.invTransf,r):

double А. В. C. discrim. disc_root. tl.t2.tb.tc:

double sm - small Radius - 1:

double fDir - sm * genRay.dir.z: // handy short names // удобные сокращенные имена

double fStart = sm * genRay.start.z + 1;

get A. B, and С as in Equation 14.16 // вычисляем А. В. С. как в уравнении 14.16

discrim - B*B - A*C:

int num - 0: // no hits yet // пока соударений нет

if(discrim > 0.0) // can take square root // можно извлечь квадратный корень {

disc_root = (double)sqrt(double(discrim));

tl ' (-B - disc_root)/A: // earlier hit // более раннее соударение

float zHit - genRay.start.z + genRay.dir.z * tl: 11 г component of ray // z-компонент луча

if(tl > 0.00001 && zHit <= 1.0 && zHit >= 0)
{
inter.hit[num].hitTime - tl:

inter.hit[num++].surface - 0: // hit is with wall // соударение со стенкой }

t2 - (-B + disc_root)/A: // second hit // второе соударение продолжение&

Введение в трассировку лучей

Листинг 14.8 (продолжение)

zHit - genRay.start.z + genRay.dir.z * t2: i
if(t2 > 0.00001 && zHit <- 1.0 && zHit >-0)
{
inter.hit[num].hitTime - t2:

inter.hit[num++],surface - 0: // hit is with wall // соударение со стенкой }

}
// end 1f(discrim > 0)

// конец блока if(discrim > 0)

// test the base at z - 0

// проверяем основание при z - 0

tb - -genRay.start.z/genRay.dir.z: // hit time at z - 0 plane // вреия соударения с плоскостью z - 0

if(tb > 0.00001 && SQRCgenRay.start, x + genRay.dir.x * tb) + SQR(genRay.start.у + genRay.dir.y * tb) < 1) // within disc of base // внутри диска основания

{
inter.hit[num].hitTime - tb:

inter.hit[num++].surface - 1: // 1 for the base // 1 для основания }

// test the cap at z - 1

// проверяем крышку при z - 1

tc - (1 - genRay.start.z)/genRay.dir.z: // hit time at z - 1 plane // время соударения с плоскостью z - 1

if(tc > 0.00001 && SQR(genRay.start.x + genRay.dir.x * tc)

⇐ Предыдущая| |Следующая ⇒