AABB

Un cuadro delimitador 3D alineado con los ejes.

Descripción

El tipo Variant integrado AABB representa un cuadro delimitador alineado con el eje en un espacio 3D. Se define por su position y size, que son Vector3. Se utiliza con frecuencia para pruebas rápidas de superposición (véase intersects()). Aunque AABB está alineado con el eje, puede combinarse con Transform3D para representar un cuadro delimitador rotado o sesgado.

Utiliza coordenadas de punto flotante. La contraparte 2D de AABB es Rect2. No existe ninguna versión de AABB que utilice coordenadas enteras.

Nota: No se admiten valores negativos para size. Con un tamaño negativo, la mayoría de los métodos AABB no funcionan correctamente. Utiliza abs() para obtener un AABB equivalente con un tamaño no negativo.

Nota: En un contexto booleano, una AABB se evalúa como false si tanto la position como size son cero (igual a Vector3.ZERO). De lo contrario, siempre se evalúa como true.

Nota

Hay diferencias notables cuando usa esta API con C#. Véase Diferencias de la API de C# con GDScript para más información.

Tutoriales

Propiedades

Vector3

end

Vector3(0, 0, 0)

Vector3

position

Vector3(0, 0, 0)

Vector3

size

Vector3(0, 0, 0)

Constructores

AABB

AABB()

AABB

AABB(from: AABB)

AABB

AABB(position: Vector3, size: Vector3)

Métodos

AABB

abs() const

bool

encloses(with: AABB) const

AABB

expand(to_point: Vector3) const

Vector3

get_center() const

Vector3

get_endpoint(idx: int) const

Vector3

get_longest_axis() const

int

get_longest_axis_index() const

float

get_longest_axis_size() const

Vector3

get_shortest_axis() const

int

get_shortest_axis_index() const

float

get_shortest_axis_size() const

Vector3

get_support(direction: Vector3) const

float

get_volume() const

AABB

grow(by: float) const

bool

has_point(point: Vector3) const

bool

has_surface() const

bool

has_volume() const

AABB

intersection(with: AABB) const

bool

intersects(with: AABB) const

bool

intersects_plane(plane: Plane) const

Variant

intersects_ray(from: Vector3, dir: Vector3) const

Variant

intersects_segment(from: Vector3, to: Vector3) const

bool

is_equal_approx(aabb: AABB) const

bool

is_finite() const

AABB

merge(with: AABB) const

Operadores

bool

operator !=(right: AABB)

AABB

operator *(right: Transform3D)

bool

operator ==(right: AABB)


Descripciones de Propiedades

Vector3 end = Vector3(0, 0, 0) 🔗

El punto final. Normalmente es la esquina en la parte superior derecha y posterior del cuadro delimitador, y es equivalente a position + size. Establecer este punto afecta al size.


Vector3 position = Vector3(0, 0, 0) 🔗

El punto de origen. Normalmente es la esquina en la parte inferior izquierda y frontal del cuadro delimitador.


Vector3 size = Vector3(0, 0, 0) 🔗

El ancho, la altura y la profundidad del cuadro delimitador, a partir de position. Establecer este valor también afecta al punto end.

Nota: Se recomienda establecer el ancho, la altura y la profundidad a valores no negativos. Esto se debe a que la mayoría de los métodos en Godot asumen que la position es la esquina inferior izquierda delantera, y el end es la esquina superior derecha trasera. Para obtener un cuadro delimitador equivalente con un tamaño no negativo, usa abs().


Descripciones de Constructores

AABB AABB() 🔗

Construye un AABB con su position y size establecidos a Vector3.ZERO.


AABB AABB(from: AABB)

Construye un AABB como una copia del AABB dado.


AABB AABB(position: Vector3, size: Vector3)

Construye un AABB con position y size.


Descripciones de Métodos

AABB abs() const 🔗

Devuelve un AABB equivalente a este cuadro delimitador, con su ancho, alto y profundidad modificados para ser valores no negativos.

var box = AABB(Vector3(5, 0, 5), Vector3(-20, -10, -5))
var absolute = box.abs()
print(absolute.position) # Imprime (-15.0, -10.0, 0.0)
print(absolute.size)     # Imprime (20.0, 10.0, 5.0)

