AABB(Axis-Aligned Bounding Box,轴对齐的包围盒)是一种常见的用于进行快速碰撞检测、物理引擎等的算法,其基本原理就是用一个轴对齐的矩形盒子来包围住3D或2D物体。
在Yuka js库中,可以通过以下方式来创建AABB:
const aabb = new YUKA.AABB();
默认情况下,AABB会被初始化为一个不包围任何物体的空盒子。
也可以传入两个点的坐标来指定AABB的大小和位置:
const aabb = new YUKA.AABB( new YUKA.Vector3( -1, -2, -3 ), new YUKA.Vector3( 1, 2, 3 ) );
这里的两个点表示AABB盒子的最小点和最大点。
aabb.set( min: Vector3, max: Vector3): AABB
用给定的最小和最大点设置AABB盒子。
aabb.clone(): AABB
返回一个新盒子,它与原始盒子是完全一样的。
aabb.copy( aabb: AABB ): AABB
复制另一个AABB盒子的最大和最小点到当前盒子。
aabb.isEmpty(): boolean
判断AABB盒子是否为空盒子。
aabb.getCenter( target: Vector3 ): Vector3
计算AABB盒子的中心点坐标并返回此坐标。
aabb.getSize( target: Vector3 ): Vector3
计算AABB盒子的大小并返回此大小。
aabb.expandByPoint( point: Vector3 ): AABB
将AABB盒子扩展成包括给定点的新盒子。
aabb.expandByVector( vector: Vector3 ): AABB
将AABB盒子扩展为包括一个给定的向量的新盒子。
aabb.contains( point: Vector3 ): boolean
返回一个布尔值,该布尔值表示给定点是否包含在AABB盒子中。
aabb.intersects( aabb: AABB ): boolean
返回一个布尔值,该布尔值表示两个AABB盒子是否相交。
以下示例演示了如何创建一个 AABBCollider 类,该类继承了 Collider 并使用了 AABB 盒子来描述其大小和位置。
import { Collider, Vector3, AABB } from 'Yuka';
class AABBCollider extends Collider {
constructor( entity ) {
super( entity );
this.aabb = new AABB( new Vector3(), new Vector3() );
}
update() {
// do some update here
}
}
以上代码中,构造函数中创建了一个新的 AABB,该 AABB 的最小和最大点是 Vector3 类型的空向量。
然后在 update 方法中可以对该 AABBCollider 进行各种更新。