Я делаю 3D физический движок для игры в кости. До сих пор играли в кости 1x1x1m и сила тяжести составляла 9,82 м / с ^ 2. Это, конечно, не выглядит реалистично, поскольку игра в кости будет реагировать на все так, что выглядит немного медленно.
Чтобы исправить это, я попытался просто изменить все размеры, чтобы кости были около 0,02 м вдоль стороны. Это, в свою очередь, заставило мои обратные массы и матрицы обратной инерции получить очень большие значения, которые приводят к численной нестабильности.
Какой лучший способ справиться с этим? Могу ли я увеличить масштаб так, чтобы кости были 1x1x1, и просто изменить массу или размер действующих сил? Или я должен настроить что-то еще?
Я думаю, та же проблема может возникнуть, если вы создали игру с очень большими физическими телами, такими как космические корабли или что-то в этом роде, поэтому я надеюсь, что кто-то сталкивался с чем-то подобным раньше.
источник
Ответы:
Вы могли бы
источник
В случае, если у вас возникли проблемы с небольшими числовыми значениями, я предлагаю вам просто все уменьшить. Вы можете даже не использовать «реальные» единицы измерения, а просто некоторые «общие» единицы, которые имеют смысл только внутри двигателя.
Первый вариант, уменьшающий масштаб, потребует использования миллиметров или сантиметров в качестве базовой единицы измерения. Размеры вашего куба не пострадают от потери точности.
Второе решение в основном то же самое, но тогда вам не нужно думать о реальных единицах.
Кроме того, почему бы вам просто не изменить массу куба?
источник
В библиотеке Bullet Physics есть вики-страница о масштабировании мира физики . Эта информация, вероятно, полезна и для других физических движков.
источник
Я подумал, что должен поделиться своим окончательным решением проблемы. Увеличение постоянной силы тяжести, как это было предложено, действительно заставляло кости двигаться быстрее, создавая впечатление правильного масштаба. Это, однако, усилило проблемы микропрыгивания. Я добавил микроколлизии, которые уменьшили проблему, но не решили ее полностью. Обратите внимание, что это становится проблемой только для «маленьких» объектов, если у вас возникла обратная проблема и вы хотите смоделировать очень большие объекты (космические корабли или что-то в этом роде), тогда у вас не будет никаких проблем с микропрыгиванием, и вы можете бороться с это решение.
Таким образом, я нашел самый высокий уровень гравитации, который мог иметь, не получая слишком много "микропрыгивания". Затем я использовал простое обнаружение сотрясений на телефоне, которое реагировало на большие изменения показаний акселерометра и прикладывало импульсы ко всем объектам при обнаружении таких сотрясений. Он не идеален, но поскольку он заставит кости двигаться быстро, когда телефон встряхнут, это создаст впечатление «крошечных» игральных костей. Это что-то вроде взлома, но с этим придется сойтись :) Вот ролик движка в действии.
источник