「接線ベクトル」の版間の差分

ページの作成:「'''接線ベクトル'''とは、2DのUV座標を3Dのローカル座標に変換したものです。 * U軸を3D変換したものは「Tangentベクトル」…」
 
編集の要約なし
5行目: 5行目:
* そしてZ軸は「Normalベクトル([[法線ベクトル]])」と呼ばれます。
* そしてZ軸は「Normalベクトル([[法線ベクトル]])」と呼ばれます。


== 計算式 ==
TangentベクトルとBinormalベクトルの計算については、あらかじめUV座標と法線ベクトルはわかっている(頂点データとして保持している)前提となっているのが一般的です。
TangentベクトルとBinormalベクトルの計算については、あらかじめUV座標と法線ベクトルはわかっている(頂点データとして保持している)前提となっているのが一般的です。


== Tangentベクトルの計算 ==
=== Tangentベクトルの計算 ===
大雑把に1行で書くと以下のようになります。NormalベクトルとUpベクトルのクロス積を取ればTangentベクトルになります。
大雑把に1行で書くと以下のようになります。NormalベクトルとUpベクトルのクロス積を取ればTangentベクトルになります。
  Vector3 tangent = Vector3.Cross(normal, Vector3.UnitY);
  Vector3 tangent = Vector3.Cross(normal, Vector3.UnitY);
23行目: 24行目:
Tangentベクトルの計算については、わりと重めの処理であり、かつ頻繁に変化する値でもないので、あらかじめCPU上で計算しておき、頂点データのひとつとして保持する方法が主流です。
Tangentベクトルの計算については、わりと重めの処理であり、かつ頻繁に変化する値でもないので、あらかじめCPU上で計算しておき、頂点データのひとつとして保持する方法が主流です。


== Binormalの計算式 ==
=== Binormalの計算式 ===
NormalベクトルとTangentベクトルの2つがわかっているならば、その2つのクロス積を取るだけです。
NormalベクトルとTangentベクトルの2つがわかっているならば、その2つのクロス積を取るだけです。
  Vector3 binormal = Vector3.Normalize(Vector3.Cross(normal, tangent));
  Vector3 binormal = Vector3.Normalize(Vector3.Cross(normal, tangent));


Binormalベクトルの計算については、わりと軽めの処理なので、頂点データを節約すべく、GPU上でリアルタイムに計算する方法が主流です。
Binormalベクトルの計算については、わりと軽めの処理なので、頂点データを節約すべく、GPU上でリアルタイムに計算する方法が主流です。