D3DXComputeTangentFrameEx
メッシュの接線フレームの計算を実行します。接線ベクトル、従法線ベクトル、および必要に応じて法線ベクトルが生成されます。特異点は、エッジのグループ化および頂点の分割によって必要とされるとおりに処理されます。
HRESULT
D3DXComputeTangentFrameEx(
ID3DXMesh * pMesh,
DWORD dwTextureInSemantic,
DWORD dwTextureInIndex,
DWORD dwUPartialOutSemantic,
DWORD dwUPartialOutIndex,
DWORD dwVPartialOutSemantic,
DWORD dwVPartialOutIndex,
DWORD dwNormalOutSemantic,
DWORD dwNormalOutIndex,
DWORD dwOptions,
CONST DWORD * pdwAdjacency,
FLOAT fPartialEdgeThreshold,
FLOAT fSingularPointThreshold,
FLOAT fNormalEdgeThreshold,
ID3DXMesh ** ppMeshOut,
ID3DXBuffer ** ppVertexMapping
);
パラメータ
pMesh
入力 ID3DXMesh メッシュ オブジェクトへのポインターです。dwTextureInSemantic
テクスチャー座標の入力セマンティクスを指定します。D3DX_DEFAULT を指定すると、この関数はテクスチャー座標をないものと見なし、法線ベクトル計算が指定されない限り関数は失敗します。dwTextureInIndex
メッシュに複数のテクスチャー座標がある場合に、接線フレームの計算に使用するテクスチャー座標を指定します。0 の場合、メッシュにはテクスチャー座標が 1 つしかありません。dwUPartialOutSemantic
出力セマンティクスのタイプを指定します。通常、U テクスチャー座標を基準とする偏微分が格納されることを表す D3DDECLUSAGE_TANGENT を指定します。D3DX_DEFAULT の場合、この偏微分は格納されません。dwUPartialOutIndex
U テクスチャー座標を基準とする偏微分を格納するセマンティクス インデックスを指定します。dwVPartialOutSemantic
D3DDECLUSAGE 型を指定します。通常、V テクスチャー座標を基準とする偏微分が格納されることを表す D3DDECLUSAGE_BINORMAL を指定します。D3DX_DEFAULT の場合、この偏微分は格納されません。dwVPartialOutIndex
V テクスチャー座標を基準とする偏微分を格納するセマンティクス インデックスを指定します。dwNormalOutSemantic
出力標準セマンティクスを指定します。通常、頂点ごとの法線ベクトルが格納されることを表す D3DDECLUSAGE_NORMAL を指定します。D3DX_DEFAULT の場合、この法線ベクトルは格納されません。dwNormalOutIndex
頂点ごとの法線ベクトルを格納するセマンティクス インデックスを指定します。dwOptions
接線フレームの計算のオプションを指定する D3DXTANGENT フラグの 1 つ以上の組み合わせです。NULL の場合は、次のオプションが指定されます。 If D3DXTANGENT_GENERATE_IN_PLACE は設定されません。入力メッシュはクローン化されます。したがって、元のメッシュには計算された法線ベクトルおよび偏微分のデータを格納するのに十分なスペースが必要となります。説明 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 ) pdwAdjacency
面ごとの 3 つの DWORD 値を格納する配列へのポインターです。この配列によって、メッシュの各面に隣接した 3 つの面を定義します。この配列内のバイト数は、(3 * ID3DXBaseMesh::GetNumFaces * sizeof(DWORD)) 以上でなければなりません。fPartialEdgeThreshold
相互に互換性が認められない 2 つの偏微分が成す角度の最大サインを指定します。隣接する三角形にある 2 つの偏微分の方向の内積がこのしきい値以下の場合、これらの三角形の間で共有される頂点は分割されます。fSingularPointThreshold
単独と見なされる頂点の偏微分の最大マグニチュードを指定します。一連の接線フレームが隣接している単一ポイントでは、三角形が複数存在することが多いものの、(球の最上部でのように) 全体的に互いに相殺するため、偏微分のマグニチュードは減少します。マグニチュードがこのしきい値以下の場合、このマグニチュードを含むすべての三角形に頂点が分割されます。fNormalEdgeThreshold
fPartialEdgeThreshold の場合と同様に、三角形間で共有される頂点が分割される直前のしきい値である、2 つの法線間の角度の最大コサインを指定します。2 つの法線の内積がこのしきい値以下の場合、共有される頂点は分割され、隣接する三角形の間にハード エッジを形成します。しきい値が内積より大きい場合は、隣接する三角形自体の法線が補間されます。ppMeshOut
算出された接線ベクトル、従法線ベクトル、および法線ベクトルのデータを受け取る出力 ID3DXMesh メッシュ オブジェクトへのポインターのアドレスです。ppVertexMapping
このメソッドで計算した新しい頂点から元の頂点へのマッピングを受け取る出力 ID3DXBuffer バッファー オブジェクトへのポインターのアドレスです。バッファーは DWORD の配列であり、配列のサイズは ppMeshOut の頂点の数として定義されます。
戻り値
成功すると、S_OK を返します。失敗した場合は、次のいずれかの値を返します。D3DERR_INVALIDCALL、D3DXERR_INVALIDDATA、E_OUTOFMEMORY
解説
この関数の簡易版として、D3DXComputeTangentFrame が提供されています。
頂点ごとに計算された法線ベクトルは、常に単位長を持つように正規化されます。
正射影デカルト座標を計算する最も強力な解法では、フラグ D3DXTANGENT_ORTHOGONALIZE_FROM_U およびフラグ D3DXTANGENT_ORTHOGONALIZE_FROM_V, を設定しません。正射影デカルト座標は u テクスチャー座標および v テクスチャー座標から計算されます。ただし、u または v が 0 の場合、関数はそれぞれ D3DXTANGENT_ORTHOGONALIZE_FROM_V または D3DXTANGENT_ORTHOGONALIZE_FROM_U を使用して正射影デカルト座標を計算します。
要件
ヘッダー: D3DX9Mesh.h 宣言
ライブラリ: D3dx9.lib 内容