Уравнение обратного преобразованного луча имеет вид: (8,4, -1) + (-8, -3,1) г. (Проверьте это тоже!) Подставим это в уравнение (14.12) и получим (А, В,С) = (74, -77,80), откуда дискриминант равен 9. Таким образом, происходит два пересечения. Из уравнения (14.13) находим моменты пересечения: 1,1621 и 0,9189. Точку соударения находим, подставляя меньшее время соударения в представление луча: (10, 20,5) + (-8, -12,4)0,9189 = (2,649,8,97,8,67). (Как убедиться в том, что эта точка лежит на сфере?)

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

14.4.1. Найти точки пересечения Найдите моменты и точки пересечения луча (3, 5, 8) + (-4, -2, -6) t со сферой радиуса 5 с центром в точке (1,2,1). Решение г-0,41751 или г - 1,58248, две точки пересечения равны (1,33,4,165,5,495) и (-3,33,1,835, -1,495).

14.4.2. Соударение с плоскостью

Когда и где луч (10 - t, 8 - 2t, 3 + t) соударяется с плоскостью, созданной на языке SDL посредством следующих команд:

translate 4 5 6 rotate 90 1 0 0 plane?

14.5. Организация трассировщика луча в приложении Теперь, вооружившись теорией, мы можем сконструировать настоящий трассировщик луча, основанный на скелете кода из листинга 14.1. Мы будем использовать класс Scene и язык SDL, впервые введенный в главе 5, поскольку они предоставляют удобные средства для описания сложной сцены. Начнем с уже построенного списка объектов сцены, в котором с каждым объектом связано его аффинное преобразование.

Трассировщик луча должен иметь дело с несколькими различными взаимодействующими объектами: с камерой, осматривающей сцену, экраном, на котором создается изображение, с лучами, исходящими из камеры и проходящими через сцену, а также с самой сценой, содержащей множество геометрических объектов и источников света. При объектно-ориентированном подходе следует тщательно определять типы участвующих объектов и решать, какие действия должен выполнять каждый тип данных, а также какой информацией должен обладать каждый объект для осуществления нужных действий. Здесь определен один из методов «сверху вниз», однако вы можете выбрать иной способ разделения задач.


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