Эта статья документации для всего, что использует платформу Source. Нажмите для получения дополнительной информации.

Ограничивающий (размерный) короб

From Valve Developer Community
< Ru
Jump to navigation Jump to search

English (en)Español (es)Русский (ru)中文 (zh)Translate (Translate)
Графическое представление "минимума" и "максимума"

Ограничивающий короб (bounding box)(en) (координатный (Axis-Aligned) и ориентированный) - это автоматически создаваемый невидимый короб, который определяет оценочный размер объекта. Его назначение - выполнение простой(en) проверки столкновений игровой физики QPhysics(en) при условии, что он видим (часто перед проведением более затратных проверок).

Как показано на изображении, ограничивающий короб заключён между двумя координатными точками XYZ: "минимум" и "максимум". И "минимум", и "максимум" представляют собой смещения относительно точки отсчёта ограничивающего короба, при этом "минимум" всегда (-) отрицательное, а "максимум" всегда (+) положительное. Математические суммы смещений "минимума" и "максимума" соответствуют размерам ограничивающего короба.

Note.pngПримечание: Координаты минимума и максимума являются относительными к родительскому объекту, а не к миру.

Ограничивающие короба используются в следующих случаях:

Если ограничивающий короб необходимо переопределить вручную, то это можно сделать следующим способами:

  • Создатели моделей используют QC-команду $bbox
  • Создатели карт и сценариев используют параметры mins и maxs, если параметру solid установлено значение 2
  • Программисты используют функции UTIL_SetSize()(en) или CBaseEntity::SetSize()
Note.pngПримечание: Части объекта, выступающие за пределы своего ограничивающего короба, не пройдут проверку столкновений QPhysics. Это касается и коробов воздействия.

Вращение

Ограничивающие короба всегда выровнены по осям координат мира; они никогда не вращаются. Вероятно, это связано с их использованием для определения столкновений персонажей игроков: было бы невозможно развернуться в узком коридоре, если бы четыре угла вашего ограничивающего короба вращались вместе с вами. Кроме того координатные ограничивающие короба малозатратны в вычислениях.

Хотя это не является большой проблемой для объектов, которые имеют приблизительно квадратную проекцию, это затрудняет управление продолговатыми формами без переключения на виртуальную физику VPhysics(en). Без использования виртуальной физики, возможности ограничены: персонаж игрока Day of Defeat: Source(en), упавший на землю, имеет продолговатую форму, которая может вращаться на 360°, что Valve вышла из ситуации создав "сплющенный" ограничивающий короб, из которого постоянно торчат наружу голова и ноги персонажа .

Выровненные по объекту

Выровненные по объекту ограничивающие короба вращаются вместе с ним. Похоже, что они как-то связаны с виртуальной физикой(en).

Нужно сделать: Is there more to describe, like how well do they work? Merge with earlier section if there isn't anything else.

Отраслевые термины

В Source и в этом Сообществе не используют все отраслевые термины для обозначения ограничивающего короба, однако при разработке в Source или за его пределами могут использоваться следующие варианты терминов: AABB или Axis-Aligned Bounding Box (координатный ограничивающий короб) и OBB или Oriented Bounding Box (ориентированный ограничивающий короб).

  • AABB - это "трёхмерный объём, заданный точкой отсчёта", или параллелепипед, который не вращается. Его название происходит от параллельности его рёбер осям координат. В большинстве случаев, в том числе в Source, ограничивающий короб является AABB, что позволяет очень просто проверять наличие пересечений, так как AABB не вращается вместе со своей моделью, что потребовало бы постоянного вычисления ограничивающего короба. В тех случаях, когда ограничивающий короб вращается вместе с моделью, такие ограничивающие короба называются OBB.
  • OBB - это "трёхмерный объём, заданный точкой отсчёта и углом наклона", или параллелепипед, который повернут на заданный угол.[Уточнить]

Отладка

npc_metropolice(en) with ent_bbox.

Ограничивающие короба часто используются для отладки, существуют не только инструменты для их визуализации, но и инструменты, которые работают за счёт использования ограничивающего короба.

Команды управления

Соответствующие команды управления:

ent_bbox
Показывает ограничивающий короб для объектов на которые смотрят, либо по указанному целевому имени(en) или имени класса(en)
ent_absbox
Показывает AABB для объектов, на которые смотрят, либо по указанному целевому имени или имени класса
picker
Показывает ограничивающий короб и параметры объектов, попадающих под перекрестие прицела
box
Показывает параллелепипед из красных линий, по указанным в параметрах координатам двух углов. Он выровнен по осям координат и визуализируется в течении 100 секунд.

Функции программирования

Соответствующие функции программирования:

UTIL_EntitiesInBox()(en)
Находит все объекты находящиеся в пределах заданного ограничивающегося короба.
NDebugOverlay::Box
Показывает параллелепипед с заданными минимальным и максимальным значениями. В Squirrel(en)/Lua(en) становится доступна функция DebugDrawBox().
OBBCenter()(en)
Возвращает относительный вектор центра ограничивающего короба.

Код

QC-команды

  • $bbox(en) - ограничивающий короб.
  • $cbox(en) - отсекающий ограничивающий короб.
  • $hbox(en) - короб воздействия (hitbox).

Общая информация

Средства

Смотреть также