AABB¶
A 3D axis-aligned bounding box.
Description¶
AABB consists of a position, a size, and several utility functions. It is typically used for fast overlap tests.
It uses floating-point coordinates. The 2D counterpart to AABB is Rect2.
Negative values for size are not supported and will not work for most methods. Use abs to get an AABB with a positive size.
Note: Unlike Rect2, AABB does not have a variant that uses integer coordinates.
Note
There are notable differences when using this API with C#. See C# API differences to GDScript for more information.
Tutorials¶
Properties¶
|
||
|
||
|
Constructors¶
AABB ( ) |
|
Methods¶
abs ( ) const |
|
get_center ( ) const |
|
get_endpoint ( int idx ) const |
|
get_longest_axis ( ) const |
|
get_longest_axis_index ( ) const |
|
get_longest_axis_size ( ) const |
|
get_shortest_axis ( ) const |
|
get_shortest_axis_index ( ) const |
|
get_shortest_axis_size ( ) const |
|
get_support ( Vector3 dir ) const |
|
get_volume ( ) const |
|
has_surface ( ) const |
|
has_volume ( ) const |
|
intersection ( AABB with ) const |
|
intersects ( AABB with ) const |
|
intersects_plane ( Plane plane ) const |
|
intersects_ray ( Vector3 from, Vector3 dir ) const |
|
intersects_segment ( Vector3 from, Vector3 to ) const |
|
is_equal_approx ( AABB aabb ) const |
|
is_finite ( ) const |
|
Operators¶
operator != ( AABB right ) |
|
operator * ( Transform3D right ) |
|
operator == ( AABB right ) |
Property Descriptions¶
Vector3 end = Vector3(0, 0, 0)
Ending corner. This is calculated as position + size
. Setting this value will change the size.
Vector3 position = Vector3(0, 0, 0)
Beginning corner. Typically has values lower than end.
Vector3 size = Vector3(0, 0, 0)
Size from position to end. Typically, all components are positive.
If the size is negative, you can use abs to fix it.
Constructor Descriptions¶
AABB AABB ( )
Constructs a default-initialized AABB with default (zero) values of position and size.
Constructs an AABB as a copy of the given AABB.
AABB AABB ( Vector3 position, Vector3 size )
Constructs an AABB from a position and size.
Method Descriptions¶
AABB abs ( ) const
Returns an AABB with equivalent position and size, modified so that the most-negative corner is the origin and the size is positive.
bool encloses ( AABB with ) const
Returns true
if this AABB completely encloses another one.
AABB expand ( Vector3 to_point ) const
Returns a copy of this AABB expanded to include a given point.
Example:
# position (-3, 2, 0), size (1, 1, 1)
var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))
# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and Vector3(0, -1, 2)
var box2 = box.expand(Vector3(0, -1, 2))
// position (-3, 2, 0), size (1, 1, 1)
var box = new Aabb(new Vector3(-3, 2, 0), new Vector3(1, 1, 1));
// position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and Vector3(0, -1, 2)
var box2 = box.Expand(new Vector3(0, -1, 2));
Vector3 get_center ( ) const
Returns the center of the AABB, which is equal to position + (size / 2).
Vector3 get_endpoint ( int idx ) const
Gets the position of the 8 endpoints of the AABB in space.
Vector3 get_longest_axis ( ) const
Returns the normalized longest axis of the AABB.
int get_longest_axis_index ( ) const
Returns the index of the longest axis of the AABB (according to Vector3's AXIS_*
constants).
float get_longest_axis_size ( ) const
Returns the scalar length of the longest axis of the AABB.
Vector3 get_shortest_axis ( ) const
Returns the normalized shortest axis of the AABB.
int get_shortest_axis_index ( ) const
Returns the index of the shortest axis of the AABB (according to Vector3::AXIS* enum).
float get_shortest_axis_size ( ) const
Returns the scalar length of the shortest axis of the AABB.
Vector3 get_support ( Vector3 dir ) const
Returns the support point in a given direction. This is useful for collision detection algorithms.
float get_volume ( ) const
Returns the volume of the AABB.
Returns a copy of the AABB grown a given number of units towards all the sides.
bool has_point ( Vector3 point ) const
Returns true
if the AABB contains a point. Points on the faces of the AABB are considered included, though float-point precision errors may impact the accuracy of such checks.
Note: This method is not reliable for AABB with a negative size. Use abs to get a positive sized equivalent AABB to check for contained points.
bool has_surface ( ) const
Returns true
if the AABB has a surface or a length, and false
if the AABB is empty (all components of size are zero or negative).
bool has_volume ( ) const
Returns true
if the AABB has a volume, and false
if the AABB is flat, empty, or has a negative size.
AABB intersection ( AABB with ) const
Returns the intersection between two AABB. An empty AABB (size (0, 0, 0)
) is returned on failure.
bool intersects ( AABB with ) const
Returns true
if the AABB overlaps with another.
bool intersects_plane ( Plane plane ) const
Returns true
if the AABB is on both sides of a plane.
Variant intersects_ray ( Vector3 from, Vector3 dir ) const
Returns the point of intersection of the given ray with this AABB or null
if there is no intersection. Ray length is infinite.
Variant intersects_segment ( Vector3 from, Vector3 to ) const
Returns the point of intersection between from
and to
with this AABB or null
if there is no intersection.
bool is_equal_approx ( AABB aabb ) const
Returns true
if this AABB and aabb
are approximately equal, by calling @GlobalScope.is_equal_approx on each component.
bool is_finite ( ) const
Returns true
if this AABB is finite, by calling @GlobalScope.is_finite on each component.
AABB merge ( AABB with ) const
Returns a larger AABB that contains both this AABB and with
.
Operator Descriptions¶
bool operator != ( AABB right )
Returns true
if the AABBs are not equal.
Note: Due to floating-point precision errors, consider using is_equal_approx instead, which is more reliable.
AABB operator * ( Transform3D right )
Inversely transforms (multiplies) the AABB by the given Transform3D transformation matrix.
bool operator == ( AABB right )
Returns true
if the AABBs are exactly equal.
Note: Due to floating-point precision errors, consider using is_equal_approx instead, which is more reliable.