LINUX.ORG.RU

Физика в Angry Birds


0

2

Ищу литературу про моделирование физики.

В частности интересует как правильно программировать то что происходит со статичными объекатми в сабже, когда в них попадает птичка.

Сам полет кажется тривиален

★★★★

Ответ на: комментарий от marvin_yorke

Эта опечатка войдет в мое личное дело? ;)

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

ну с 2D все бол-мен подъемно. За 3D я бы сам не взялся - что то актуальное будет жутко тормозить.

Конструкция состоит из балок, шариков и связей между ними. У каждого шарика есть масса (вращением пренебрежем), координаты и импульс. У каждой балки есть масса, длина (откуда сразу получаем момент инерции, который в 2D случае есть просто число), координаты центра масс (ц.м.), импульс, момент импульса относительно ц.м. и угол поворота относительно вертикали или горизонтали, что больше нравится.

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

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

Дальше пишем гамильтониан (полную энергию системы), из него уравнения движения, решаем их численно методом Верле. На каждом шаге проверяем балки на слом/связи на разрушение. Фсе.

AIv ★★★★★
()
Ответ на: комментарий от baverman

Нет там ничего сложного. Поведение объектов можно совсем в лоб расчитать используя тригонометрию и кинематику.

Jetty ★★★★★
()
Ответ на: комментарий от OxiD

проверка условия пересечения окружности(птица) и отрезка(балка). если есть контакт - балка разрушается(анимация), птица летит дальше. для эффекта домино необходимо дополнительное состояние объекта (живое, мертвое + больное). птица контактирует с 1-балкой, она переходит из состояния живая в состояние больное. проверяшь пересечение балок (больной отрезок-любой отрезок). в конце итерации больное-мертвое-анимация разрушения.

marat2345
()
Ответ на: комментарий от marat2345

+ для движения больной балки используешь «pinball contact» + закон ньютона.

marat2345
()
Ответ на: комментарий от Jetty

Нет там ничего сложного.

Сын будет в шестом классе, дай ему решить.

baverman ★★★
()
Ответ на: комментарий от Jetty

Для составления простой(подобной AngryBirds) физики полета и столкновения тел и правда достаточно школьного курса физики.

Вот на первый взгляд все так. А вы попробуйте реализовать.

В школьной математике возможно найдется только численное интегрирование. В школьной физике — формула F = ma. В школьном материале не найдется информации для написания быстрого этапа broad phase поиска столкновений. Для narrow phase нужно уметь хотя бы метод разделяющих плоскостей, которого опять же в школе нет. Для связок (constraints) нужно писать многопроходный решатель. Опять же, чтобы все это не тормозило.

Когда все это написано, то привет настройка. Почему быстрые объекты пролетают через тонкие? Нужно CCD, штука нетривиальная для движущихся объектов. Почему объекты нереалистично отскакивают от земли? Почему при переменном шаге симуляции все дрожжит? Нужно написать «засыпание» объектов. Почему поставленные друг на друга ящики начинают колебаться, входят в резонанс и разлетаются? Нужно написать «засыпание» и для стэкинга обектов.

В общем, школьная физика тут совсем не нужна. Нужна линейная алгебра (конец 1 курса университета), численные методы (2 курс), ну и много вещей, которым в универе тоже не научат.

note173 ★★★★★
()

Box2D, если я не ошибаюсь.

bk_ ★★
()

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

note173 ★★★★★
()
Ответ на: комментарий от note173

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

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

В box2d вычисления попроще, но все равно не настолько тривиальные, чтобы так сходу написать, даже зная основы дискретной симуляции, не говоря о физике 6 класса.

note173 ★★★★★
()
Ответ на: комментарий от bk_

Вот есть у меня одно глубокое убеждение: чтобы научиться чему-то не нужно с самого начала читать много умных книг, лезть в тонкости и утонуть в них. Не нужно начинать с самого низкого уровня, гораздо лучше — с самого высокого. Так намного быстрее приходит понимание, как все работает в общем, и сразу же виден результат (результат — одна и главных вещей в изучении чего-либо).
Применительно к игровой физике — сначала нужно понять ее особенности. Готовый графический и физический движок хорошо подходит для этих целей.

note173 ★★★★★
()
Ответ на: комментарий от OxiD

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

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.