共用方式為


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*

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);

規格需求

需求
標頭
D3DX10.h
程式庫
D3DX10.lib

另請參閱

ID3DX10SkinInfo

D3DX 介面