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

Метод Mass () переопределен в классе iramersible_rigid_body по той же причине. Если масса объекта изменится, значит, изменится сила тяжести, действующая на него, и он может утонуть или всплыть. В любом случае величину силы тяжести нужно вычислять заново, как и плавучесть. Поэтому в строке 39 листинга 13.2 метод сбрасывает переменную buoyancyApplied в значение false.

Если изменяются постоянно действующие силы, то трение тоже нужно пересчитывать. Поэтому в классе immersible_rigid_body переопределен метод ConstantForce () класса rigid_body. Версия этого метода в классе immersible_rigid_body не только задает новую величину постоянно действующей силы, но и устанавливает элемент данных cons-tantForceChanged в значение true. Это приведет к тому, что метод immersible_rigid_body:: Update () пересчитает воздействие вязкого трения на объект.

Как уже говорилось, трение влияет как на постоянно действующие, так и на импульсные силы. Поэтому в классе immersible_rigid_body переопределены и методы ImpulseForce ().

Метод Update (), начинающийся со строки 82, проверяет, находится ли объект в воде. Если да, то метод проверяет, учтено ли воздействие плавучести на объект. Если это еще не сделано, то метод Update () создает единичный вектор, направленный вертикально вверх. Затем он вычисляет величину вектора плавучести (строки 96-99). Обратите внимание, что в вычислениях не фигурирует плотность воды - она считается равной единице, и учитывать ее в качестве множителя незачем (в формуле выталкивающей силы F = pgV значение р будет равно 1).

Метод Update () добавляет выталкивающую силу к уже учтенным постоянно действующим силам в строках 100-102. Результат сложения сил сохраняется как величина постоянно действующей на объект силы (строка 103). Затем метод устанавливает переменную buoyancyApplied в значение true.

В строках 108-127 листинга 13.2 учитывается воздействие трения на силы. Если воздействие трения на постоянно действующие и импульсные силы не учитывалось, то метод Update () учитывает его и вычисляет новые значения сил.

Пример программы

В примере программы из этой главы демонстрируются плавучесть, сопротивление воды (вязкое трение) и простые течения. В листинге 13.3 показана инициализация объектов для этой программы.

Эта программа моделирует три помещенных в воду шарика. Первый слева шарик всплывает, второй — тонет, а третий находится в воде в состоянии равновесия. Он не тонет и не всплывает. На этот шарик действует слабое течение, которое уносит его вправо.

Новости
Геймеры собирают деньги на помощь русским сиротам
Сервис Humble Store и компания Tripwire Interactive поддержат организацию Change30. Британцы предоставляют помощь русским сиротам.
Слух: На E3 2018 покажут Cyberpunk 2077
Крупное польское видеоигровое издание GRYOnline сообщило о том, что, согласно их собственным источникам в компании, CD Projekt Red готовит к E3 2018 новый трейлер Cyberpunk 2077.