Темы:
Данная статья является продолжением перевода материала TutorialVehicle, размещенного на сайте LSL Wiki.
Предыдущие части:
Часть 1
Часть 2
Часть 3
Часть 4
Вертикальное притяжение (The Vertical Attractor)
Некоторые транспортные средства, например, корабли, должны быть всегда расположены верхней частью вверх. Это условие может быть выполнено с помощью активации свойства "vertical attractor", которое стремится развернуть локальную ось Z объекта до совмещения ее с мировой осью Z ("вверх"). Процесс совмещения носит характер колебаний около нужного положения. Параметр VEHICLE_VERTICAL_ATTRACTION_TIMESCALE определяет период этих колебаний, а параметр VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY задает скорость их ослабевания. Нулевое значение эффективности (0,0) вызовет продолжительные колебания вокруг точки равновесия, а при значении 1,0 собственно колебания будут отсутствовать, и объект перейдет в равновесное состояние по экспоненциальному закону.
Пример:
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_TIMESCALE, 4.0);
llSetVehicleFloatParam(VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY, 0.5);
Вертикальное притяжение деактивируется при установке постоянной времени в значение, большее 300 секунд.
Заметьте, по умолчанию вертикальное притяжение предотвращает снижение или подъем транспортного средства. Таким образом, если вам нужно сделать самолет, вероятно, вы захотите разблокировать притяжение относительно оси тангажа (pitch) установкой флага VEHICLE_FLAG_LIMIT_ROLL_ONLY :
llSetVehicleFlags(VEHICLE_FLAG_LIMIT_ROLL_ONLY);
Виражи
Для того, чтобы транспортное средство могло выполнять виражи, должно быть активировано вертикальное притяжение. Вот механизм виража: поворот относительно оси крена (roll) вызывает появление угловой скорости вокруг оси рыскания (yaw), что в свою очередь ведет к повороту транспортного средства. Амплитуда эффекта рыскания будет пропорциональна параметру VEHICLE_BANKING_EFFICIENCY, углу поворота относительно оси крена и, иногда, скорости объекта вдоль его предпочтительной оси движения.
Диапазон значений параметра VEHICLE_BANKING_EFFICIENCY составляет -1...+1. При положительном значении параметра любое положительное вращение (согласно правилу правой руки) вокруг оси крена вызовет отрицательный вращательный момент вокруг оси рыскания, что заставит повернуть объект вправо, т.е. транспортное средство будет накреняться при повороте, что на самом деле и происходит с реальными транспортными средствами, такими как самолеты и мотоциклы. Отрицательное значение коэффициента эффективности приведет к тому, что объект будет накреняться во внешнюю от поворота сторону (не совсем согласуется с физикой реального мира, однако создает интересное поведение объекта).
VEHICLE_BANKING_MIX – искусственный (т.е. не соответствующий физике реального мира) параметр, который необходим для того, чтобы принудить транспортное средство делать то, что вам нужно, а не то, что позволяют законы физики. Представьте себе, к примеру, реальный мотоцикл. Для того, чтобы повернуть в вираже, ему необходимо двигаться, однако мотоциклы из видеоигр часто поворачивают на месте, без движения вперед, поскольку, при использовании клавиатуры или игрового контроллера, таким способом объект легче управляем. Параметр VEHICLE_BANKING_MIX предоставляет комбинацию реалистичного и нереалистичного поведения, изменяясь от полностью статичного виража (0,0) до полностью динамичного (1,0). "Статичный" здесь означает, что эффект виража зависит только от поворота объекта вокруг своей оси крена, а под "динамичным" подразумевается вираж, который также пропорционален скорости объекта вдоль оси крена. Возможно, что существует лучшее соотношение этой "смеси", однако поиск такой "формулы" потребует проведения экспериментов.
Время, требующееся для того, чтобы процесс виража нейтрализовал изначальную угловую скорость вокруг мировой оси Z, определяется постоянной времени VEHICLE_BANKING_TIMESCALE. Если хотите создать транспортное средство, быстро выполняющее виражи, задайте значение этого параметра около секунды или менее.
Постоянные времени сопротивления
VEHICLE_LINEAR_FRICTION_TIMESCALE – векторный параметр, определяющий постоянную времени процесса остановки транспортного средства вдоль трех локальных осей базового каркаса (reference frame). Постоянные времени вдоль каждой из осей независимы между собой. Например, катящийся автомобиль, очевидно, будет испытывать небольшое сопротивление вдоль своих осей X и Z (он может легко катиться вперед и преодолевать вертикальные неровности) и значительное сопротивление вдоль оси Y:
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, 3, 1000>);
Помните, что большее значение постоянной времени соответствует меньшему сопротивлению. Поэтому для практической нейтрализации линейного сопротивления можно установить постоянную времени в большое значение.
Допускается использование скалярной величины для установки значения сопротивления, при этом все три компоненты постоянной времени примут одинаковые значения. Оба приведенных фрагмента кода эквивалентны и сделают сопротивление очень незначительным:
llSetVehicleVectorParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, <1000, 1000, 1000>);
llSetVehicleFloatParam(VEHICLE_LINEAR_FRICTION_TIMESCALE, 1000);
VEHICLE_ANGULAR_FRICTION_TIMESCALE – тоже является векторным параметром, который задает постоянные времени для процесса остановки вращения объекта вокруг осей X, Y и Z; устанавливается и нейтрализуется так же, как и линейный параметр.
Продолжение следует.
Источник TutorialVehicle















