public class DynamicTree

  1. Object
  2. DynamicTree

ImplementsBroadPhaseStrategy

A dynamic tree arranges data in a binary tree to accelerate queries such as volume queries and ray casts. Leafs are proxies with an AABB. In the tree we expand the proxy AABB by _fatAABBFactor so that the proxy AABB is bigger than the client object. This allows the client object to move by small amounts without triggering a tree update.

Nested types

class DynamicTree.TreeNodeStack

Fields

public static final int MAX_STACK_SIZE = 64
public static final int NULL_NODE = -1

Constructors

public DynamicTree()

Methods

public final int createProxy(AABB aabb, Object userData)Create a proxy.
public final void destroyProxy(int proxyId)Destroy a proxy
public final boolean moveProxy(int proxyId, AABB aabb, Vec2 displacement)Move a proxy with a swepted AABB.
public final Object getUserData(int proxyId)
public final AABB getFatAABB(int proxyId)
public final void query(TreeCallback callback, AABB aabb)Query an AABB for overlapping proxies.
public void raycast(TreeRayCastCallback callback, RayCastInput input)Ray-cast against the proxies in the tree.
public final int computeHeight()Compute the height of the tree.
public void validate()Validate this tree.
public int getHeight()Compute the height of the binary tree in O(N) time.
public int getMaxBalance()Get the maximum balance of an node in the tree.
public float getAreaRatio()Get the ratio of the sum of the node areas to the root area.
public void rebuildBottomUp()Build an optimal tree.
public int getInsertionCount()
public void drawTree(DebugDraw argDraw)
public void drawTree(DebugDraw argDraw, DynamicTreeNode node, int spot, int height)

Inherited methods

Field details

MAX_STACK_SIZE

public static final int MAX_STACK_SIZE = 64

NULL_NODE

public static final int NULL_NODE = -1

Constructor details

DynamicTree

public DynamicTree()

Method details

createProxy

public final int createProxy(AABB aabb, Object userData)
Create a proxy. Provide a tight fitting AABB and a userData pointer.

destroyProxy

public final void destroyProxy(int proxyId)
Destroy a proxy

moveProxy

public final boolean moveProxy(int proxyId, AABB aabb, Vec2 displacement)
Move a proxy with a swepted AABB. If the proxy has moved outside of its fattened AABB, then the proxy is removed from the tree and re-inserted. Otherwise the function returns immediately.

Returns

true if the proxy was re-inserted.

getUserData

public final Object getUserData(int proxyId)

getFatAABB

public final AABB getFatAABB(int proxyId)

query

public final void query(TreeCallback callback, AABB aabb)
Query an AABB for overlapping proxies. The callback class is called for each proxy that overlaps the supplied AABB.

raycast

public void raycast(TreeRayCastCallback callback, RayCastInput input)
Ray-cast against the proxies in the tree. This relies on the callback to perform a exact ray-cast in the case were the proxy contains a shape. The callback also performs the any collision filtering. This has performance roughly equal to k * log(n), where k is the number of collisions and n is the number of proxies in the tree.

Parameters

callback TreeRayCastCallback
a callback class that is called for each proxy that is hit by the ray.
input RayCastInput
the ray-cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1).

computeHeight

public final int computeHeight()
Compute the height of the tree.

validate

public void validate()
Validate this tree. For testing.

getHeight

public int getHeight()
Compute the height of the binary tree in O(N) time. Should not be called often.

getMaxBalance

public int getMaxBalance()
Get the maximum balance of an node in the tree. The balance is the difference in height of the two children of a node.

getAreaRatio

public float getAreaRatio()
Get the ratio of the sum of the node areas to the root area.

rebuildBottomUp

public void rebuildBottomUp()
Build an optimal tree. Very expensive. For testing.

getInsertionCount

public int getInsertionCount()

drawTree

public void drawTree(DebugDraw argDraw)

drawTree

public void drawTree(DebugDraw argDraw, DynamicTreeNode node, int spot, int height)