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

pSrcVertices 中的从 0 开始的索引。

VertexCount [in]

类型: UINT

要转换的顶点数。

pSrcVertices [in]

类型: void*

指向要转换的顶点数组的指针。

SrcStride [in]

类型: UINT

pSrcVertices 中顶点的大小(以字节为单位)。

pDestVertices [in, out]

类型: void*

指向顶点数组的指针,该数组将使用转换后的顶点填充。

DestStride [in]

类型: UINT

pDestVertices 中顶点的大小(以字节为单位)。

pBoneMatrices [in]

类型: D3DXMATRIX*

将用于转换映射到每个骨骼的点的矩阵数组,以便映射到 bone[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 接口