Caja delimitadora
Una caja delimitadora (Axis-Aligned Bounding Box and Oriented Bounding Box) es una caja invisible creada automáticamente que define el tamaño en bruto de una entidad. Su propósito es realizar unas pruebas de colisiones de físicas Q ligeras en la entidad visible.
Como se muestra en la gráfica, la caja delimitadora está comprendida entre dos puntos basados en coordenadas: «mínimos» y «máximos». Ambos representan los puntos de origen de la caja delimitadora, donde los mínimos son siempre negativos y los máximos siempre positivos. Como curiosidad, la suma de los mínimos y máximos da como resultado el tamaño de la caja delimitadora.
Las cajas delimitadoras se pueden usar con:
- Detección de colisión de físicas Q (principalmente jugadores y PNJ).
- Detección de colisión de prerrequisitos de caja de colisión .
- Pruebas de línea de visión.
- Visleaves ocupadas por entidades.
Si una caja delimitadora debe modificarse manualmente, se puede usar con:
- Los modeladores usan el comando QC $bbox.
- Los mapeadores usan las claves
mins
ymaxs
, sisolid
es 2. - Los programadores usan las funciones
UTIL_SetSize()
oCBaseEntity::SetSize()
.
Rotación
Las cajas delimitadoras siempre están alineadas con los ejes y nunca rotan. Esto es lógico, porque se usan también para la detección de colisiones de los jugadores: sería imposible girar en un pasillo estrecho en el que las cuatro esquinas de la caja delimitadora toquen si esta rotase con el jugador. Las cajas alineadas con los ejes, además, son más ligeras de computar.
A pesar de no ser un gran problema para objetos cuadrados, se complica a la hora de manejar dimensiones sin cambiar a físicas V . Cuando las físicas V no son una opción, no hay mucho más que hacer: un jugador de Day of Defeat: Source que haga un cuerpo a tierra puede girar en 360º, ya que Valve acomodó una caja delimitadora que mantiene la cabeza y los pies todo el rato en la misma posición.
Alineación con objetos
Las cajas delimitadoras rotan con la entidad. Estas están vinculadas a las físicas V .
Términos industriales
Source y su comunidad no hace uso de los términos industriales de las cajas delimitadoras, sin embargo a la hora de desarrollar se pueden encontrar estos términos para las cajas: AABB y OBB, o Axis-Aligned Bounding Box and Oriented Bounding Box.
Una AABB tiene un volumen 3D relativo al origen o es una caja sin rotar. Su nombre se debe a que todos sus lados son paralelos a los ejes asignados. Una OBB es una caja rotada, siendo un volumen 3D relativo a ángulo y origen dados.
Depuración
Las cajas delimitadoras son también parte de la depuración; no solo son visibles con herramientas de visualización, sino también con otras aplicadas al trabajo de las cajas.
Comandos de consola para cajas delimitadoras:
ent_bbox
: Visualiza la caja delimitadora de una entidad, la que mires, su nombre y clase.ent_absbox
: Visualiza entidades AABB, al mirar, su nombre y clase.picker
: Para la entidad de tu mira, visualizas la caja delimitadora y otros detalles.
Funciones de programación relacionadas:
- UTIL_EntitiesInBox: Encuentra todas las entidades con la caja delimitadora dada.
NDebugOverlay::Box
: Traza una caja con los mínimos y máximos otorgados. En /, la funciónDebugDrawBox()
puede estar disponible.