D3DXComputeTangentFrameEx 関数

メッシュに対してタンジェント フレーム計算を実行します。 タンジェント、2 項、および必要に応じて法線ベクトルが生成されます。 特異点は、エッジをグループ化して頂点を分割することで、必要に応じて処理されます。

構文

HRESULT D3DXComputeTangentFrameEx(
  _In_        ID3DXMesh   *pMesh,
  _In_        DWORD       dwTextureInSemantic,
  _In_        DWORD       dwTextureInIndex,
  _In_        DWORD       dwUPartialOutSemantic,
  _In_        DWORD       dwUPartialOutIndex,
  _In_        DWORD       dwVPartialOutSemantic,
  _In_        DWORD       dwVPartialOutIndex,
  _In_        DWORD       dwNormalOutSemantic,
  _In_        DWORD       dwNormalOutIndex,
  _In_        DWORD       dwOptions,
  _In_  const DWORD       *pdwAdjacency,
  _In_        FLOAT       fPartialEdgeThreshold,
  _In_        FLOAT       fSingularPointThreshold,
  _In_        FLOAT       fNormalEdgeThreshold,
  _Out_       ID3DXMesh   **ppMeshOut,
  _Out_       ID3DXBuffer **ppVertexMapping
);

パラメーター

pMesh [in]

種類: ID3DXMesh*

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

dwTextureInSemantic [in]

型: DWORD

テクスチャ座標入力セマンティックを指定します。 D3DX_DEFAULT場合、関数はテクスチャ座標がないことを前提としており、通常のベクター計算が指定されていない限り、関数は失敗します。

dwTextureInIndex [in]

型: DWORD

メッシュに複数のテクスチャ座標がある場合は、接線フレームの計算に使用するテクスチャ座標を指定します。 0 の場合、メッシュのテクスチャ座標は 1 つだけです。

dwUPartialOutSemantic [in]

型: DWORD

U テクスチャ座標に関する部分派生が格納される場所を記述する、型の出力セマンティック (通常はD3DDECLUSAGE_TANGENT) を指定します。 D3DX_DEFAULT場合、この部分派生は格納されません。

dwUPartialOutIndex [in]

型: DWORD

U テクスチャ座標に関して部分派生を格納するセマンティック インデックスを指定します。

dwVPartialOutSemantic [in]

型: DWORD

D3DDECLUSAGE 型 (通常は D3DDECLUSAGE_BINORMAL) を指定します。これは、V テクスチャ座標に対する部分派生が格納される場所を示します。 D3DX_DEFAULT場合、この部分派生は格納されません。

dwVPartialOutIndex [in]

型: DWORD

V テクスチャ座標に関して部分派生を格納するセマンティック インデックスを指定します。

dwNormalOutSemantic [in]

型: DWORD

各頂点の法線ベクトルが格納される場所を示す出力標準セマンティック (通常はD3DDECLUSAGE_NORMAL) を指定します。 D3DX_DEFAULT場合、この法線ベクトルは格納されません。

dwNormalOutIndex [in]

型: DWORD

各頂点に法線ベクトルを格納するセマンティック インデックスを指定します。

dwOptions [in]

型: DWORD

タンジェント フレーム計算オプションを指定する 1 つ以上の D3DXTANGENT フラグの組み合わせ。 NULL の場合は、次のオプションが指定されます。

説明 D3DXTANGENT フラグ値
法線ベクトルの長さを、頂点から離れる 2 つのエッジによってサブ意図された角度 (ラジアン単位) で重み付けします。 & !( D3DXTANGENT_WEIGHT_BY_AREA |D3DXTANGENT_WEIGHT_EQUAL )
テクスチャ座標 (u、v) から直交デカルト座標を計算します。 「解説」を参照してください。 & !( D3DXTANGENT_ORTHOGONALIZE_FROM_U |D3DXTANGENT_ORTHOGONALIZE_FROM_V )
テクスチャは u 方向または v 方向にラップされません & !( D3DXTANGENT_WRAP_UV )
テクスチャ座標に関する部分派生物は正規化されます。 & !( D3DXTANGENT_DONT_NORMALIZE_PARTIALS )
頂点は、各三角形の周りを反時計回りの方向に並べ替えてください。 & !( D3DXTANGENT_WIND_CW )
入力メッシュに既に存在する頂点ごとの法線ベクトルを使用します。 & !( D3DXTANGENT_CALCULATE_NORMALS )

 

D3DXTANGENT_GENERATE_IN_PLACEが設定されていない場合は、入力メッシュが複製されます。 したがって、元のメッシュには、計算された法線ベクトルと部分派生データを格納するのに十分な領域が必要です。

pdwAdjacency [in]

型: const DWORD*

メッシュ内の各面の 3 つの近傍を指定する、1 つの面に 3 つの DWORD の配列へのポインター。 この配列のバイト数は、少なくとも 3 * GetNumFaces * sizeof(DWORD) である必要があります。

fPartialEdgeThreshold [in]

型: FLOAT

2 つの部分導関数が相互に互換性がないと見なされる角度の最大コサインを指定します。 隣接する三角形の 2 つの部分導関数の方向のドット積がこのしきい値以下の場合、これらの三角形間で共有される頂点は分割されます。

fSingularPointThreshold [in]

型: FLOAT

頂点が単数形と見なされる部分微分の最大大きさを指定します。 複数の三角形は、近くの接線フレームを持つポイントにインシデントが発生しますが、(球の上部など) 互いに完全に取り消されるため、部分導関数の大きさは減少します。 マグニチュードがこのしきい値以下の場合は、頂点を含むすべての三角形に対して頂点が分割されます。

fNormalEdgeThreshold [in]

型: FLOAT

fPartialEdgeThreshold と同様に、三角形間で共有される頂点を分割するしきい値である 2 つの法線間の角度の最大コサインを指定します。 2 つの法線のドット積がしきい値より小さい場合、共有頂点は分割され、隣接する三角形の間にハード エッジが形成されます。 ドット積がしきい値を超える場合、隣接する三角形の法線が補間されます。

ppMeshOut [out]

種類: ID3DXMesh**

計算されたタンジェント、2 項、および法線ベクトル データを受け取る出力 ID3DXMesh メッシュ オブジェクトへのポインターのアドレス。

ppVertexMapping [out]

種類: ID3DXBuffer**

このメソッドによって計算された新しい頂点の元の頂点へのマッピングを受け取る出力 ID3DXBuffer バッファー オブジェクトへのポインターのアドレス。 バッファーは DWORD の配列であり、配列サイズは ppMeshOut 内の頂点の数として定義されます。

戻り値

型: HRESULT

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

注釈

この関数の簡易バージョンは 、D3DXComputeTangentFrame として使用できます。

各頂点の計算された法線ベクトルは、常に単位長を持つよう正規化されます。

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

要件

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

こちらもご覧ください

メッシュ関数

D3DXComputeTangentFrame