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 |
|
Pustaka |
|
Lihat juga