Exemple #1
0
HRESULT KG3DMesh::Helper_CreateSkinInfo()
{
	HRESULT hrResult = E_FAIL;
	HRESULT hrRetCode = E_FAIL;
	SAFE_RELEASE(m_pSkinInfo);
	KG_PROCESS_ERROR(m_ppMeshes[SMBT_NORMAL]);

	hrRetCode = D3DXCreateSkinInfoFVF(m_ppMeshes[SMBT_NORMAL]->GetNumVertices(),
		m_ppMeshes[SMBT_NORMAL]->GetFVF(),
		m_dwNumBone,
		&m_pSkinInfo);
	KG_COM_PROCESS_ERROR(hrRetCode);

	for(DWORD dwBoneIndex = 0; dwBoneIndex < m_dwNumBone; dwBoneIndex++)
	{
		BoneInfo1 &BoneInfo = m_pBoneInfo[dwBoneIndex];
		hrRetCode = m_pSkinInfo->SetBoneInfluence(dwBoneIndex,
			BoneInfo.NumVerticesRef,
			BoneInfo.VerticesIndexRef,
			BoneInfo.VerticesWeightRef);
		KG_COM_PROCESS_ERROR(hrRetCode);

		hrRetCode = m_pSkinInfo->SetBoneName(dwBoneIndex, BoneInfo.strBoneName);
		KG_COM_PROCESS_ERROR(hrRetCode);

		hrRetCode = m_pSkinInfo->SetBoneOffsetMatrix(dwBoneIndex, &m_pmatReverseMatrix[dwBoneIndex]);
		KG_COM_PROCESS_ERROR(hrRetCode);
	}
	hrResult = S_OK;
Exit0:
	return hrResult;
}
//------------------------------------------------------
//		スキン情報作成
//------------------------------------------------------
LPD3DXSKININFO	iex3DObj::CreateSkinInfo( LPIEMFILE lpIem )
{
	int				i;
	LPD3DXSKININFO	lpInfo;
	u32				Declaration = D3DFVF_MESHVERTEX;
	if( lpIem->version >= 4 ) Declaration = D3DFVF_MESHVERTEX2;

	//	スキン情報作成
	D3DXCreateSkinInfoFVF( lpIem->NumVertex, Declaration, lpIem->NumBone, &lpInfo );
	//	ボーン設定
	for( i=0 ; i<lpIem->NumBone ; i++ ){
		lpInfo->SetBoneInfluence( i, lpIem->lpBone[i].IndexNum, lpIem->lpBone[i].Index, lpIem->lpBone[i].Influence );
	}
	return lpInfo;
}