Получение Касательной для Пространства Объекта к Пространству Текстуры

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

У меня есть код, необходимый для создания Матрицы, и бинормала, но у меня нет кода для вычисления Касательной. Я пытался смотреть онлайн, но ответы обычно смущают меня. Можете ли вы объяснить мне, как это работает?

РЕДАКТИРОВАТЬ: я исправил то, что я написал ранее, как ясно, что я неправильно понял назначение. Спасибо всем, что помогли мне увидеть это.

0

Решение

Касательная в математическом смысле является свойством геометрического объекта, а не карты нормалей. В случае отображения нормалей мы дополнительно ищем очень специфическую касательную (в каждой точке их бесконечно много, в основном каждый вектор на плоскости, определяемой нормалью, является касательной).

Но давайте вернемся на шаг назад: нам нужно пространство, в котором u-направление текстуры отображается в направлении касательной, v-направление в bitangent / binormal и вектор вверх карты нормали к нормали объекта. Таким образом, касательная для треугольника (v0, v1, v2) с uv-координатами (uv1, uv2, uv3) может быть рассчитана как:

dv1 = v1-v0
dv2 = v2-v0

duv1 = uv1-uv0
duv2 = uv2-uv0

r = 1.0f / (duv1.x * duv2.y - duv1.y * duv2.x);
tangent = (dv1 * duv2.y   - dv2 * duv1.y) * r;
bitangent = (dv2 * duv1.x   - dv1 * duv2.x) * r;

Когда это сделано для всех треугольников, мы должны сгладить касательные в общих вершинах (очень похоже на то, что происходит с нормалью). Есть несколько алгоритмов для этого, в зависимости от того, что вам нужно. Можно, например, взвешивать касательные по площади поверхности соседних треугольников или по углу их падения.

Реализация всего этого расчета можно найти [здесь] вместе с более подробным объяснением: (http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]