Skip to content

BoundingBox ​

概览 ​

字段值
KindData · 数据 Data
Realmcommon

轴对齐包围盒数据结构,用最小点与最大点两个三维向量刻画一段轴对齐的空间范围。它提供获取区域中心点与三个轴向半尺寸的能力,并允许读写两端的边界点,便于在计算位置和尺寸时复用同一份数据。

适用场景 ​

当需要描述或传递一块空间区域时使用,例如由若干坐标构造出包围盒后取出中心点与半尺寸,用于定位、尺寸换算或作为其它接口的空间参数。

使用要点 ​

通过 BoundingBox.New(min, max) 或 BoundingBox(min, max) 创建实例;GetCenter 返回中心点,GetExtent 返回从中心到边界的半尺寸。

注意事项 ​

可使用 BoundingBox.New(min, max) 构造,也可使用等价简写 BoundingBox(min, max);min/max 都是 Vector3,且应满足各分量 Min <= Max。该类型为纯数据结构,不自动关联任何空间对象。GetExtent 返回包围盒在三个轴向上的半尺寸((Max - Min) / 2)——例如 Min=(-5,-2,-3) Max=(5,2,3) 时 GetExtent 返回 Vector3(5, 2, 3)。GetCenter 返回中心点 (Min+Max)/2。

代码示例 ​

构造包围盒并读取中心与半尺寸 ​

lua
-- @runtime client
local box = BoundingBox.New(
    Vector3.New(-5, -2, -3),
    Vector3.New(5, 2, 3)
)
local center = box:GetCenter()  -- Vector3(0, 0, 0)
local extent = box:GetExtent()  -- Vector3(5, 2, 3),半尺寸
print("中心:", center, "半尺寸:", extent)

属性 (2) ​

Name类型默认值说明
MinVector3-包围盒的最小值,类型为 Vector3,既可读取也可写入。
MaxVector3-包围盒的最大值,类型为 Vector3,既可读取也可写入。

关联类型 ​

函数 (7) ​

New ​

签名:New(min: Vector3, max: Vector3) -> BoundingBox

创建一个轴对齐包围盒(BoundingBox)实例,需要传入最小点与最大点两个 Vector3 参数。

参数类型说明
minVector3最小值
maxVector3最大值

返回值 BoundingBox

示例代码

构造包围盒

lua
-- @runtime client
local minPoint = Vector3.New(-5, -2, -3)
local maxPoint = Vector3.New(5, 2, 3)
local box = BoundingBox.New(minPoint, maxPoint)
print(tostring(box))

GetCenter ​

签名:GetCenter() -> Vector3

获取 BoundingBox 的中心点,返回一个 Vector3,表示该轴对齐包围盒的中心坐标。

返回值 Vector3

示例代码

获取中心点

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(-5, -2, -3), Vector3.New(5, 2, 3))
local center = box:GetCenter()  -- 返回 Vector3(0, 0, 0)
print("中心:", tostring(center))

GetExtent ​

签名:GetExtent() -> Vector3

返回包围盒从中心到边界的半尺寸向量,即 (Max - Min) / 2。

返回值 Vector3

示例代码

获取半尺寸

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(-5, -2, -3), Vector3.New(5, 2, 3))
local extent = box:GetExtent()  -- 返回半尺寸 Vector3(5, 2, 3)
print("半尺寸:", tostring(extent))

GetMin ​

签名:GetMin() -> Vector3

获取包围盒的最小值,返回一个 Vector3,表示该轴对齐包围盒的下界坐标。

返回值 Vector3

示例代码

获取最小点

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(-5, -2, -3), Vector3.New(5, 2, 3))
local minP = box:GetMin()  -- 返回 Vector3(-5, -2, -3)
print("最小点:", tostring(minP))

SetMin ​

签名:SetMin(v: Vector3) -> void

设置包围盒的最小值,接收一个 Vector3 参数,无返回值。

参数类型说明
vVector3-

返回值 void

示例代码

设置最小点

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(0, 0, 0), Vector3.New(2, 2, 2))
box:SetMin(Vector3.New(-1, -1, -1))
print("新的最小点:", tostring(box:GetMin()))

GetMax ​

签名:GetMax() -> Vector3

获取包围盒的最大值,返回一个 Vector3,表示该轴对齐包围盒的上界坐标。

返回值 Vector3

示例代码

获取最大点

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(-5, -2, -3), Vector3.New(5, 2, 3))
local maxP = box:GetMax()  -- 返回 Vector3(5, 2, 3)
print("最大点:", tostring(maxP))

SetMax ​

签名:SetMax(v: Vector3) -> void

设置包围盒的最大值,接收一个 Vector3 参数,无返回值。

参数类型说明
vVector3-

返回值 void

示例代码

设置最大点

lua
-- @runtime client
local box = BoundingBox.New(Vector3.New(0, 0, 0), Vector3.New(2, 2, 2))
box:SetMax(Vector3.New(3, 3, 3))
print("新的最大点:", tostring(box:GetMax()))