Говоря о отображении рельефа, зеркальной подсветке и таких вещах в OpenGL Shading Language (GLSL)
У меня есть:
- Массив вершин (например, {0,2,0,5,0,1, 0,2,0,4,0,5,...})
- Массив нормалей (например, {0,0,0,0,1,0, 0,0,1,0,0,0,...})
- Положение точечного света в мировом пространстве (например, {0.0,1.0, -5.0})
- Позиция зрителя в мировом пространстве (например, {0.0,0.0,0.0}) (предположим, что зритель находится в центре мира)
Теперь, как я могу вычислить Binormal и Tangent для каждой вершины? Я имею в виду, какова формула для расчета бинормалов, что я должен использовать на основе этих данных? А о касательной?
Я все равно построю матрицу TBN, поэтому, если вы знаете, что формула для построения матрицы, основанная на этой информации, будет приятной!
О, yeh, у меня есть координаты текстуры, если это необходимо. И поскольку я говорю о GLSL, было бы неплохо для решения на вершину, я имею в виду, который не должен получать доступ к более чем одной информации о вершинах за раз.
---- Обновление -----
Я нашел это решение:
vec3 tangent; vec3 binormal; vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0)); vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0)); if (length(c1)>length(c2)) { tangent = c1; } else { tangent = c2; } tangent = normalize(tangent); binormal = cross(v_nglNormal, tangent); binormal = normalize(binormal);
Но я не знаю, правильно ли это на 100%.