D3DXComputeTangentFrame 関数

メッシュの接線、二項、法線ベクトルを計算します。

構文

HRESULT D3DXComputeTangentFrame(
  _In_ ID3DXMesh *pMesh,
  _In_ DWORD     dwOptions
);

パラメーター

pMesh [in]

種類: ID3DXMesh*

入力 ID3DXMesh メッシュ オブジェクトへのポインター。

dwOptions [in]

型: DWORD

1 つ以上の D3DXTANGENT フラグの組み合わせ。

NULL を使用して、次のオプションを指定します。

  • 法線ベクトルの長さを、頂点から離れる 2 つのエッジによってサブ意図された角度 (ラジアン単位) で重み付けします。
  • UV テクスチャ座標から直交デカルト座標を計算します。
  • テクスチャは U 方向または V 方向にラップされません
  • テクスチャ座標に関する部分派生物は正規化されます。
  • 頂点は、各三角形の周りを反時計回りの方向に並べ替えてください。
  • 入力メッシュに既に存在する頂点ごとの法線ベクトルを使用します。
  • 結果は元の入力メッシュに格納されます。 新しい頂点を作成する必要がある場合、関数は失敗します。

戻り値

型: HRESULT

関数が成功した場合、戻り値はS_OK。 関数が失敗した場合、戻り値は次のいずれかになります:D3DERR_INVALIDCALL、D3DXERR_INVALIDDATA、E_OUTOFMEMORY。

解説

この関数は、次の入力パラメーターを使用して D3DXComputeTangentFrameEx を呼び出すだけです。

D3DXComputeTangentFrameEx(pMesh, D3DDECLUSAGE_TEXCOORD, 0,   
      D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_TANGENT, 0, 
      D3DDECLUSAGE_NORMAL, 0, 
      dwOptions | D3DXTANGENT_GENERATE_IN_PLACE,
      NULL, 0.01f, 0.25f, 0.01f, NULL, NULL);

特異点は、エッジをグループ化して頂点を分割することで、必要に応じて処理されます。 頂点を分割する必要がある場合、関数は失敗します。 各頂点の計算された法線ベクトルは、常に単位長を持つよう正規化されます。

直交デカルト座標を計算するための最も堅牢なソリューションは、両方の UV テクスチャ座標から直交座標が計算されるように、フラグのD3DXTANGENT_ORTHOGONALIZE_FROM_UとD3DXTANGENT_ORTHOGONALIZE_FROM_Vを設定しないことです。 ただし、この場合、U または V が 0 の場合、関数は、それぞれ D3DXTANGENT_ORTHOGONALIZE_FROM_V または D3DXTANGENT_ORTHOGONALIZE_FROM_U を使用して直交座標を計算します。

要件

要件
ヘッダー
D3DX9Mesh.h
ライブラリ
D3dx9.lib

関連項目

メッシュ関数

D3DXComputeTangentFrameEx

D3DXTANGENT