public class DynamicTree
- Object
- 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
Inherited methods
Field details
MAX_STACK_SIZE
public static final int MAX_STACK_SIZE = 64NULL_NODE
public static final int NULL_NODE = -1Constructor 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
callbackTreeRayCastCallback- a callback class that is called for each proxy that is hit by the ray.
inputRayCastInput- 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)