ID3DX10SkinInfo::D oSoftwareSkinning, méthode
Effectuez un skinning logiciel sur un tableau de sommets.
Syntaxe
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
);
Paramètres
-
StartVertex [in]
-
Type : UINT
Index de base 0 dans pSrcVertices.
-
VertexCount [in]
-
Type : UINT
Nombre de sommets à transformer.
-
pSrcVertices [in]
-
Type : void*
Pointeur vers un tableau de sommets à transformer.
-
SrcStride [in]
-
Type : UINT
Taille, en octets, d’un sommet dans pSrcVertices.
-
pDestVertices [in, out]
-
Type : void*
Pointeur vers un tableau de sommets, qui sera rempli avec les sommets transformés.
-
DestStride [in]
-
Type : UINT
Taille, en octets, d’un vertex dans pDestVertices.
-
pBoneMatrices [in]
-
Type : D3DXMATRIX*
Tableau de matrices qui sera utilisé pour transformer les points mappés à chaque os, de sorte que les sommets mappés à l’os[i] soient transformés par pBoneMatrices[i]. Ce tableau sera utilisé pour transformer les matrices uniquement si la valeur IsNormal dans pChannelDescs est définie sur FALSE, sinon pInverseTransposeBoneMatrices sera utilisée.
-
pInverseTransposeBoneMatrices [in]
-
Type : D3DXMATRIX*
Si cette valeur a la valeur NULL, elle est définie sur pBoneMatrices. Ce tableau de matrices sera utilisé pour transformer les sommets uniquement si la valeur IsNormal dans pChannelDescs est définie sur TRUE, sinon pBoneMatrices sera utilisé.
-
pChannelDescs [in]
-
Type : D3DX10_SKINNING_CHANNEL*
Pointeur vers une structure de D3DX10_SKINNING_CHANNEL, qui détermine le membre du vertex decl sur lequel l’apparence logicielle sera effectuée.
-
NumChannels [in]
-
Type : UINT
Nombre de structures D3DX10_SKINNING_CHANNEL dans pChannelDescs.
Valeur retournée
Type : HRESULT
Si la méthode réussit, la valeur de retour est S_OK. Si la méthode échoue, la valeur de retour peut être : E_INVALIDARG.
Notes
Voici un exemple d’utilisation de l’apparence logicielle :
//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);
Spécifications
Condition requise | Valeur |
---|---|
En-tête |
|
Bibliothèque |
|
Voir aussi