Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 224

IK(Inverse kinematics) Инверсная кинематика

16.01.2022, 12:36. Показов 1361. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все здравствуйте.
Достаточно серьёзный вопрос - инверсная кинематика.
Начну с сути вопроса, что мне нужно. Мне нужно, для примера, кодом взять ступню персонажа и переместить её на какой-то шаг от тела. Соответственно за этой ступнёй должны тянуться все остальные части тела, лодыжка, голень и т.д.(но пока, для наглядности, хотя бы 3 сустава).
Мне нужно понять зависимость суставов(голень и лодыжка) от начального сустава(ступни), может быть есть понятные статьи об этом, не заумные и не бесполезные, а те, где понятно будет что и как работает, пусть хотя бы в 2D. Сколько искал, очень мало информации и в общем ничего толкового не нашел.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.01.2022, 12:36
Ответы с готовыми решениями:

Инверсная кинематика
Какие существуют наиболее современные алгоритмы для ИК? Читал две статьи Hugo Elias (первая и вторая). Но говорят и вторая давно...

Не работает Inverse матрицы
Подскажите, почему пишет Inverse::sing: Matrix {{0.3,0.,0.,0.,0.},{0.,0.3,0.,0.,0.},{0.,0.,2.4,0.,0.},{0.,0.,0.,0.,0.},{0.,0.,0.,0.,0.7}}...

Напишите код функции inverse(x)
Напишите код функции inverse(x), вызов которой меняет число x на обратное, т.е. на 1/x. Например, в результате выполнения кода x=10;...

7
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
16.01.2022, 13:23
Цитата Сообщение от tonline_kms65 Посмотреть сообщение
хотя бы 3 сустава
FABRIK
https://habr.com/ru/post/222689/
Но реально лучше потратить время на импорт скелета с мешем из 3д пакета т.к. там кроме тысяч строк кода еще и часы работы в проф редакторе чтобы было реалистично. А еще лучше обучиться работать с приличным 3д движком где есть импорт модели, иначе так и будете тратить годы на велосипеды…такова современная реальность. А этот фабрик ну игрушка ведь…
1
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,699
17.01.2022, 06:11
Изучать аналитическую механику: степени свободы, склерономные и реономные связи, уравнения Лагранжа второго рода...
0
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 224
04.03.2022, 07:00  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Но реально лучше потратить время на импорт скелета с мешем из 3д пакета т.к. там кроме тысяч строк кода еще и часы работы в проф редакторе чтобы было реалистично. А еще лучше обучиться работать с приличным 3д движком где есть импорт модели, иначе так и будете тратить годы на велосипеды…такова современная реальность. А этот фабрик ну игрушка ведь…
Движек более чем приличный, зря ты так.
Код несовершенен, вернее несовершенен для понимания. Модель запросто можно скомпилировать, вместе с её инверсной кинематикой, но только в формате .smd, это просто файл с положением координат костей в определённый промежуток времени. В движке(в игре) присутствуют модели с использованием IK, я их разобрал целиком и полностью, но многое в самом коде скрыто, а код на чистом c++, что бы там что-то найти.... В самом движке(HL2, CSS, CS-GO и т.д.) очень много моделей
использующих IK.
Я хочу сделать кодом, что бы была возможность учета положения улов костей.
Твой пример может быть и хорош, но он для меня пока непонятен, я пытаюсь понять, но не всё понятно.
Пусть это и игрушка, для того что бы понять принцип работы - можно игрушку разобрать, хуже не будет.

Добавлено через 10 минут
Если взять для примера тот-же Unreal-Engine, конечно движек Source неудобен для взаимодействия с пользователем, в этом плане новые движки более доступны для понимания, соответственно более гибкие.


Может быть у тебя есть пример для соединения из двух костей? Пока для меня 3 кости это много.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
06.03.2022, 11:46
Цитата Сообщение от tonline_kms65 Посмотреть сообщение
но он для меня пока непонятен
Тамже в картинках все… это итерационный алгоритм.

Цитата Сообщение от tonline_kms65 Посмотреть сообщение
пример для соединения из двух костей?
Две кости имеют аналитическое решение, пересечение двух окружностей…веселуха начинается когда отрезков 3.

