gemicha написа:GeLeTo написа:Може все пак да се вземе скаларното произведение разделено на дължината.
Всъщност не е обратно пропорционално на дължината.
Нее, защото в скаларното произведение влиза и дължината на векторите крайния резултат ще е пропорционален на квадрата на дължината, делим на тази дължина - крайния резултат ще е пропорционален на дължината. А не обратно пропорционален.
Но защото нали трябва и тангентен вектор да се смята, подходящата формула за всяка двойка кокали е
min( ragdollBoneMatrix.m[0].Dot( animBoneMatrix.m[0]) ,ragdollBoneMatrix.m[2].Dot(animBoneMatrix.m[2]) )*boneLength
Това дава критерий за колко еднакво са ориентирани матриците на двата кокала, пропорционален на дължината. Вместо дължината на кокала - може да се използва някакъв weighting коефициент. Примерно да е най-голям за таза, по-малък за първия кокал на всеки крайник и съвсем малък или нулев за китките и пръстите.
gemicha написа:Не знам дали таза е ключа...
Това зависи от това колко анимации за ставане ще се правят. Не е казано че всички кокали трябва да се смятат, може да е таза + по 1 кокал от крайниците примерно. Но таза определено е най-важен. Дали е седнал, дали е легнал, дали е по лице, по гръб или настрани - може да се разбере по положението на таза.
А може да се тества не само спрямо началния кадър на анимацията, а и по-предни. Примерно ако в началото на анимацията е легнал, после седнал а рагдола си е в седнало положение - може да се тръгне от по-късен етап на анимацията.
gemicha написа:Ако някой има време и желание може да си поиграе, но според мен сложи примерно 100мс за възстановяване, избири случайно една от ставащите анимации и интерполирай до първия кадър. Никой нищо няма да забележи в много голяма част от паданията.
Според мен голяма част от интерполациите ще изглеждат направо комично. Не можеш просто така да интерполираш от две съвсем различни положения и да очакваш нещо смислено.