Es/Bounding box: Difference between revisions

From Valve Developer Community
< Es
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
{{wip}}{{translate}}
{{wip}}{{translate}}
{{LanguageBar|title = Bounding Box}}
{{LanguageBar|title = Caja delimitadora}}


[[File:BoundingBoxMinsMaxs.png|400x300px|right|thumbnail|Gráfica de «mínimos» y «máximos».]]
Una {{L|bounding box|caja delimitadora}}  ('''A'''xis-'''A'''ligned '''B'''ounding '''B'''ox and '''O'''riented '''B'''ounding '''B'''ox) 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 {{L|QPhysics|físicas Q}} {{L|cheap|ligeras}} en la entidad visible.


[[File:BoundingBoxMinsMaxs.png|400x300px|right|thumbnail|Graph of "mins" and "maxs"]]
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.
A  {{L|bounding box}}  ('''A'''xis-'''A'''ligned '''B'''ounding '''B'''ox and '''O'''riented '''B'''ounding '''B'''ox) is an automatically-created invisible box that defines the rough size of an entity. Its purpose is to perform  {{L|cheap}}  {{L|QPhysics}} collision tests given the entity is visible (often before moving on to more expensive ones).


As shown in the graph, a bounding box is compromised of two coordinate-based points: ''"mins"'' and ''"maxs."'' Both "mins" and "maxs" represent offsets to the bounding box's origin, where "mins" is always negative, and "maxs" is always positive. Interestingly, the sum of the offsets "mins" and "maxs" is the size of the bounding box.
Las cajas delimitadoras se pueden usar con:
* Detección de colisión de {{L|QPhysics|físicas Q}} (principalmente jugadores y PNJ).
* Detección de colisión de prerrequisitos de {{L|hitbox|caja de colisión}}.
* Pruebas de línea de visión.
* {{L|Visleaf|Visleaves}} ocupadas por entidades.


Bounding boxes can be seen used with:
Si una caja delimitadora debe modificarse manualmente, se puede usar con:
* {{L|QPhysics}} collision detection (mainly NPCs and players)
* Los modeladores usan el comando QC {{ent|$bbox}}.
* Prerequisite for  {{L|hitbox}} collision detection
* Los mapeadores usan las claves <code>mins</code> y <code>maxs</code>, si <code>solid</code> es 2.
* Line of sight tests
* Los programadores usan las funciones <code> {{L|UTIL_SetSize|UTIL_SetSize()}}</code> o <code>CBaseEntity::SetSize()</code>.
{{L|Visleaf|Visleaves}} occupied by an entity
{{note|Las partes de la entidad que salen de la caja delimitadora no pasarán las pruebas de colisión de físicas Q. Incluyendo las cajas de colisión.}}


If a bounding box needs to be overridden manually, these can be done:
== Rotación ==
* Modellers use the {{ent|$bbox}} QC command
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.
* Mappers and scripters use the <code>mins</code> and <code>maxs</code> keys, if the <code>solid</code> key is set to 2
* Programmers call the functions <code> {{L|UTIL_SetSize|UTIL_SetSize()}}</code> or <code>CBaseEntity::SetSize()</code>
{{note|Entity parts that protrude its bounding box will not pass QPhysics collision tests. This includes hitboxes.}}


