数学的な意味での接線は、法線マップではなく、ジオメトリック オブジェクトのプロパティです。法線マッピングの場合、さらに特定の接線を検索します (各点には無限に多くの接線があり、基本的には法線によって定義される平面内のすべてのベクトルが接線です)。
しかし、一歩戻りましょう: テクスチャの u 方向が接線方向にマップされ、v 方向が bitangent/binormal にマップされ、法線マップのアップベクターがオブジェクトの法線にマップされる空間が必要です。したがって、UV 座標 (uv1、uv2、uv3) を持つ三角形 (v0、v1、v2) のタンジェントは次のように計算できます。
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/ )