Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Анимация X файлов в DirectX 
:(
    Опции темы
dandy77
Дата 28.4.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 18.7.2008

Репутация: нет
Всего: нет



У меня есть следующий код:

Код

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-й так потом нигде и не испльзуем?
PM MAIL   Вверх
BorisVorontsov
Дата 12.5.2009, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: 1
Всего: 10



По поводу "как все это работает", могу посоветовать книжку Адамса "Advanced Animation in Directx" (примеры можно взять отсюда: http://itbookz.ru/nodata/nodataprog/4555-.html)


--------------------
[code=cpp]
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;
[/code]
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.1017 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.