ОСВЕЩЕНИЕ
5.4. Освещение по Гуро
Здесь делаются такие предположения:
- Ks = 0 (то есть грань не отражает свет, а только рассеивает)
- освещенность меняется по грани линейно
Ну, а раз освещенность меняется линейно - так же, как и координаты текстуры
u, v - можно использовать точно такую же процедуру, как для старого доброго
текстурирования, только вместо двух координат текстуры u, v нам надо будет
интерполировать одну величину - освещенность. В вершинах она считается по
той же самой формуле (с учетом Ks = 0, конечно),
intensity = ambient + amp * cos(N, L).
Здесь за N в вершине берется как раз нормаль к объекту в вершине (vertex
normal), посчитанная так, как описано в 5.2.
То есть, для написания процедуры освещения по Гуро достаточно написать три
строчки расчета освещенности (обозначать ее будем c) в вершинах грани по
приведенной здесь формуле и заменить в своей процедуре текстурирования u на
c, выкинув при этом v (оно нам не нужно, нас интересует только c). Чтобы
добавить освещение по Гуро в текстурирование, надо, соответственно, добавить
полностью скопированный с расчета u расчет c. Что делать с полученным по
цвету найденного через (u, v) в текстуре пиксела и освещенности с, описано в
соответствующем пункте.
Заметим, что освещение по Гуро - это не линейная интерполяция освещенности
по изображению грани на экране, как это обычно принято и понимать и делать.
Освещенность меняется линейно по трехмерной грани, а вовсе не по ее проекции.
То есть, вообще говоря, здесь мы тоже должны учитывать перспективу. Правда,
линии одинаковой освещенности все равно будут прямыми, но выглядеть картинка,
освещенная по Гуро с учетом перспективы, будет все же покорректнее.