INT CLcXSkinIns::Create(void* p1, void* p2, void* p3, void* p4) { XTrack* pInst = NULL; m_pOrg = (CLcXSkinSrc*)p1; pInst =(XTrack*)p2; LPD3DXANIMATIONCONTROLLER pAcOrg = (LPD3DXANIMATIONCONTROLLER)m_pOrg->GetAniController(); m_pFrameOrg = (LPD3DXFRAME)m_pOrg->GetFrameRoot(); HRESULT hr=-1; DWORD i, dwTracks; LPD3DXANIMATIONCONTROLLER pNewAC = NULL; if(pAcOrg) { if(m_pAC) m_pAC->Release(); UINT MaxNumAnimationOutputs = pAcOrg->GetMaxNumAnimationOutputs(); UINT MaxNumAnimationSets = pAcOrg->GetMaxNumAnimationSets(); UINT MaxNumTracks = pAcOrg->GetMaxNumTracks(); UINT MaxNumEvents = pAcOrg->GetMaxNumEvents(); hr = pAcOrg->CloneAnimationController(MaxNumAnimationOutputs , MaxNumAnimationSets , MaxNumTracks , MaxNumEvents , &pNewAC); if(FAILED(hr)) return -1; m_pAC = pNewAC; // LPD3DXTRACK_DESC; //LPD3DXANIMATIONSET pAS= NULL; FLOAT fTrackPosition = pInst->fTrackPosition; FLOAT fTrackSpeed = pInst->fTrackSpeed; // Start with all tracks disabled dwTracks = m_pAC->GetMaxNumTracks(); for( i = 0; i < dwTracks; ++ i ) { m_pAC->SetTrackEnable( i, TRUE ); m_pAC->SetTrackWeight( i, 1.0f ); m_pAC->SetTrackSpeed( i, 1); m_pAC->SetTrackPosition(i, fTrackPosition); } } return 0; }
HRESULT MeshManager::LoadAnimeFromX(LPD3DXANIMATIONCONTROLLER &pAnimControllerTmp,DxAnimeMesh *mesh, const string& fName,const string& path) { //読み込み用アニメーションコントローラ // LPD3DXANIMATIONCONTROLLER pAnimControllerTmp = NULL; /*アニメーションコントローラ関連*/ //アニメーションコントローラの設定 if(pAnimControllerTmp!=NULL) { //トラック数をアニメーションセット数に増やす unsigned TracksNum = pAnimControllerTmp->GetMaxNumTracks(); unsigned AnimSetsNum = pAnimControllerTmp->GetMaxNumAnimationSets(); // if(TracksNum < AnimSetsNum) { TracksNum = AnimSetsNum; } //読み込んだアニメーションコントローラから新たに設定された複製を生成 if(FAILED(pAnimControllerTmp->CloneAnimationController( pAnimControllerTmp->GetMaxNumAnimationOutputs(), pAnimControllerTmp->GetMaxNumAnimationSets(), TracksNum, pAnimControllerTmp->GetMaxNumEvents(), &mesh->pAnimController))) { } //読み込み用アニメーションコントローラの開放 // SAFE_RELEASE(pAnimControllerTmp); //トラックに全てのアニメーションセットを読み込む for(unsigned i = 1; i < AnimSetsNum; i++ ) { //読み込み用オブジェクトの宣言 LPD3DXANIMATIONSET pAnimSet = NULL; //アニメーションコントローラからアニメーションセットを読み込む if(FAILED(mesh->pAnimController->GetAnimationSet(i, &pAnimSet))) { } //指定トラックにアニメーションセットを設定 if(FAILED(mesh->pAnimController->SetTrackAnimationSet(i, pAnimSet))) { } //トラックに設定済みのアニメーションセットを開放 SAFE_RELEASE(pAnimSet); } } else { mesh->pAnimController = NULL; } //フレームの全階層をチェックしてボーンの関連付けを行う if(FAILED((this->SetupBoneFromFrame(mesh->pFrameRoot, mesh->pFrameRoot)))) { return E_FAIL; } return S_OK; }