Войти
ПрограммированиеФорумФизика

Создание физического движка

#0
21:04, 31 мар. 2019

Доброго времени суток, уважаемые форумчане!
  Я долгое время пытаюсь создать собственный простенький физический движок и в процессе создания очень часто натыкаюсь на проблемы такие, как неправильный расчет скорости тел после столкновения, или неправильное нахождение нормали взаимодействия и др. Я уже даже пришел в отчаяние. Несколько раз перечитал статьи и главы в книгах об этих проблемах в надежде, что получиться все правильно реализовать. Но, к сожалению, все мои попытки были напрасны. Поэтому я обратился сюда.
  Не могли бы вы (разработчики, у которых не один год опыта за плечами в создании игр), рассказать мне, как и где вы учились созданию игр и физических движков, какие трудности прошли? И если не сложно, то посоветуйте какие-нибудь источники, в которых подробно и понятно разъясняются все тонкости создания физического движка.
  Заранее огромное спасибо тому, кто откликнется на мою просьбу!


#1
23:51, 31 мар. 2019

Поиск советует это -Помогите написать физический движок :)

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

#2
2:00, 1 апр. 2019

Novorock
Прочитал твой пост и всплакнул = мне сейчас предстоит прикручивание физики :)
Ни разу с этим дело не сталкивался, смотрю на него, как баран на новые ворота )))

#3
(Правка: 3:56) 3:55, 1 апр. 2019

Novorock
первые года 3 моих попыток написания физических движков были достаточно забавны — всё проваливалось во всё и зацеплялось, как зацепляться не может. тогда не то что источников с объяснением тонкостей не было, вообще не было ещё устоявшихся алгоритмов расчёта физики и коллиженов. тогда топовым движком был кривущий ODE. это было в самом начале 2000-х. поэтому просто очень много экспериментировал, переписывал, ещё экспериментировал, ещё переписывал и так далее. добрых 98% кода, который я написал для физики, пришлось полностью выкинуть, потому что со временем я приходил к лучшему решению.

#4
9:37, 1 апр. 2019

Novorock
> неправильное нахождение нормали взаимодействия

Теорема о разделяющей оси

Это будет либо нормаль одной из граней одного из тел либо векторной произведение ребра одного тела на ребро другого тела.
Например, если ударились два бокса, кандидатами на нормаль будут 6 нормалей одного бокса + 6 нормалей другого + 9 векторных произведений. Из этих кандидатов выбираешь ту, на которую проекции пересекаются на наименьшую величину

Далее ищем точки контакта, например это точки пересечения ребер одного тела с гранями другого.

> неправильный расчет скорости тел после столкновения

https://gamedev.ru/code/articles/?id=4706

#5
10:02, 1 апр. 2019

Novorock
> неправильное нахождение нормали взаимодействия и др
gjk + epa, целая  эпопея в моем топике

bykabak
> Возможно, вы нашли друг друга
Я уже здесь.

#6
14:56, 1 апр. 2019

Не знаю обрадую или огорчу, но столкновение по честному вообще не обсчитывается в более или менее нетривиальном случае.
Так что, это не у вас проблемы, это вообще проблемы. Если кажется, что они где-то решены, значит там просто удачно выбрана форма фэйка, произвола, похожего на реальность в тестируемом случае.

Через законы сохранения можно кое-то обсчитать, и надо это делать, но получишь лишь граничные значения, в диапазоне которых может быть многое.
Если пытаться работать честно, надо через сопромат обсчитывать. Но что можно так обсчитать? Первый момент столкновения? Да, можно, если у вас конструкция разрисована до мельчайших деталей. У вас моделирование действительно настолько детальное? Ведь, очень незаметные и небольшие по объему изменения могут качественно менять картинку. Добавишь какую-нибудь диагональную профилированную балочку, и вся конструкция начинает вести себя иначе, прочность тех или иных элементов меняется в десятки и сотни раз.
А что будет на втором этапе, когда нам надо предсказать как будет вести себя конструкция, которая начала деформироваться? Сопромат поможет тут только в тривиальных случаях, на более или менее серьезных моделях считай - не считай, а результат по сути произвольный выйдет. Можно и не пытаться считать, а просто назначить некое произвольное значение из диапазона допустимых по законам сохранения.

#7
(Правка: 23:06) 23:05, 1 апр. 2019

Novorock
Тут уже упомянули Теорему о разделяющей оси
Она позволяет искать пересечения ВЫПУКЛЫХ объектов
Для физики важнее более общий результат: движущиеся объекты сталкиваются либо вершина в грань, либо ребро в ребро, это верно и для невыпуклых объектов. Момент столкновения точки с полигоном или отрезка с отрезков расчитать легко

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