Nota: Se recomienda utilizar este método cuando size es negativo, ya que la mayoría de los otros métodos en Godot asumen que los componentes de size son mayores que 0.


bool encloses(with: AABB) const 🔗

Devuelve true si este cuadro delimitador encierra completamente la caja with. Se incluyen los bordes de ambas cajas.

var a = AABB(Vector3(0, 0, 0), Vector3(4, 4, 4))
var b = AABB(Vector3(1, 1, 1), Vector3(3, 3, 3))
var c = AABB(Vector3(2, 2, 2), Vector3(8, 8, 8))

print(a.encloses(a)) # Imprime true
print(a.encloses(b)) # Imprime true
print(a.encloses(c)) # Imprime false

AABB expand(to_point: Vector3) const 🔗

Devuelve una copia de este cuadro delimitador expandida para alinear los bordes con el to_point dado, si es necesario.

var box = AABB(Vector3(0, 0, 0), Vector3(5, 2, 5))

box = box.expand(Vector3(10, 0, 0))
print(box.position) # Imprime (0.0, 0.0, 0.0)
print(box.size) # Imprime (10.0, 2.0, 5.0)

box = box.expand(Vector3(-5, 0, 5))
print(box.position) # Imprime (-5.0, 0.0, 0.0)
print(box.size) # Imprime (15.0, 2.0, 5.0)

Vector3 get_center() const 🔗

Devuelve el punto central del cuadro delimitador. Esto es lo mismo que position + (size / 2.0).


Vector3 get_endpoint(idx: int) const 🔗

Devuelve la posición de uno de los 8 vértices que componen este cuadro delimitador. Con un idx de 0 esto es lo mismo que position, y un idx de 7 es lo mismo que end.


Vector3 get_longest_axis() const 🔗

Devuelve el eje normalizado más largo del size de este cuadro delimitador, como un Vector3 (Vector3.RIGHT, Vector3.UP o Vector3.BACK).

var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))

print(box.get_longest_axis()) # Imprime (0.0, 0.0, 1.0)
print(box.get_longest_axis_index()) # Imprime 2
print(box.get_longest_axis_size()) # Imprime 8.0

Véase también get_longest_axis_index() y get_longest_axis_size().


int get_longest_axis_index() const 🔗

Devuelve el índice del eje más largo del size de este cuadro delimitador (ver Vector3.AXIS_X, Vector3.AXIS_Y y Vector3.AXIS_Z).

Para ver un ejemplo, véase get_longest_axis().


float get_longest_axis_size() const 🔗

Devuelve la dimensión más larga del size de este cuadro delimitador.

Para un ejemplo, véase get_longest_axis().


Vector3 get_shortest_axis() const 🔗

Devuelve el eje normalizado más corto del size de este cuadro delimitador, como un Vector3 (Vector3.RIGHT, Vector3.UP o Vector3.BACK).

var box = AABB(Vector3(0, 0, 0), Vector3(2, 4, 8))

print(box.get_shortest_axis()) # Imprime (1.0, 0.0, 0.0)
print(box.get_shortest_axis_index()) # Imprime 0
print(box.get_shortest_axis_size()) # Imprime 2.0

Véase también get_shortest_axis_index() y get_shortest_axis_size().


int get_shortest_axis_index() const 🔗

Devuelve el índice del eje más corto del size de este cuadro delimitador (ver Vector3.AXIS_X, Vector3.AXIS_Y y Vector3.AXIS_Z).

Para ver un ejemplo, véase get_shortest_axis().


float get_shortest_axis_size() const 🔗

Devuelve la dimensión más corta del size de este cuadro delimitador.

Para un ejemplo, véase get_shortest_axis().


Vector3 get_support(direction: Vector3) const 🔗

Devuelve la posición del vértice de este cuadro delimitador que está más lejos en la dirección dada. Este punto se conoce comúnmente como el punto de soporte en los algoritmos de detección de colisiones.


float get_volume() const 🔗

Devuelve el volumen del cuadro delimitador. Esto es equivalente a size.x * size.y * size.z. Véase también has_volume().


AABB grow(by: float) const 🔗

Returns a copy of this bounding box extended on all sides by the given amount by. A negative amount shrinks the box instead.

