1f(time <- 0.0) return false: // it lies behind the eye // квадрат лежит позади глаза
double hx - genRay.start.x + genRay.dir.x * time: // x at hit
// x в точке соударения
double hy - genRay.start.y + genRay.dir.у * time: // у at hit
// у в точке соударения
if((hx > 1.0) И (hx < -1.0)) return false: // misses in x-direction // проходит мимо в направлении х
1f((hy > 1.0) || (hy < -1.0)) return false: // misses in y-direction // проходит мимо в направлении у
inter.numHits - 1; // have a hit // имеем соударение
inter.hit[0].hitObject - this:
inter.h1t[0].hitTime * time:
inter.hit[0].1sEntering - true:
inter.hit[0].surface - 0:
mter.hit[0].hitPoint.set(hx.hy.O):
inter.hit[0].h1tNorma1.set(0.0.1):
return true:
}
Введение в трассировку лучей
14.6.2. Пересечение с коническим цилиндром На рис. 14.11 показаны базовый конический цилиндр и несколько лучей. Боковая сторона цилиндра является частью бесконечно длинной «стенки» с радиусом 1 при г = 0 и «малым радиусом» 5 при 2=1. Из уравнения (6.30) нам известно, что неявная форма для этой стенки имеет вид: Длг,#,г)=лг2 + #2-(1 +(5- 1)2)2,где0<г<1.
Если 5 = 1, то данная форма становится базовым цилиндром; если 5 = 0, то она превращается в базовый конус. Мы разработаем метод 1)110 для конического цилиндра, который одновременно предоставляет методы 1)110 для цилиндра и конуса.
Рис. 14.11. Базовый конический цилиндр
На рисунке показано также несколько лучей, иллюстрирующих разнообразие вариантов, при которых луч может соударяться с данным объектом или пройти мимо него. Луч А соударяется со стенкой дважды в пределах боковой поверхности цилиндра (для краткости мы часто будем называть конический цилиндр просто «цилиндром»). Луч В пересекает бесконечную стенку, затем входит в цилиндр через его крышку, после чего выходит через боковую поверхность цилиндра. Луч С соударяется вначале со стенкой цилиндра и затем выходит через его основание. Луч d входит через основание и выходит через крышку. Луч Е соударяется с бесконечной стенкой, однако вне пределов экстента цилиндра, и поэтому проходит мимо объекта. Непоказанным остался луч, который проходит вообще мимо цилиндрической стенки. (Какие еще случаи не показаны на рисунке?)