<!-- This is for the boxes from ent_absbox only:
A pesar de no ser un gran problema para objetos cuadrados, se complica a la hora de manejar dimensiones sin cambiar a {{L|VPhysics|físicas V}}. Cuando las físicas V no son una opción, no hay mucho más que hacer: un jugador de {{L|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.
For example, bullets are only tested against  {{subst:LAuto|hitbox}}es if they are first found to intersect with the given entity's bounding box).-->
== Rotation ==
Bounding boxes are always aligned to the world's axes; they never rotate. This is presumably because of their use for collision detection of players: it would be impossible to turn around in a tight corridor if the four corners of your bounding box rotated with you. Axis-aligned boxes are also far cheaper to compute.


While this isn't a huge issue for objects that are roughly square from above, it makes oblong dimensions difficult to manage without switching to  {{L|VPhysics}}. When VPhysics isn't an option there isn't much that can be done: a  {{L|Day of Defeat: Source}} player who has gone prone has an oblong shape that can rotate through a full 360°, which Valve could only accommodate for by creating a "squished" bounding box that leaves the head and feet sticking out at all times (an image of this would be nice).
=== Alineación con objetos ===
Las cajas delimitadoras rotan con la entidad. Estas están vinculadas a las {{L|VPhysics|físicas V}}.


=== Object-Aligned ===
== Términos industriales==
Object-aligned bounding boxes rotate with their entity. They appear to be linked to  {{L|VPhysics}} to some extent.
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 '''A'''xis-'''A'''ligned '''B'''ounding '''B'''ox and '''O'''riented '''B'''ounding '''B'''ox.
:{{todo|Is there more to describe, like how well do they work? Merge with earlier section if there isn't anything else.}}


== Industry Terms ==
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.
Source and its community does not make use of all the industry terms to bounding boxes, however development in or outside Source may use these variants of bounding box terms: AABB and OBB, or '''A'''xis-'''A'''ligned '''B'''ounding '''B'''ox and '''O'''riented '''B'''ounding '''B'''ox.


An AABB is "a 3D volume relative to a given origin," or a box that isn't rotated. Its name is due to the fact that all its edges are parallel to the axes it is aligned to. An OBB is a box that's rotated, also known as "a 3D volume relative to a given origin and angle."
== Depuración ==
[[File:Metrocop_bbox_engine.jpg|400x300px|thumbnail| {{L|npc_metropolice}} con <tt>ent_bbox</tt>.]]
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.


In most cases including Source, a bounding box is an AABB, as it's very simple to test for intersections—an AABB can't rotate along its model, requiring a recompute of the bounding box instead. In cases where a bounding box rotates along its model, these bounding boxes are referred as an AABB.
Comandos de consola para cajas delimitadoras:
* <code>ent_bbox</code>: Visualiza la caja delimitadora de una entidad, la que mires, su nombre y clase.
* <code>ent_absbox</code>: Visualiza entidades [[#Términos industriales|AABB]], al mirar, su nombre y clase.
* <code>picker</code>: Para la entidad de tu mira, visualizas la caja delimitadora y otros detalles.


== Debug-Based ==
Funciones de programación relacionadas:
[[File:Metrocop_bbox_engine.jpg|400x300px|thumbnail| {{L|npc_metropolice}} with <tt>ent_bbox</tt>.]]
* {{ent|UTIL_EntitiesInBox}}: Encuentra todas las entidades con la caja delimitadora dada.
Bounding boxes are quite involved in debugging; there are not only tools that visualize bounding boxes, but also tools that rely on bounding boxes to work.
* <code>NDebugOverlay::Box</code>: Traza una caja con los mínimos y máximos otorgados. En {{sq}}/{{lua}}, la función <code>DebugDrawBox()</code> puede estar disponible.
 
Console commands that relate to bounding boxes:
* <code>ent_bbox</code> - Visualizes an entity's bounding box, either the one you look at, a targetname, or a classname
* <code>ent_absbox</code> - Visualizes an entity's [[#Industry_Terms|AABB]], either the one you look at, a targetname, or a classname
* <code>picker</code> - For the entity on your crosshair, visualise the bounding box and other details
 
Programmer functions that are related:
* {{ent|UTIL_EntitiesInBox}} - Find all entities within a given bounding box.
* <code>NDebugOverlay::Box</code> - Draw a box with the given mins and maxs. In {{sq}}/{{lua}}, the function <code>DebugDrawBox()</code> may be available.
{{clr}}
{{clr}}


==See also==
==Véase tambien==
===General===
===General===
*  {{L|CollisionProperty#Surrounding_bounds|CollisionProperty - "Surrounding Bounds"}}.
*  {{L|CollisionProperty#Surrounding_bounds|Propiedades de colisión: «Límites»}}.
*  {{L|Vphysics & Qphysics}}
*  {{L|Vphysics & Qphysics|Físicas V y Q}}
* [[Wikipedia:{{PAGENAME}}]]
* [[Wikipedia:{{PAGENAME}}]]
===Resources===
 
*  {{L|Dimensions}}
===Recursos===
*  {{L|NPC Hull}}
*  {{L|Dimensions|Dimensiones}}
*  {{L|Player Hull}}
*  {{L|NPC Hull|Cubierta del PNJ}}
*  {{L|Player Hull|Cubierta del jugador}}


  {{ACategory|QPhysics}}
  {{ACategory|QPhysics}}

Revision as of 01:36, 25 October 2024

Under construction.png
This page is actively undergoing a major edit.
As a courtesy, please do not edit this while this message is displayed.
If this page has not been edited for at least several hours to a few days, please remove this template. This message is intended to help reduce edit conflicts; please remove it between editing sessions to allow others to edit the page.

The person who added this notice will be listed in its edit history should you wish to contact them.

Info content.png
This page needs to be translated.
This page either contains information that is only partially or incorrectly translated, or there isn't a translation yet.
If this page cannot be translated for some reason, or is left untranslated for an extended period of time after this notice is posted, the page should be requested to be deleted.
Also, please make sure the article complies with the alternate languages guide.(en)
English (en)Español (es)中文 (zh)Translate (Translate)
Gráfica de «mínimos» y «máximos».

Una caja delimitadora(en) (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(en) ligeras(en) 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(en) (principalmente jugadores y PNJ).
  • Detección de colisión de prerrequisitos de caja de colisión(en).
  • Pruebas de línea de visión.
  • Visleaves(en) 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 y maxs, si solid es 2.
  • Los programadores usan las funciones UTIL_SetSize()(en) o CBaseEntity::SetSize().
Note.pngNota:Las partes de la entidad que salen de la caja delimitadora no pasarán las pruebas de colisión de físicas Q. Incluyendo las cajas de colisión.

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(en). Cuando las físicas V no son una opción, no hay mucho más que hacer: un jugador de Day of Defeat: Source(en) 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(en).

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

npc_metropolice(en) con ent_bbox.

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 Squirrel/Lua, la función DebugDrawBox() puede estar disponible.

Véase tambien

General

Recursos