var a = AABB(Vector3(4, 4, 4), Vector3(8, 8, 8)).grow(4)
print(a.position) # Prints (0.0, 0.0, 0.0)
print(a.size)     # Prints (16.0, 16.0, 16.0)

var b = AABB(Vector3(0, 0, 0), Vector3(8, 4, 2)).grow(2)
print(b.position) # Prints (-2.0, -2.0, -2.0)
print(b.size)     # Prints (12.0, 8.0, 6.0)

bool has_point(point: Vector3) const 🔗

Devuelve true si el cuadro delimitador contiene el point dado. Por convención, los puntos exactamente en los lados derecho, superior y frontal no se incluyen.

Nota: Este método no es fiable para AABB con un size negativo. Utiliza abs() primero para obtener un cuadro delimitador válido.


bool has_surface() const 🔗

Devuelve true si este cuadro delimitador tiene una superficie o una longitud, es decir, al menos un componente de size es mayor que 0. De lo contrario, devuelve false.


bool has_volume() const 🔗

Devuelve true si el ancho, la altura y la profundidad de este cuadro delimitador son todos positivos. Véase también get_volume().


AABB intersection(with: AABB) const 🔗

Devuelve la intersección entre este cuadro delimitador y with. Si los cuadros no se intersecan, devuelve un AABB vacío. Si los cuadros se intersecan en el borde, devuelve un AABB plano sin volumen (véase has_surface() y has_volume()).

var box1 = AABB(Vector3(0, 0, 0), Vector3(5, 2, 8))
var box2 = AABB(Vector3(2, 0, 2), Vector3(8, 4, 4))

var intersection = box1.intersection(box2)
print(intersection.position) # Imprime (2.0, 0.0, 2.0)
print(intersection.size)     # Imprime (3.0, 2.0, 4.0)

Nota: Si solo necesita saber si dos cuadros delimitadores se están intersecando, use intersects() en su lugar.


bool intersects(with: AABB) const 🔗

Devuelve true si este cuadro delimitador se superpone con el cuadro with. Los bordes de ambas cajas están siempre excluidos.


bool intersects_plane(plane: Plane) const 🔗

Devuelve true si este cuadro delimitador está en ambos lados del plane dado.


Variant intersects_ray(from: Vector3, dir: Vector3) const 🔗

Devuelve el primer punto donde este cuadro delimitador y el rayo dado se intersecan, como un Vector3. Si no se produce ninguna intersección, devuelve null.

El rayo comienza en from, apunta hacia dir y se extiende hacia el infinito.


Variant intersects_segment(from: Vector3, to: Vector3) const 🔗

Devuelve el primer punto donde este cuadro delimitador y el segmento dado se intersecan, como un Vector3. Si no se produce ninguna intersección, devuelve null.

El segmento comienza en from y termina en to.


bool is_equal_approx(aabb: AABB) const 🔗

Devuelve true si este cuadro delimitador y aabb son aproximadamente iguales, llamando a Vector3.is_equal_approx() en position y size.


bool is_finite() const 🔗

Devuelve true si los valores de este cuadro delimitador son finitos, llamando a Vector3.is_finite() en el position y el size.


AABB merge(with: AABB) const 🔗

Devuelve un AABB que engloba tanto este cuadro delimitador como with alrededor de los bordes. Véase también encloses().


Descripciones de Operadores

bool operator !=(right: AABB) 🔗

Devuelve true si la position o el size de ambos cuadros delimitadores no son iguales.

Nota: Debido a los errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, que es más fiable.


AABB operator *(right: Transform3D) 🔗

Transforma inversamente (multiplica) el AABB por la matriz de transformación Transform3D dada, bajo la suposición de que la base de transformación es ortonormal (es decir, la rotación/reflexión está bien, la escala/el sesgo no lo están).

aabb * transform es equivalente a transform.inverse() * aabb. Véase Transform3D.inverse().

Para transformar por la inversa de una transformación afín (por ejemplo, con escalado), se puede utilizar transform.affine_inverse() * aabb en su lugar. Véase Transform3D.affine_inverse().


bool operator ==(right: AABB) 🔗

Devuelve true si tanto la position como el size de los cuadros delimitadores son exactamente iguales, respectivamente.

Nota: Debido a los errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, que es más fiable.