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