Вопросы к 40 - p1xelse/CG GitHub Wiki

Тень зависит от положения наблюдателя?

Не зависит. Зависит только от источника света.

Если в сцене только источник света. Будут ли какие-нибудь тени?

Смотря где наблюдатель. Если наблюдатель в одном месте с источником света теней не будет. (ну и расположение объектов)

Какие тени мы разделяем?

Собственные (тень самого объекта) и проекционные (тень от другого объекта).

Как найти каждую из теней?

Чтобы найти собственную тень нужно воспользоваться первым этапом алгоритма Робертса. А именно определить нелецевые грани, совместить точку источника света с точкой наблюдения.

Чтобы найти проекционную тень нужно найти проекцию невидимых граней на объекты.

Когда вы будете строить сцену. Вас какие тени будут интересовать?

Тени, которые видит наблюдатель. Найти их можно используя алгоритмом Робертса. Нас будут интересовать грани, дающие видимую тень.

Каким условиям должна удовлетворять грань, чтобы давать видимую тень?

  1. Должна быть в тени.

  2. Должна быть лицевой для наблюдателя.

В каком случае наблюдатель не будет видеть тени?

Когда наблюдатель смотрит из того же места, где расположен источник

Офф-топ

Задачу по Робертсу даёт. Рисует тебе фигурку объёмную, надо составить матрицу тела, определить освещенные и теневые поверхности. И найти видимую тень.

Строишь матрицу тела
Каждая грань задаётся уравнением ax + by + cz + d = 0

Матрица тела:
(a1 a2 a3 ... a6 b1 b2 b3 ... b6 c1 ... d1 ...)

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

Далее берешь вектор наблюдения
И умножаешь на матрицу тела
Отрицательные - не видно
Положительные столбцы - видно
Нули - вектор параллелен плоскости

Потом у тебя есть вектор, откуда падает свет
Умножаешь его на матрицу тела
Получаешь теневые/светлые по тому же правилу
Потом выбираешь те грани из результатов, которые нужны

И вуаля
Если грань теневая и невидимая, то она в списке невидимых и в списке теневых
Записываешь ее уравнение вида ax + by + cz + d= 0 в ответ