как удалить box2d maxVelocity?

#box2d

#box2d

Вопрос:

Я не знаю, есть ли такой параметр в Box2D или нет, но когда я дублирую все числа в своей сцене, моделирование дает разные результаты, я просто имитировал маятник (соединение статической коробки с динамической коробкой с помощью revolute joint), и когда я умножил все значения в моей сцене на 32 (чтобы иметь одинаковый масштаб с моей игрой), он падает медленнее, чем в обычном состоянии (и я также увеличил гравитацию). кажется, что когда маятник падает, он достигает некоторой максимальной скорости и не выходит за ее пределы. итак, когда он возвращается обратно, он достигает половины высоты, с которой начал падать. кстати, я думаю, что это не вызвано трением, потому что я установил все значения сброса и трения равными нулю, и, кроме того, эта проблема не возникала до масштабирования моей сцены.

Ответ №1:

Измените значение b2_maxTranslation в b2Settings.h

Ответ №2:

Box2d имитирует с использованием итеративного решателя, и результат может отличаться для объектов разного размера — это нормально. В руководстве написано, что наилучший размер моделируемых динамических объектов составляет 0,1 — 10 и до 50 для статических тел. Также увеличение всех размеров не приведет к одинаковому перемещению в реальном мире. Например, представьте сферу радиусом 1 метр, падающую со 100-метровой высоты. Например, умножение его радиуса и высоты на 10, очевидно, даст разное время падения, потому что это зависит только от высоты.

Также я однажды пробовал nvidia physx. Я только что создал очень простую сцену — куб, падающий на плоскость и подпрыгивающий. Куб был со стороной один метр. Сначала я моделировал с плотностью куба 10, и все было идеально. Затем я решил смоделировать железный куб и изменил плотность на 7200. Как вы понимаете, отказ ожидался полностью таким же, потому что параметр восстановления не был изменен. Но симуляция была действительно уродливой — куб падал в плоскость и уродливо подпрыгивал. Поэтому действительно важно сохранять значения в рекомендуемом диапазоне.

Комментарии:

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

2. по-прежнему некорректно умножать все значения на одну и ту же константу. Рассмотрим пример, в котором вы умножаете усилие на 10, длину на 10, крутящий момент на 10. Это будет неправильно, потому что в этом случае крутящий момент должен быть умножен на 100. Анализ размеров немного сложнее. И все же даже правильное масштабирование не обеспечит такой же симуляции

3. Также в b2Body есть такой параметр, как linearDamping. Возможно, это значение не равно нулю по умолчанию. Попробуйте установить его равным нулю

4. я уже установил все значения демпфирования равными нулю (линейные или угловые), я просто масштабировал гравитацию (м / с ^ 2), скорость (м / с) и положение (м), так что результат должен быть таким же!