В матрице TBN нормальный, касательный и битангентный векторы всегда перпендикулярны?

Это связано с проблемой, описанной в другом вопросе (изображения там):

Проблемы с OpenGL-шейдерами - странные артефакты отражения света

У меня есть импортер .obj, который создает структуру данных и вычисляет тангенс и битангенс. Вот данные для первого треугольника в моем объекте:

Мое понимание касательного пространства состоит в том, что нормаль указывает наружу от вершины, касательная перпендикулярна (ортогональна?) Вектору нормали и указывает в направлении положительного S в текстуре, а битангенс перпендикулярен обоим. Я не уверен, как вы это называете, но я думал, что эти 3 вектора сформировали то, что выглядело бы как повернутая или преобразованная ось x, y, z. Их бы не было 3случайным образом ориентированные векторы, верно?

Также мое понимание: нормали в карте нормалей дают новый вектор нормалей. Но в картах текстуры касательного пространства нет встроенной ориентации между закодированной нормалью rgb и нормалью для каждой вершины. Таким образом, вы используете матрицу TBN, чтобы преодолеть разрыв и получить их в одном и том же месте (или получить освещение в нужном месте).

Но потом я увидел данные объекта ... Моя структура имеет 270 вершин, и все они имеют 0 для касательной Y. Это правильно для касательных данных? Являются ли эти касательные нормальным пространством вершин или чем-то еще? Или они просто выглядят совершенно не так? Или я не понимаю, как это работает, и мои данные верны?

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

Ответы на вопрос(1)

Ваш ответ на вопрос