Метод 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]. Этот массив будет использоваться для преобразования матриц, только если значение IsNormal в pChannelDescs имеет значение FALSE, в противном случае будет использоваться pInverseTransposeBoneMatrices.
-
pInverseTransposeBoneMatrices [in]
-
Тип: D3DXMATRIX*
Если это значение равно NULL, оно будет равно pBoneMatrices. Этот массив матриц будет использоваться для преобразования вершин только в том случае, если значение IsNormal в pChannelDescs имеет значение TRUE, в противном случае будет использоваться pBoneMatrices.
-
pChannelDescs [in]
-
Тип: D3DX10_SKINNING_CHANNEL*
Указатель на структуру D3DX10_SKINNING_CHANNEL, которая определяет член вершины decl, на котором будет выполняться программное облицовка.
-
NumChannels [in]
-
Тип: UINT
Количество структур D3DX10_SKINNING_CHANNEL в pChannelDescs.
Возвращаемое значение
Тип: 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);
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|
См. также раздел