Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternaya_grafika.doc
Скачиваний:
16
Добавлен:
07.09.2019
Размер:
674.3 Кб
Скачать

Освещение по Ламберту

Это, видимо, самое сильное упрощение формулы, которое можно придумать. Делаются такие предположения:

  • V не сильно зависит от P, т.о. V принимается постоянным для всей грани

  • L не сильно зависит от P, т.о. L принимается постоянным для всей грани

  • Ks = 0 (то есть грань не отражает свет, а только рассеивает)

  • нормаль к объекту N равна нормали к грани n в любой точке грани P

В этом случае формула принимает вид

intensity = ambient + amp * cos(n, L),

где n - нормаль к грани.

Причем в этой формуле, по предположениям, нет величин, зависящих от P. Так что освещенность равна константе для всей грани, то есть все точки грани освещены одинаково. Тогда достаточно посчитать ее лишь один раз на грань. Осталось упомянуть, что освещение по Ламберту обычно принято называть flat shading.

Освещение по Гуро

Здесь делаются такие предположения:

  • Ks = 0 (то есть грань не отражает свет, а только рассеивает)

  • освещенность меняется по грани линейно

Ну, а раз освещенность меняется линейно - так же, как и координаты текстуры u, v - можно использовать точно такую же процедуру, как для старого доброго текстурирования, только вместо двух координат текстуры u, v нам надо будет интерполировать одну величину - освещенность. В вершинах она считается по той же самой формуле (с учетом Ks = 0, конечно),

intensity = ambient + amp * cos(N, L).

Здесь за N в вершине берется как раз нормаль к объекту в вершине (vertex normal), посчитанная так, как было описано выше.

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

Освещение по Фонгу

Здесь принято делать, как минимум, такие предположения:

  • Ks = 0 (то есть грань не отражает свет, а только рассеивает)

Да-да, здесь нет никакой ошибки. Практически все обычно используемые (в demo по меньшей мере) методы т.н. "освещения по Фонгу" НЕ учитывают отраженной компоненты освещенности.

Здесь будет рассказано о самом, наверное, популярном методе освещения по Фонгу, который сводит освещение к текстурированию по определенной текстуре.

Этот метод базируется на таких добавочных предположениях:

  • L - константа (как бы точечный источник, удаленный бесконечно далеко)

  • длина единичной нормали к объекту при интерполяции между вершинами грани НЕ меняется

То есть, утверждается, что если в вершинах нормаль к объекту имеет длину 1, то при интерполяции этой нормали между вершинами по какой-то грани мы будем получать в каждой точке нормаль той же самой длины 1. На самом деле это вовсе даже не так, но для несильно разнящихся углов наклона нормалей приблизительно верно.

Так как Ks = 0, а длина N по предположению равна 1 на всей грани, имеем:

intensity = ambient + amp * (N * L).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]