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*
各ボーンにマップされたポイントを変換するために使用される行列の配列。これにより、bone[i] にマップされた頂点が p BoneMatrices[i] によって変換されます。 この配列は、pChannelDescs の IsNormal 値が FALSE に設定されている場合にのみ行列を変換するために使用されます。それ以外の場合は、pInverseTransposeBoneMatrices が使用されます。
-
pInverseTransposeBoneMatrices [in]
-
種類: D3DXMATRIX*
この値が NULL の場合、pBoneMatrices と等しく設定されます。 この行列の配列は、pChannelDescs の IsNormal 値が TRUE に設定されている場合にのみ頂点を変換するために使用されます。それ以外の場合は pBoneMatrices が使用されます。
-
pChannelDescs [in]
-
ソフトウェア スキニングが実行される頂点のメンバーを決定する、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);
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|
こちらもご覧ください