ID3DX10SkinInfo::D oSoftwareSkinning 方法
對頂點陣列執行軟體外觀。
語法
HRESULT DoSoftwareSkinning(
[in] UINT StartVertex,
[in] UINT VertexCount,
[in] void *pSrcVertices,
[in] UINT SrcStride,
[in, out] void *pDestVertices,
[in] UINT DestStride,
[in] D3DXMATRIX *pBoneMatrices,
[in] D3DXMATRIX *pInverseTransposeBoneMatrices,
[in] D3DX10_SKINNING_CHANNEL *pChannelDescs,
[in] UINT NumChannels
);
參數
-
StartVertex [in]
-
類型: UINT
以 0 為基礎的索引到 pSrcVertices。
-
VertexCount [in]
-
類型: UINT
要轉換的頂點數目。
-
pSrcVertices [in]
-
類型: void*
要轉換之頂點陣列的指標。
-
SrcStride [in]
-
類型: UINT
pSrcVertices 中頂點的大小,以位元組為單位。
-
pDestVertices [in, out]
-
類型: void*
頂點陣列的指標,其會填入轉換的頂點。
-
DestStride [in]
-
類型: UINT
pDestVertices 中頂點的大小,以位元組為單位。
-
pBoneMatrices [in]
-
類型: D3DXMATRIX*
矩陣陣列,將用來轉換對應至每個骨點的點,讓對應至根[i] 的頂點將由 pBoneMatrices[i] 轉換。 只有當 pChannelDescs 中的 IsNormal 值設定為 FALSE時,才會使用此陣列來轉換矩陣,否則會使用 pInverseTransposeBoneMatrices。
-
pInverseTransposeBoneMatrices [in]
-
類型: D3DXMATRIX*
如果此值為 Null,則會將其設定為 pBoneMatrices。 只有當 pChannelDescs 中的 IsNormal 值設定為 TRUE時,才會使用此矩陣陣列來轉換頂點,否則會使用 pBoneMatrices。
-
pChannelDescs [in]
-
D3DX10_SKINNING_CHANNEL 結構的指標,決定軟體外觀將完成的頂點成員。
-
NumChannels [in]
-
類型: UINT
pChannelDescs 中的D3DX10_SKINNING_CHANNEL結構數目。
傳回值
類型: HRESULT
如果方法成功,傳回值會S_OK。 如果方法失敗,則傳回值可以是:E_INVALIDARG。
備註
以下是如何使用軟體面板的範例:
//vertex definition
struct MyVertex
{
D3DXVECTOR3 Position;
D3DXVECTOR2 Weight;
D3DXVECTOR2 TexCoord;
};
//create vertex data
const UINT numVertices = 16;
MyVertex vertices[numVertices] = {...};
MyVertex destVertices[numVertices];
//create bone matrices
D3DXMATRIX boneMatrices[2];
D3DXMatrixIdentity(&boneMatrices[0]);
D3DXMatrixRotationX(&boneMatrices[1], 3.14159f / 180.0f);
//create bone indices and weights
UINT boneIndices[numVertices] = {...};
float boneWeights[2][numVertices] = {...};
//create skin info, populate it with bones and vertices, and then map them to each other
ID3DX10SkinInfo *pSkinInfo = NULL;
D3DX10CreateSkinInfo(&pSkinInfo);
pSkinInfo->AddBones(2);
pSkinInfo->AddVertices(numVertices);
pSkinInfo->AddBoneInfluences(0, numVertices, boneIndices, boneWeights[0]);
pSkinInfo->AddBoneInfluences(1, numVertices, boneIndices, boneWeights[1]);
//create channel desc
D3DX10_SKINNING_CHANNEL channelDesc;
channelDesc.SrcOffset = 0;
channelDesc.DestOffset = 0;
channelDesc.IsNormal = FALSE;
//do the skinning
pSkinInfo->DoSoftwareSkinning(0, numVertices,
vertices, sizeof(MyVertex),
destVertices, sizeof(MyVertex),
boneMatrices, NULL,
&channelDesc, 1);
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|
另請參閱