// clear the screen and reset the depth buffer // очищаем экран и обнуляем буфер глубины
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT):
cain.drawfjpenGL(scn) ; // draw the preview // рисуем эскиз
cam.raytrace(sen. blockSize): // ray trace over the preview // трассируем луч no эскизу }
На рис. 14.7 показан пример процесса трассировки луча: эскиз уже нарисован, и нижняя половина экрана уже обработана трассировщиком луча. Здесь важно то, что трассировка луча точно накладывается на эскиз сцены.
Рис. 14.7. Процесс трассировки луча по эскизно нарисованной сцене
Введение в трассировку лучей
Составные части метода raytrace()
Метод raytraceO класса Camera реализует этапы, приведенные в листинге 14.1. Для каждой строки г и каждого столбца с создается объект-луч, исходящий из глаза и проходящий через нижний левый угол гс-пик-села на сцену. Для этого требуется класс Ray, начальные элементы которого показаны в листинге 14.2. В данном классе имеются поля для хранения начальной точки луча и его направления. Позже мы добавим другие поля. Для установки начальной точки и направления заданного луча предназначены два метода.
Листинг 14.2. Начальные элементы класса Ray
class Ray{ public"opengl1_935.html">⇐ Предыдущая| |Следующая ⇒