У меня есть следующий код:
Код | void CModel::SetCurrentAnimation(DWORD dwAnimationFlag, DWORD PrevAnim) { // If the animation is not one that we are already using // and the passed in flag is not bigger than the number of animations if(dwAnimationFlag != m_dwCurrentAnimation && dwAnimationFlag < m_dwAnimationSetCount) { m_dwCurrentAnimation = dwAnimationFlag;
D3DXTRACK_DESC Desc; LPD3DXANIMATIONSET AnimSet,AnimSetPrev;
if(dwAnimationFlag==PrevAnim) { m_pAnimController->GetAnimationSet(PrevAnim, &AnimSetPrev); m_pAnimController->SetTrackAnimationSet(0, AnimSetPrev); }
// Move Track 0 to track 1 m_pAnimController->GetTrackDesc(0, &Desc); m_pAnimController->SetTrackDesc(1, &Desc);
m_pAnimController->GetTrackAnimationSet(0, &AnimSet); m_pAnimController->SetTrackAnimationSet(1, AnimSet);
// Load the new animation set into track 0 m_pAnimController->GetAnimationSet(m_dwCurrentAnimation, &AnimSet); m_pAnimController->SetTrackAnimationSet(0, AnimSet);
// Set the track description // Set the weight to 0 for the blend Desc.Weight = 0; Desc.Position = AnimSet->GetPeriod(); m_pAnimController->SetTrackDesc(0, &Desc);
// Key the blend m_pAnimController->KeyTrackWeight(1, 0, m_pAnimController->GetTime(), 0.2, D3DXTRANSITION_EASEINEASEOUT ); m_pAnimController->KeyTrackWeight(0, 1, m_pAnimController->GetTime(), 0.2, D3DXTRANSITION_EASEINEASEOUT );
SAFE_RELEASE(AnimSet) } }
|
Причем этот код вызываеться по нажатии клавиши "Вперед" так:
Код | if (keys[VK_UP]) { g_pModel->SetCurrentAnimation(2,3); } else { g_pModel->SetCurrentAnimation(3,2); }
|
Суть заключаеться в том, что одна анимация (например фигура Тини стоит на месте) сменяеться плавно другой анимацией- переход на ходьбу. Кто то может мне объяснить как работает эта функция SetCurrentAnimation что анимация меняеться плавно. В частности меня интересует что такое треки, зачем они если есть АнимСет, и подробно объясните как там эти треки меняються от одного до другого. Откуда например известно что такое трек 0 а что такое трек 1 когда мы переходим с 0 на 1-й? И почему мы описали 0-й трек и 1-й так потом нигде и не испльзуем? |