AABB
AlignmentBehavior
ArriveBehavior
AStar
BFS
BoundingSphere
BVH
BVHNode
Cell
CellSpacePartitioning
CohesionBehavior
CompositeGoal
ConvexHull
Corridor
CostTable
DFS
Dijkstra
Edge
EntityManager
EvadeBehavior
EventDispatcher
Behavior
FollowPathBehavior
FuzzyAND
FuzzyCompositeTerm
FuzzyFAIRLY
FuzzyModule
FuzzyOR
FuzzyRule
FuzzySet
FuzzyTerm
FuzzyVariable
FuzzyVERY
GameEntity
Goal
GoalEvaluator
Graph
GraphUtils
HalfEdge
HeuristicPolicyDijkstra
HeuristicPolicyEuclid
HeuristicPolicyEuclidSquared
HeuristicPolicyManhattan
InterposeBehavior
LeftSCurveFuzzySet
LeftShoulderFuzzySet
LineSegment
Logger
MathUtils
Matrix3
Matrix4
MemoryRecord
MemorySystem
MeshGeometry
MessageDispatcher
MovingEntity
NavEdge
NavMesh
NavMeshLoader
NavNode
Node
NormalDistFuzzySet
OBB
ObstacleAvoidanceBehavior
OffsetPursuitBehavior
OnPathBehavior
Path
Plane
Polygon
Polyhedron
PriorityQueue
PursuitBehavior
Quaternion
Ray
RectangleTriggerRegion
Regular
RightSCurveFuzzySet
RightShoulderFuzzySet
SAT
SeekBehavior
SeparationBehavior
SingletonFuzzySet
Smoother
SphericalTriggerRegion
State
StateMachine
SteeringBehavior
SteeringManager
Task
TaskQueue
Telegram
Think
Time
TriangularFuzzySet
Trigger
TriggerRegion
Vector3
Vehicle
Version
WanderBehavior

AABB

AABB(Axis-Aligned Bounding Box,轴对齐的包围盒)是一种常见的用于进行快速碰撞检测、物理引擎等的算法,其基本原理就是用一个轴对齐的矩形盒子来包围住3D或2D物体。

创建AABB

在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盒子的最小点和最大点。

方法

set

aabb.set( min: Vector3, max: Vector3): AABB

用给定的最小和最大点设置AABB盒子。

clone

aabb.clone(): AABB

返回一个新盒子,它与原始盒子是完全一样的。

copy

aabb.copy( aabb: AABB ): AABB

复制另一个AABB盒子的最大和最小点到当前盒子。

isEmpty

aabb.isEmpty(): boolean

判断AABB盒子是否为空盒子。

getCenter

aabb.getCenter( target: Vector3 ): Vector3

计算AABB盒子的中心点坐标并返回此坐标。

getSize

aabb.getSize( target: Vector3 ): Vector3

计算AABB盒子的大小并返回此大小。

expandByPoint

aabb.expandByPoint( point: Vector3 ): AABB

将AABB盒子扩展成包括给定点的新盒子。

expandByVector

aabb.expandByVector( vector: Vector3 ): AABB

将AABB盒子扩展为包括一个给定的向量的新盒子。

contains

aabb.contains( point: Vector3 ): boolean

返回一个布尔值,该布尔值表示给定点是否包含在AABB盒子中。

intersects

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 进行各种更新。