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_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計算正交座標。
需求
需求 | 值 |
---|---|
頁首 |
|
程式庫 |
|
另請參閱