Конгер Д.
Физика для разработчиков компьютерных игр
стр. 307

Замечание

Заметьте, что функция UpdateFrame () теперь не уменьшает до нуля импульсные силы, как это делалось в главе 10. Теперь это делает метод ri-gid_body::Update().

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

Качение

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

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

Однако если вы не хотите игнорировать эту проблему, есть несколько способов ее решения. Первый способ - программный.

Если объект катится по горизонтальной поверхности, то его скорость по оси у должна быть практически нулевой. Если скорость объекта близка к 0, то не нужно заставлять его подскакивать. Но этот способ не будет работать, если объект катится по склону, поскольку его скорость по оси у будет отлична от нуля.

Второй способ - сочетание программного и физического. Добавьте в класс rigid_body элемент данных, отслеживающий местоположение объекта в предыдущей итерации моделирования, или просто сохраняйте резервную копию объекта, к которой можно будет обратиться на следующей итерации, как в методе HandleOverlapping (). Используя предыдущее местоположение, высоту поверхности и формулу F = mg, вычислите силу соударения. Если сила практически нулевая, значит, объект катится, а не подскакивает - его нужно просто перемещать соответственно его линейной скорости.

Новости
Авторы Max Payne раскритиковали крупные игры
Глава по коммуникации студии Remedy Томас Пуха заявил, что в нынешних реалиях игрового рынка его команде пришлось реорганизовать производство.
Ubisoft выпустит эксклюзивную фигурку Father’s Calling
Компания Ubisoft сообщила, что коллекционная фигурка Father’s Calling, представляющая собой лидера организации «Врата Эдема» из Far Cry 5, поступит в продажу 22 марта 2018 года по цене 3999 рублей.