AABB

3D 轴对齐边界框。

描述

AABB 由一个位置、一个大小和若干实用函数组成。通常用于快速重叠测试。

它使用浮点坐标。AABB 的 2D 对应物为 Rect2

不支持负的 size,并且不适用于大多数方法。使用 abs 获得具有正尺寸的 AABB。

注意:Rect2 不同,AABB 没有使用整数坐标的变体。

备注

通过 C# 使用这个 API 时有显著的不同。详见 C# API 与 GDScript 的差异

教程

属性

Vector3

end

Vector3(0, 0, 0)

Vector3

position

Vector3(0, 0, 0)

Vector3

size

Vector3(0, 0, 0)

构造函数

AABB

AABB ( )

AABB

AABB ( AABB from )

AABB

AABB ( Vector3 position, Vector3 size )

方法

AABB

abs ( ) const

bool

encloses ( AABB with ) const

AABB

expand ( Vector3 to_point ) const

Vector3

get_center ( ) const

Vector3

get_endpoint ( int idx ) 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 ( Vector3 dir ) const

float

get_volume ( ) const

AABB

grow ( float by ) const

bool

has_point ( Vector3 point ) const

bool

has_surface ( ) const

bool

has_volume ( ) const

AABB

intersection ( AABB with ) const

bool

intersects ( AABB with ) const

bool

intersects_plane ( Plane plane ) const

Variant

intersects_ray ( Vector3 from, Vector3 dir ) const

Variant

intersects_segment ( Vector3 from, Vector3 to ) const

bool

is_equal_approx ( AABB aabb ) const

bool

is_finite ( ) const

AABB

merge ( AABB with ) const

操作符

bool

operator != ( AABB right )

AABB

operator * ( Transform3D right )

bool

operator == ( AABB right )


属性说明

Vector3 end = Vector3(0, 0, 0)

终点角。通过 position + size 计算而来。设置该值会修改大小。


Vector3 position = Vector3(0, 0, 0)

起点角。通常比 end 小。


Vector3 size = Vector3(0, 0, 0)

positionend 的大小。通常所有分量都是正数。

如果大小为负,可以用 abs 修正。


构造函数说明

AABB AABB ( )

默认构造 AABBpositionsize 均为默认值(零)。


AABB AABB ( AABB from )

构造给定 AABB 的副本。


AABB AABB ( Vector3 position, Vector3 size )

从一个位置和大小构造 AABB


方法说明

AABB abs ( ) const

返回等价的 AABB,其原点被修正至最负数的角落,大小被修正为正数。


bool encloses ( AABB with ) const

AABB 完全包含另一个时,返回 true


AABB expand ( Vector3 to_point ) const

返回该 AABB 的副本,该副本扩展至包含给出的点。

例子:

GDScriptC#

  1. # 位置 (-3, 2, 0),大小 (1, 1, 1)
  2. var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))
  3. # 位置 (-3, -1, 0),大小 (3, 4, 2),包含原来的 AABB 和 Vector3(0, -1, 2)
  4. var box2 = box.expand(Vector3(0, -1, 2))
  1. // 位置 (-3, 2, 0),大小 (1, 1, 1)
  2. var box = new Aabb(new Vector3(-3, 2, 0), new Vector3(1, 1, 1));
  3. // 位置 (-3, -1, 0),大小 (3, 4, 2),包含原来的 AABB 和 Vector3(0, -1, 2)
  4. var box2 = box.Expand(new Vector3(0, -1, 2));

Vector3 get_center ( ) const

返回该 AABB 的中心点,等于 position + (size / 2)。


Vector3 get_endpoint ( int idx ) const

获取该 AABB 的 8 个端点的位置。


Vector3 get_longest_axis ( ) const

返回该 AABB 归一化后的最长轴。


int get_longest_axis_index ( ) const

返回该 AABB 最长轴的索引(根据 Vector3AXIS_* 常量)。


float get_longest_axis_size ( ) const

返回该 AABB 最长轴的标量长度。


Vector3 get_shortest_axis ( ) const

返回该 AABB 归一化后的最短轴。


int get_shortest_axis_index ( ) const

返回该 AABB 最短轴的索引(根据 Vector3::AXIS* 常量)。


float get_shortest_axis_size ( ) const

返回该 AABB 最短轴的标量长度。


Vector3 get_support ( Vector3 dir ) const

返回指定方向上最远的 AABB 顶点。该点通常称为碰撞检测算法的支撑点。


float get_volume ( ) const

返回该 AABB 的体积。


AABB grow ( float by ) const

返回 AABB 的副本,该副本向所有方向增长了给定数量的单位。


bool has_point ( Vector3 point ) const

如果 AABB 包含点,则返回 true。AABB 表面上的点被视为包括在内,但浮点精度误差可能会影响此类检测的准确性。

注意:这种方法对于具有负尺寸AABB 是不可靠的。使用 abs 获得一个正尺寸的等效 AABB 在检查是否包含点。


bool has_surface ( ) const

如果 AABB 具有表面或长度,则返回 true;如果 AABB 为空(size 的所有分量为零或负),则返回 false


bool has_volume ( ) const

如果 AABB 有体积,则返回 true;如果 AABB 是扁平的、空的或具有负的 size,则返回 false


AABB intersection ( AABB with ) const

返回两个 AABB 的交叠区域。失败时返回空的 AABB(大小为 (0, 0, 0))。


bool intersects ( AABB with ) const

AABB 与另一个交叠时,返回 true


bool intersects_plane ( Plane plane ) const

AABB 同时位于指定平面的两边时,返回 true


Variant intersects_ray ( Vector3 from, Vector3 dir ) const

返回给定的射线与该 AABB 的交点,如果不相交则返回 null。射线无限长。


Variant intersects_segment ( Vector3 from, Vector3 to ) const

如果没有交点,则返回 null,否则返回 fromto 与此 AABB 的交点。


bool is_equal_approx ( AABB aabb ) const

如果该 AABBaabb 近似相等,则返回 true,通过在每个分量上调用 @GlobalScope.is_equal_approx


bool is_finite ( ) const

如果该 AABB 是有限的,则返回 true,方法是在每个分量上调用 @GlobalScope.is_finite


AABB merge ( AABB with ) const

返回同时包含该 AABBwith 的更大的 AABB


操作符说明

bool operator != ( AABB right )

如果 AABB 不相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 is_equal_approx,会更可靠。


AABB operator * ( Transform3D right )

假设该变换的基是正交的(即旋转/反射可以,缩放/倾斜则不行),将 AABB 逆向变换(乘以)给定的 Transform3D 变换矩阵。

aabb * transform 相当于 transform.inverse() * aabb。见 Transform3D.inverse

对于通过仿射变换的逆进行的变换(例如,缩放),可以使用 transform.affine_inverse() * aabb 代替。见 Transform3D.affine_inverse


bool operator == ( AABB right )

如果 AABB 完全相等,则返回 true

注意:由于浮点数精度误差,请考虑改用 is_equal_approx,会更可靠。

Previous Next


© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7.

Built with Sphinx using a theme provided by Read the Docs.