Физический движок, который может обрабатывать несколько аттракторов?

9

Я собираю игру, в которую в основном будут играть с трехмерной гравитацией.

Под этим я подразумеваю реалистичное поведение множества планет / звезд / лун, а также построение и прогнозирование пути в гравитационном поле.

Я смотрел на различные физические движки, такие как Bullet , Tokamak или Newton , но ни один из них, похоже, не подходит, так как по сути мне пришлось бы переписать гравитационный двигатель в их рамках.

Знаете ли вы физический движок, способный работать с множеством тел, которые все притягиваются друг к другу?

Мне не нужно управление сценографией или рендеринг, просто физика ядра. (обнаружение столкновения было бы бонусом, как и динамика твердого тела).


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

[править]: Есть несколько отличных ресурсов для физического моделирования задач n-тела онлайн и на стеке

Brice
источник
7
Разве вы не можете просто использовать Bullet и отказаться от его стандартной силы тяжести? (например, избегайте вызова applyGravity, вызывайте setGravity с нулевым вектором, используйте BT_DISABLE_WORLD_GRAVITY ...). Тот факт, что желаемый эффект является формой гравитации, не означает, что вам нужно быть в состоянии достичь этого с помощью API-интерфейсов "gravity" базовый физический движок.
Neverender
Вы могли бы использовать какие-то обратные источники
Рой Т.
1
@RoyT. Сама пружина имеет силу, пропорциональную d, тогда как сила тяжести d ^ (- 2) (даже не d ^ (- 1)). Вы можете получить орбиты от обоих, но с очень разными характеристиками. Если вы просто имеете в виду «использовать основанное на расстоянии ограничение, предоставляемое движком», то да - если оно имеет квадратичное значение.
Кевин Рейд
@KevinReid вы, вероятно, правы, но я не уверен, что получу ваше объяснение. Вы имеете в виду, что силы пружины линейно зависят от расстояния, а сила тяжести зависит от квадрата?
Рой Т.
1
Osmos - отличная маленькая игра. лучшее, что я смог найти, это интервью
Брайс

Ответы:

2

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

Возможно, вы сможете вытащить физический движок из Stellarium или другого астрономического пакета.

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

Сервет
источник
На самом деле, с проблемой N-тела вы можете получить стабильные орбиты. Это зависит от вашего метода интеграции. Я управлял стабильными орбитами как с верлетом, так и с RK4.
Брайс
Это справедливое предложение предварительно вычислить пути, но я хотел бы динамически генерировать системы на лету, а также, планеты меня не особо волнуют. Я на самом деле хочу, чтобы на корабли влияла гравитация, и, поскольку они будут находиться под контролем игрока, я не могу предварительно рассчитать пути.
Брайс
Для записи стабильные орбиты - это создание симметричных систем. Кроме того, сроки нестабильности намного больше, чем продолжительность средней игры. (нестабильно от 100 до 1000 с планетарных орбит, в то время как игра не будет длиться дольше 4/5)
Брайс
Для примеров стабильных орбит, посмотрите на это (использует Верлет)
Брайс
1

Есть ли ограничение платформы? Потому что PhysX от nVidia имеет именно то, что вы ищете, и многое другое .

YuriAlbuquerque
источник
Приветствия @YuriAlbuquerque, это довольно интересное лидерство. Я планирую выполнить физику на стороне сервера и на стороне клиента рендеринга, поэтому мне придется проверить, подходит ли он, но это звучит хорошо.
Брайс