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

split

split 方法是 BVHNode 对象上的一个方法,用于对当前节点进行切分,并生成两个新的子节点。

函数签名

split(axis: string, position: number): void

参数

  • axis: 切分的轴,必须是字符串类型,取值可以为 'x''y''z'
  • position: 切分的位置,必须是数字类型,表示切分平面的坐标,如果值小于当前节点范围的最小值或大于最大值,则将该值限制在最小或最大值之间。

使用示例

let node = new BVHNode(boundingBoxes);

// 在x轴上进行切分,切分平面位置为 20
node.split('x', 20);

// 此时 node 的左右子节点就已经生成了
// 可以对node左右子节点继续使用 split 方法进行递归切分

实现原理

BVHNode.split 方法首先计算出当前节点在指定轴上的中心点位置,然后将所有边界框按照其在该轴上的位置关系(小于中心点或大于等于中心点)分别归入两个新的子节点中,最后更新自身的 boundingBox 属性为两个新子节点的包围盒。切分完成后,可以通过获取 BVHNodeleftright 属性来分别获取左右子节点。