// 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">⇐ Предыдущая| |Следующая ⇒