Bagikan melalui


METODE ID3DX10SkinInfo::D oSoftwareSkinning

Lakukan skinning perangkat lunak pada array simpul.

Sintaks

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
);

Parameter

StartVertex [in]

Jenis: UINT

Indeks berbasis 0 ke dalam pSrcVertices.

VertexCount [in]

Jenis: UINT

Jumlah simpul yang akan diubah.

pSrcVertices [in]

Jenis: batal*

Arahkan ke array simpul untuk diubah.

SrcStride [in]

Jenis: UINT

Ukuran, dalam byte, dari puncak dalam pSrcVertices.

pDestVertices [masuk, keluar]

Jenis: batal*

Arahkan ke array simpul, yang akan diisi dengan simpul yang diubah.

DestStride [in]

Jenis: UINT

Ukuran, dalam byte, dari puncak dalam pDestVertices.

pBoneMatrices [in]

Jenis: D3DXMATRIX*

Array matriks yang akan digunakan untuk mengubah titik yang dipetakan ke setiap tulang, sehingga simpul yang dipetakan ke tulang[i] akan diubah oleh pBoneMatrices[i]. Array ini akan digunakan untuk mengubah matriks hanya jika nilai IsNormal di pChannelDescs diatur ke FALSE, jika tidak, pInverseTransposeBoneMatrices akan digunakan.

pInverseTransposeBoneMatrices [in]

Jenis: D3DXMATRIX*

Jika nilai ini NULL, nilai ini akan diatur sama dengan pBoneMatrices. Array matriks ini akan digunakan untuk mengubah simpul hanya jika nilai IsNormal di pChannelDescs diatur ke TRUE, jika tidak, pBoneMatrices akan digunakan.

pChannelDescs [in]

Jenis: D3DX10_SKINNING_CHANNEL*

Penunjuk ke struktur D3DX10_SKINNING_CHANNEL, yang menentukan anggota vertex mendekoskan pengulihan perangkat lunak akan dilakukan.

NumChannels [in]

Jenis: UINT

Jumlah struktur D3DX10_SKINNING_CHANNEL di pChannelDescs.

Mengembalikan nilai

Jenis: HRESULT

Jika metode berhasil, nilai yang dikembalikan S_OK. Jika metode gagal, nilai yang dikembalikan dapat berupa: E_INVALIDARG.

Keterangan

Berikut adalah contoh cara menggunakan skinning perangkat lunak:

//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);

Persyaratan

Persyaratan Nilai
Header
D3DX10.h
Pustaka
D3DX10.lib

Lihat juga

ID3DX10SkinInfo

Antarmuka D3DX