LINUX.ORG.RU

как написать 2d физический движок?

 


1

2

Я понимаю что это работа не на один вечер, и что задача эта не из легких, тем не менее хочется. Что хотелось бы - примерно как в LIMBO

UPD не думаю что язык играет какую-то роль,но писать я собрался на C++

★★★

Последнее исправление: abs (всего исправлений: 2)

робота

Да, робота придется искать не на один вечер :)

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

Изучить курс классической механики

Готово

написать движок

Попытки были, средней степени успешности, до LIMBO не дотягивает.

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

Топ-пост выглядит как проэкт, но оказывается, что «Попытки были, средней степени успешности». Дык в чем закавыка? Есть конкретные вопросы, проблемы?

panzerito
()

В Limbo, AFAIK, за физику отвечает Box2D (что совсем неудивительно). Поэтому единственный правильный ответ на ОП: никак, взять готовый де-факто стандартный движок.

Из неправильных ответов: можно поковырять Box2D, если просто хочется своего велосипеда. Можно набросать общий план движка, руководствуясь курсом классической механики, который «готово». Можно начать разрабатывать снизу вверх: сделать сначала обработку столкновений шариков, потом столкновений неправильных форм, потом движение/ускорение/гравитацию, потом свойства материалов и т.д.

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

единственный правильный ответ

Скукота же. Может ему в кайф писать движок.

В копилку неправильных советов: изучи common lisp.

panzerito
()

Берешь Box2D или Nape, смотришь что там в потрохах, пишешь свой, более хороший.

umren ★★★★★
()

Ну начни с простой механики, это не сложно. Погугли gamedev.ru (вроде так). Там много статей интересных было.

А вообще держи в курсе. Сам хотел когда-то написать, но времени не было :)

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

«простая» механика

Приложение сил к объекту без учета столкновений и вращения объекта. Формулы простые, писать легко. Чисто на потренироваться.

А дальше прикручивать вращение объекта после приложения сил к произвольной точке, столкновения и.т.д.

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

Вообще то законы движения, заложенные в игровых движках, к реальной физике имеют мало отношения;-)

Надо погуглить. Были какие то внятные статьи о физике в игровых движках. Иначе это двольно много времени может занять - даже если отталкиваться от реальной физики (что далеко не всегда выходит зрелищно) встанет во всеь рост проблема с соответствующими численными методами. А там (с т.з. механики) задача N-тел, + МДДТ (если что то разрушается) и пр... в общем это нетривиальная штука.

AIv ★★★★★
()

Мне давали ссылку на какие-то lecture notes какого-то вуза, я свой движок писал по ним. У меня они наверное еще есть, постараюсь загрузить вечером, если не забуду.

anonymous
()

Не осилишь без нехилой математики и огромного количества времени.

peregrine ★★★★★
()

В чём проблема? Берёшь объект. Определяешь у него bounding box, сообщаешь ему массу. Далее заводишь вселенский таймер, который будет «тикать» с периодом в один квант времени. И каждый «тик» проверяешь координаты, скорости и т.п.
Сложного ничего нет, кроме большого количества рутинной работы.

Stahl ★★☆
()

Hint: используй представление объектов в виде CSG, тогда всякие задачи вроде определения столкновений, вычисления центра масс, и т.д. становятся тривиальными, особенно если можешь воспользоваться GPU.

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

И каждый «тик» проверяешь координаты, скорости и т.п.

Ньютон. Расходится. Энергии и импульсы не сохраняются.

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

«Проверяешь» читай как «вычисляешь».

Stahl ★★☆
()

1. Изучаешь курс классической механики.

2. Частично забываешь курс классической механики и лепишь везде приближения, табличные расчеты и тому подобные штуки.

2.1. Если очень надо точную физику, плачешь, вспоминаешь курс классической механики, реализуешь все это с учетом дискретности пространства и времени, смотришь на производительность, снова плачешь.

2.2. Объекты представляй в виде квадратов (просто) или полигонов (сложнее)

2.2.1. Для начала определи процедуру пересечения.

2.2.2. Введи тяготение.

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

Ну и так далее

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

Ну это не проблема. Как раз много времени для всякой фигни и при этом букварь уже позади.

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

Считай только начальные и конечный точки,

При низкой частоте может привести к феерическим проблемам с коллизиями.

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

Проблема в том, что ТС ещё в школе или на первый курс поступил.

Первый курс, проблем с математикой и физикой нет)

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

Топ-пост выглядит как проэкт, но оказывается, что «Попытки были, средней степени успешности». Дык в чем закавыка?

Я писал для шариков, там проще чем с не шариками.

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

Взять готовый и отлаженный движок Box2D.

Пусть пишет, сессия еще нескоро

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

Для простого движка достаточно практически чистой кинематики.

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

Какая специальность?

радиоэлектронные аппараты

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