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