メインメニューを開く

差分

接線ベクトル

397 バイト追加, 2023年7月10日 (月) 02:39
TangentベクトルとBinormalベクトルの計算については、あらかじめUV座標と法線ベクトルはわかっている(頂点データとして保持している)前提となっているのが一般的です。
=== Tangentベクトルの計算 Tangentベクトルの計算:Normalベクトルを使う方法 ===
大雑把に1行で書くと以下のようになります。NormalベクトルとUpベクトルのクロス積を取ればTangentベクトルになります。
Vector3 tangent = Vector3.Cross(normal, Vector3.UnitY);
Tangentベクトルの計算については、わりと重めの処理であり、かつ頻繁に変化する値でもないので、あらかじめCPU上で計算しておき、頂点データのひとつとして保持する方法が主流です。
 
=== Tangentベクトルの計算:頂点座標とUV座標を使う方法 ===
// 頂点エッジ
Vector3 edge1 = v1 - v0;
Vector3 edge2 = v2 - v1;
// UVエッジ
Vector2 delta1 = u1 - u0;
Vector2 delta2 = u2 - u0;
// 接線ベクトル
Vector3 tangent = normalize( (delta2.Y * edge1 - delta1.Y * edge2) / (delta1.X * delta2.Y - delta2.X * delta1.Y) );
=== Binormalの計算式 ===