Для анимации нужно брать готовые проги и библиотеки тут без вариантов, иначе утоните как в математике так и в коде\книгах.
Обсуждаем физ. движки
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
07.03.2022, 14:46
Цитата Сообщение от tonline_kms65 Посмотреть сообщение
присутствуют модели с использованием IK
Пример модели?
В source engine поидее вообще не должно быть инверсной кинематики т.к. она по идее вся численная и тяжелая. Там покадровая+ смешивание. Инверсная кинематика применяется в пакетах которые рассчитывают анимацию персонажей вне игры.
0
7 / 55 / 9
Регистрация: 03.02.2022
Сообщений: 570
18.04.2022, 22:49
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Изучать аналитическую механику: степени свободы, склерономные и реономные связи, уравнения Лагранжа второго рода...
Чуваку кинематика нужна, а не динамика. Соответствие Лагранжу не так уж важно для игры.
0
 Аватар для tonline_kms65
-16 / 0 / 0
Регистрация: 17.09.2016
Сообщений: 224
19.04.2022, 07:59  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Пример модели?
В source engine поидее вообще не должно быть инверсной кинематики т.к. она по идее вся численная и тяжелая. Там покадровая+ смешивание. Инверсная кинематика применяется в пакетах которые рассчитывают анимацию персонажей вне игры.
Насколько я понимаю, там все модели игроков(нижняя часть тела), анимируется при помощи цепочек инверсной кинематики:
C++ (Qt)
1
2
3
4
5
6
      $definebone "BoneBase" "" 0.000000 0.000000 46.000000 0.000019 -90.000017 90.000017 0.000000 0.000000 0.000000 -0.000000 0.000000 0.000000
      $definebone "BoneHipRear_R" "BoneBase" -13.410420 -8.062969 13.587399 -2.495733 -94.354843 150.094925 0.000000 0.000000 0.000000 -0.000000 -0.000001 0.000002
      $definebone "BoneShinRear_R" "BoneHipRear_R" 19.692705 -0.000116 -0.000001 0.000000 -5.000032 -0.000044 0.000000 0.000000 0.000000 0.000000 -0.000000 0.000002
.................
...........
...
C++ (Qt)
1
2
3
4
$ikchain "frontfoot_r" "BoneFootForward_R" knee 0.707 0.0 0
$ikchain "frontfoot_l" "BoneFootForward_L" knee 0.707 0.0 0  //  ??
$ikchain "rearfoot_l" "BoneFootRear_R"   knee 0.707 0.0 0
$ikchain "rearfoot_r" "BoneFootRear_L"   knee 0.707 0.0 0
сама анимация задаётся с помощью смешивания обычных анимаций и чем-то наподобие скриптовой, устанавливаются правила (IK)для каждого блока анимации(простейший пример):
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$sequence stand ACT_WALK 1 {
    "anims\stand.smd"
 
    //activity "ACT_STAND" 1
    { event AE_CL_ENABLE_BODYGROUP 0 "ray" }
    fadein 0.2
    fadeout 0.2
    fps 10
    ikrule "frontfoot_l" footstep contact 0 fakeorigin 129.92 236.9 -500 fakerotate 0 0 0 floor 0 height 36 radius 0 range 0 0 33 46 target 0 usesequence 
    ikrule "frontfoot_r" footstep contact 30 fakeorigin 121.93 78.5 -500 fakerotate 0 0 0 floor 0 height 36 radius 0 range 0 0 72 76 target 1 usesequence 
    ikrule "rearfoot_l" footstep contact 60 fakeorigin -256.48 -0.05 -500 fakerotate 0 0 0 floor 0 height 36 radius 0 range 0 0 72 86 target 2 usesequence 
    ikrule "rearfoot_r" footstep contact 90 fakeorigin -256.48 -0.05 -500 fakerotate 0 0 0 floor 0 height 36 radius 0 range 0 0 72 86 target 3 usesequence 
 
    walkframe 125 LX LY
    weightlist "weights_default"
}
Всё это в файле компиляции модели(.qc).
Верхняя часть тела использует простые блоки анимации(где-то есть блендинг(смешивание)).

Добавлено через 8 минут
Excalibur921,

Ты занялся изучением движка Source?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2022, 07:59
Помогаю со студенческими работами здесь

Выведите вспомогательные матрицы из (Inverse)
Выведите вспомогательные матрицы из (Inverse), полученные этой функцией, и объясните, как они получаются. грустно аж стало ...

Польская инверсная запись
Написать программу интерпретации (вычисления) польской инверсной записи программы (предусмотреть арифметические операции и присваивание). ...

Инверсная динамика в SolidWorks
Недавно начал заниматься разработкой моделей в SolidWorks. Стало интересно, можно ли в SolidWorks решать инверсную динамику? Хочется...

Польская инверсная запись.
Всем доброго времени. Суть проблемы до смешного банальна. Написал программу частично сам, частично задействовал и куски кода. Теперь не...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru