Метод 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);

Требования

Требование Значение
Заголовок
D3DX10.h
Библиотека
D3DX10.lib

См. также раздел

ID3DX10SkinInfo

Интерфейсы D3DX