다음을 통해 공유


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*

각 뼈에 매핑된 점을 변환하는 데 사용되는 행렬 배열로, 뼈[i]에 매핑된 꼭짓점이 pBoneMatrices[i]에 의해 변환됩니다. 이 배열은 pChannelDescs의 IsNormal 값이 FALSE로 설정된 경우에만 행렬을 변환하는 데 사용되며, 그렇지 않으면 pInverseTransposeBoneMatrices가 사용됩니다.

pInverseTransposeBoneMatrices [in]

형식: D3DXMATRIX*

이 값이 NULL이면 pBoneMatrices와 동일하게 설정됩니다. 이 행렬 배열은 pChannelDescs의 IsNormal 값이 TRUE로 설정된 경우에만 꼭짓점을 변환하는 데 사용됩니다. 그렇지 않으면 pBoneMatrices가 사용됩니다.

pChannelDescs [in]

형식: D3DX10_SKINNING_CHANNEL*

소프트웨어 스키닝이 수행될 꼭짓점 decl의 멤버를 결정하는 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 인터페이스