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

что каждая поверхность цилиндра проверяется поочередно и допустимые соударения добавляются в «список соударений», включая данные о том, какая поверхность участвует в соударении.

Отметим, что в двух точках соударения необходимо найти нормальный вектор. Как уже говорилось в главе 6, нормаль к стенке цилиндра в точке (х,у,г) имеет вид: (х, у, (s - 1) (1 + (s - l)z)). Нормали к крышке и к основанию равны соответственно (0,0,1) и (0,0, -1). Поля hitNormal заполняются соответствующими значениями с помощью метода hit().

Практические упражнения

14.6.1. Реализация метода hit() для конического цилиндра Проверьте уравнение (14.16) и убедитесь, что коэффициенты квадратного уравнения для конического цилиндра написаны правильно. Конкретизируйте код метода TaperedCylinder :: hit(Ray& г. Intersections inter).

14.6.2. Реализация метода hit() для пересечения с конусом Если бы вы захотели иметь подпрограмму hit(), специально предназначенную для класса Cone, то чем бы она отличалась от той, что написана для класса TaperedCyl i nder? Покажите, какие строки кода должны быть изменены для увеличения эффективности подпрограммы.

14.6.3. О сложности вычислений Сколько сложений/вычитаний и умножений/делений требуется для пересечения луча с квадратом и с коническим цилиндром?

14.6.4. Другие квадратичные поверхности В главе 6 мы рассмотрели представления различных квадратичных поверхностей, таких как гиперболоид и эллиптический конус.

О Как разумно определить базовую версию для каждого типа квадратичной поверхности?

О Для каждой базовой квадратичной поверхности покажите, что поиск пересечения ее с лучом приводит к квадратному уравнению; приведите это уравнение.

14.6.3. Пересечение с кубом (или с любым другим выпуклым полиэдром)

Выпуклые полиэдры доказали свою полезность во многих ситуациях машинной графики и уже рассматривались в некоторых разделах данной книги (см., например, обсуждение Платоновых тел в главе 6). Поскольку выпуклые полиэдры определены в терминах ограничивающих плоскостей, нетрудно разработать подпрограмму пересечения луча с любым выпуклым полиэдром. Мы сделаем это позднее в данном разделе.


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