Настройка физических объектов

Материал из xrWiki
Перейти к: навигация, поиск

Вводная[править]

Система координат в ODE аналогична используемой в OpenGL: вертикальная Y направлена снизу вверх, X слева направо, Z к наблюдателю.

В сталкире доступно 5 видов сочлений:

  • Rigid – твёрдое тело
  • Cloth – мягкое тело (тряпка)
  • Joint – сустав или шарнир (вращение по XYZ)
  • Wheel – колесо (можно управлять осью X при вращении по оси Z)
  • Slider – скольжение (перемещение и вращение по Z)

Виды примитивов (collision shape) для просчёта столкновений:

  • Box (параллелепипед)
  • Sphere (сфера)
  • Cylinder (цилиндр)

В простых объектах обычно используется один примитив (например, бочка использует один цилиндр). Сложные (составные) модели могут использовать несколько примитивов (например, стол использует один параллелепипед для столешницы и четыре для ножек).

Свойства тела[править]

Жесткие тела в сталкире обладают следующими основными свойствами:

  • Mass (масса)
  • Center of Mass (позиция центра массы)
  • Friction – коэффициент трения. Чем меньше, тем более "скользким" считается элемент.
  • Spring Factor – пружинистость. Чем меньше, тем мягче пружина.
  • Damping Factor – демпфирование. Чем больше, тем быстрее затухают колебания.

Свойства движения и остановки[править]

Диапазон движения/остановки ограничивается т.н. лимитами. Они задают диапазон, в котором сустав может перемещаться/вращаться.

Примеры[править]

Пример жёсткого тела: ящик и бочка[править]

Пример мягкого тела: мешок с песком[править]

Пример сустава: цепь с грузом[править]

Пример с колесами: тележка[править]

Пример скольжения: выдвижной ящик[править]

Параметры отключения физики[править]

Актуальны для любой модели. Если не установлены – используются значения по умолчанию.

[disable]
linear_factor   = 0.3
angular_factor  = 0.3

Захват предметов[править]

Если нет этой секции, то возможность отключена.

[capture]
bone             = bip01_tail      ; кость, за которую хватать
distance         = 0.45            ; объект можно захватить в пределах этого расстояния
time_limit       = 500             ; максимальное время в секундах для попытки захвата
pull_force       = 50000.          ; максимальная сила для захвата
pull_distance    = 2.              ; максимальное расстояние, на которое можно перетащить объект
velocity_scale   = 0.015           ; скорость вытаскивания
capture_force    = 10000.          ; максимальная сила для удержания