тема довольно старая, но я отвечу на нее любому новичку, который мог бы обратиться за помощью здесь:
1) & 2)
ваша карта нормалей похожа на обычную диффузнуютекстуру, вам нужно загрузить ее с диска, создать текстуру 2D, как вы бы делали с диффузной текстурой, и заблокировать ее другими текстурами, чтобы отправить ее шейдерам.Подводя итог, можно сказать, что карты нормалей, карты высот и т. Д. Ничем не отличаются, когда вы работаете с ними на стороне процессора ... он всегда загружает их, создает текстуру и блокирует их.
3)
Карты нормалей - это просто способ хранения нормалей каждого фрагмента в текстуре.Лучше использовать их с соответствующей диффузной текстурой, потому что так вы можете подделать маленькие детали.Тем не менее, это не всегда необходимо в некоторых случаях ... например, в прошлый раз, когда я работал над способом визуализации воды ... Я использовал карту Дудва и карту нормалей, но не соответствующую диффузную карту, как я использовалдля рендеринга в текстуры для достижения отражения.
4)
карты нормалей отображаются с теми же координатами текстуры, что и у диффузной текстуры ... это означает, что если у вас есть квадрат с координатами0; 0, 0; 1, 1; 0, 1; 1 это координаты, которые вы используете для сопоставления обеих текстур.
5)
я думаю, вы могли бы сделать это без шейдеров.... вы даже можете сделать это без OpenGL, если хотите ... шейдеры предназначены для таких операций, и с шейдерами это будет проще сделать.
Итак, карты нормалей - это текстуры, которые кодируют нормальныевекторы в цвета ... нормальный вектор - это трехмерный вектор, а цвета - это тоже трехмерные векторы.Когда вы используете освещение, вы обычно отправляете свои нормали из вершинного шейдера во фрагментный шейдер ... фрагментный шейдер будет интерполировать значение вершинной нормали, чтобы узнать приближение собственного вектора нормали пикселя.это делается по умолчанию ...
С картами нормалей вы не используете вектор нормали вершины, а вектор нормали, закодированный в текстуре.
Во-первых, вам нужно будет преобразовать расчет освещения из мирового пространства в касательное пространство. Это делается в вершинном шейдере.
Затем вы получите образец карты нормалей в фрагментном шейдере, какобычная текстура. Вы получите RGB цвет вашего пикселя.вам нужно будет преобразовать это значение в вектор нормалей, то есть умножить его на 2 и вычесть 1, т. е. rgb * 2 - 1, а затем использовать его в качестве вектора нормалей при расчете освещения.