共用方式為


D3DXComputeTangentFrameEx 函式

在格格上執行正切框架計算。 會產生正切、二進位和選擇性的一般向量。 群組邊緣和分割頂點會視需要處理單數。

語法

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*

輸入 ID3DXMeshmesh 物件的指標。

dwTextureInSemantic [in]

類型: DWORD

指定紋理座標輸入語意。 如果D3DX_DEFAULT,函式會假設沒有紋理座標,而且除非指定標準向量計算,否則函式將會失敗。

dwTextureInIndex [in]

類型: DWORD

如果網格有多個紋理座標,請指定要用於正切框架計算的紋理座標。 如果為零,則網格只有單一紋理座標。

dwUPartialOutSemantic [in]

類型: DWORD

指定型別的輸出語意,通常是D3DDECLUSAGE_TANGENT,描述將儲存U紋理座標之部分衍生專案的位置。 如果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

指定正切框架計算選項的一或多個 D3DXTANGENT 旗標組合。 如果 為 NULL,將會指定下列選項:

描述 D3DXTANGENT旗標值
將一般向量長度加權,以弧度為單位,由離開頂點的兩個邊緣所減去。 & !( 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*

每個臉部三個 DWORD 陣列的指標,指定網格中每個臉部的三個鄰居。 此陣列中的位元組數目必須至少為 3 * GetNumFaces * sizeof(DWORD)。

fPartialEdgeThreshold [in]

類型: FLOAT

指定兩個部分衍生值彼此不相容的角度餘弦值上限。 如果相鄰三角形中兩個部分衍生值的點乘積小於或等於這個臨界值,則這些三角形之間共用的頂點將會分割。

fSingularPointThreshold [in]

類型: FLOAT

指定部分衍生的量級上限,頂點將視為單數。 由於多個三角形在具有附近正切框架的點上發生事件,但完全取消彼此(如球體頂端),部分衍生的量級將會減少。 如果大小小於或等於這個臨界值,則每個包含頂點的頂點都會分割。

fNormalEdgeThreshold [in]

類型: FLOAT

類似於 fPartialEdgeThreshold,指定兩個法線之間角度的最大餘弦值,其臨界值超出三角形之間共用的頂點將會分割。 如果兩個常態的點乘積小於臨界值,則共用頂點將會分割,形成鄰近三角形之間的硬邊緣。 如果點乘積超過臨界值,鄰近三角形會將其常態插補。

ppMeshOut [out]

類型: ID3DXMesh**

輸出 ID3DXMeshmesh 物件的指標位址,該物件會接收計算的正切值、二進位和一般向量數據。

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 為零,則函式會分別使用 D3DXTANGENT_ORTHOGONALIZE_FROM_V 或 D3DXTANGENT_ORTHOGONALIZE_FROM_U計算正交座標。

需求

需求
頁首
D3DX9Mesh.h
程式庫
D3dx9.lib

另請參閱

網格函數

D3DXComputeTangentFrame