Ограничивающий (размерный) короб
Ограничивающий короб (bounding box) (координатный (Axis-Aligned) и ориентированный) - это автоматически создаваемый невидимый короб, который определяет оценочный размер объекта. Его назначение - выполнение простой проверки столкновений игровой физики QPhysics при условии, что он видим (часто перед проведением более затратных проверок).
Как показано на изображении, ограничивающий короб заключён между двумя координатными точками XYZ: "минимум" и "максимум". И "минимум", и "максимум" представляют собой смещения относительно точки отсчёта ограничивающего короба, при этом "минимум" всегда (-) отрицательное, а "максимум" всегда (+) положительное. Математические суммы смещений "минимума" и "максимума" соответствуют размерам ограничивающего короба.
Ограничивающие короба используются в следующих случаях:
- Определение столкновений игровой физики (в основном, для НИП и персонажей игрока)
- Необходим для определения столкновений по коробу воздействия
- Проверка видимости для объекта
- Определение областей видимости в которых присутствует объект
Если ограничивающий короб необходимо переопределить вручную, то это можно сделать следующим способами:
- Создатели моделей используют QC-команду
$bbox - Создатели карт и сценариев используют параметры
minsиmaxs, если параметруsolidустановлено значение 2 - Программисты используют функции
UTIL_SetSize()илиCBaseEntity::SetSize()
Вращение
Ограничивающие короба всегда выровнены по осям координат мира; они никогда не вращаются. Вероятно, это связано с их использованием для определения столкновений персонажей игроков: было бы невозможно развернуться в узком коридоре, если бы четыре угла вашего ограничивающего короба вращались вместе с вами. Кроме того координатные ограничивающие короба малозатратны в вычислениях.
Хотя это не является большой проблемой для объектов, которые имеют приблизительно квадратную проекцию, это затрудняет управление продолговатыми формами без переключения на виртуальную физику VPhysics. Без использования виртуальной физики, возможности ограничены: персонаж игрока Day of Defeat: Source, упавший на землю, имеет продолговатую форму, которая может вращаться на 360°, что Valve вышла из ситуации создав "сплющенный" ограничивающий короб, из которого постоянно торчат наружу голова и ноги персонажа .
Выровненные по объекту
Выровненные по объекту ограничивающие короба вращаются вместе с ним. Похоже, что они как-то связаны с виртуальной физикой.
- Нужно сделать: 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 - это "трёхмерный объём, заданный точкой отсчёта и углом наклона", или параллелепипед, который повернут на заданный угол.[Уточнить]
Отладка
Ограничивающие короба часто используются для отладки, существуют не только инструменты для их визуализации, но и инструменты, которые работают за счёт использования ограничивающего короба.
Команды управления
Соответствующие команды управления:
ent_bbox- Показывает ограничивающий короб для объектов на которые смотрят, либо по указанному целевому имени или имени класса
ent_absbox- Показывает AABB для объектов, на которые смотрят, либо по указанному целевому имени или имени класса
picker- Показывает ограничивающий короб и параметры объектов, попадающих под перекрестие прицела
box- Показывает параллелепипед из красных линий, по указанным в параметрах координатам двух углов. Он выровнен по осям координат и визуализируется в течении 100 секунд.
Функции программирования
Соответствующие функции программирования:
UTIL_EntitiesInBox()- Находит все объекты находящиеся в пределах заданного ограничивающегося короба.
NDebugOverlay::Box- Показывает параллелепипед с заданными минимальным и максимальным значениями. В Squirrel/Lua становится доступна функция
DebugDrawBox(). OBBCenter()- Возвращает относительный вектор центра ограничивающего короба.
Код
QC-команды
- $bbox - ограничивающий короб.
- $cbox - отсекающий ограничивающий короб.
- $hbox - короб воздействия (hitbox).
Общая информация
- CollisionProperty - "Surrounding Bounds".
- Виртуальная и игровая физика
Минимальный ограничивающий короб