Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / ragdoll , инверсная кинематика и трансформация связанных костей

ragdoll , инверсная кинематика и трансформация связанных костей

Поделиться
BernsПользовательwww12 окт. 201721:03#0

ну вот и добрался до более продвинутой скелетной анимации, поэтому появились некоторые вопросы по этой теме.
- как оно обнаруживает столкновения? модели имеют low-poly сетку для физики или это какое-то мучение с хитбоксами?
- что до веса костей? у меня самопальный плагин экспорта из 3ds max, но годных для связи с физикой плагинов я не нашел, а делать шаблоны в движке не хочется. может записывать массу суставов прямо в названии и извлекать уже при загрузке?

- как оптимальнее рассчитать и организовать дерево (а может есть другой способ?) связей костей? вот допустим,голова привязана к туловищу, туловище к ноге, нога является корневой. воздействуя на ногу, появляются воздействия на туловище и голову, т.е получается примерно такая таблица, дальностью в 4 кости:
нога    id1[0][0][0][0]
тело    id2[1][0][0][0]
голова id3[1][2][0][0]

но это родительские привязки, а при трансформации родительских, трансформацию нужно применять ко всем дочерним и в целях оптимизации желательно иметь их число и индекс каждой из них.
уже так:

нога    id1[2][3][0][0]  2
тело    id2[3][0][0][0]  1
голова id3[0][0][0][0]  0

полагаю, считается так:

int _cont;
int  parrent_base[256][16];
int num_parrents[256];

for (int i = 0; i < num_objects; i ++)
     {
             _cont = 0;
             for (int c= 0;c < num_objects; c ++)
                  {
                      if (i == model[model_id].parrent[c] )
                        {
                          parrent_base[i][_cont] = c;
                          _cont++;
                         }
           
                   }
          num_parrents[i] = _cont;
     }


не знаю, стоит ли так делать в динамике, или просчитывать заранее.
после чего, при расчете анимации каждая кость трансформируется так:

for (int i = 0; i < num_objects; i ++)
     {
        /*тут код трансформации кватерниона на оси ведущего сустава*/
        /*...*/

       for (int p = 0; p < num_parrents[i]; p++)
            {
              /*трансформация дочерних...*/

            }
     }


правильный ли это подход?

SuslikМодераторwww13 окт. 20173:54#1
Berns
> - как оно обнаруживает столкновения? модели имеют low-poly сетку для физики или
> это какое-то мучение с хитбоксами?
разумеется, в каком-то виде нужны хитбоксы или другая аппроксимирующая геометрия. полигональные практически не применяются.

BernsПользовательwww14 окт. 20172:09#2
теперь я кажется понял, какой огромный сделал просчет, когда экспортировал и оптимизировал анимацию под глобальные координаты

/ Форум / Программирование игр / Физика

2001—2017 © GameDev.ru — Разработка игр