Направление света и его трансформация в простейшей модели освещения

Итак, я добрался до основ освещения в моем учебном поиске OpenGL.

Представьте себе эту простейшую модель освещения. Каждая вершина имеет положение, цвет и нормаль. Шейдер получает матрицу ModelViewProjection (MVP), матрицу Modelview(MV) , и матрица нормалей (N), которая вычисляется как (MV-1)T, а также LightColor и LightDirection в качестве униформ. Вершинный шейдер выполняет расчеты освещения - фрагментный шейдер просто выводит интерполированные цвета.

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

max(0, dot(LightDirection, N * normal))*LightColor*Color;

Я бы ожидал, что LightDirection должен быть сначала инвертирован, то есть, правильная формула, я думаю, будет

max(0, dot(-LightDirection, N * normal))*LightColor*Color;

Кажется, предполагается, что LightDirection на самом деле является обратным вектором фактического светового потока.

Q1: Является ли это своего рода установленной конвенцией, что LightDirection в этой модели предполагается как вектор к бесконечно далекому источнику света, а не как вектор направления света, или это не принципиальный вопрос и просто так получилось, что в учебниках, на которые я наткнулся, это так предполагалось?

Q2: Если LightDirection находится в мировых координатах, а не в координатах глаза, следует ли преобразовывать его с помощью нормальной матрицы или матрицы modelview в координаты глаза?

Спасибо за разъяснение этих вещей!

5
задан Armen Tsirunyan 5 September 2011 в 12:33
поделиться