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结构的指针,该结构确定将对其执行软件外观的顶点的成员。
-
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);
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