DynamicAabbTreeT Class |
Namespace: DigitalRune.Geometry.Partitioning
public class DynamicAabbTree<T> : BasePartition<T>, ISupportClosestPointQueries<T>, ISupportFrustumCulling<T>
The DynamicAabbTreeT type exposes the following members.
Name | Description | |
---|---|---|
DynamicAabbTreeT |
Initializes a new instance of the DynamicAabbTreeT class.
|
Name | Description | |
---|---|---|
Add |
Adds an item to the BasePartitionT.
(Inherited from BasePartitionT.) | |
Clear |
Removes all items from the BasePartitionT.
(Inherited from BasePartitionT.) | |
Clone |
Creates a new BasePartitionT that is a clone (deep copy) of the current
instance.
(Inherited from BasePartitionT.) | |
CloneCore |
Makes the instance a clone (deep copy) of the specified BasePartitionT.
(Overrides BasePartitionTCloneCore(BasePartitionT).) | |
Contains |
Determines whether the BasePartitionT contains a specific value.
(Inherited from BasePartitionT.) | |
CopyTo | (Inherited from BasePartitionT.) | |
CreateInstanceCore |
When implemented in a derived class, creates a new instance of the
BasePartitionT derived class.
(Overrides BasePartitionTCreateInstanceCore.) | |
Equals | (Inherited from Object.) | |
Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.) | |
GetClosestPointCandidates(Aabb, Single, FuncT, Single) |
Gets all items that are candidates for the smallest closest-point distance to a given
axis-aligned bounding box (AABB).
| |
GetClosestPointCandidates(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose, FuncT, T, Single) |
Gets all items that are candidates for the smallest closest-point distance to items in a
given partition.
| |
GetEnumerator |
Returns an enumerator that iterates through the collection.
(Inherited from BasePartitionT.) | |
GetHashCode | Serves as a hash function for a particular type. (Inherited from Object.) | |
GetOverlaps |
Gets overlaps of all items contained in this spatial partition.
(Inherited from BasePartitionT.) | |
GetOverlaps(Aabb) |
Gets the items that touch the given axis-aligned bounding box (AABB).
(Inherited from BasePartitionT.) | |
GetOverlaps(Aabb) |
Gets the items that touch the given axis-aligned bounding box (AABB).
(Overrides BasePartitionTGetOverlaps(Aabb).) | |
GetOverlaps(ISpatialPartitionT) |
Gets overlaps between all items of this spatial partition and the items of another spatial
partition.
(Overrides BasePartitionTGetOverlaps(ISpatialPartitionT).) | |
GetOverlaps(IListPlane) |
Gets the items that touch the bounding volume ("k-DOP") defined by a set of planes.
| |
GetOverlaps(Ray) |
Gets the items that touch the given ray.
(Overrides BasePartitionTGetOverlaps(Ray).) | |
GetOverlaps(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose) |
Gets overlaps between all items of this spatial partition and the items of another spatial
partition.
(Overrides BasePartitionTGetOverlaps(Vector3F, Pose, ISpatialPartitionT, Vector3F, Pose).) | |
GetType | Gets the Type of the current instance. (Inherited from Object.) | |
Invalidate |
Invalidates the cached spatial information of all items in the spatial partition.
(Inherited from BasePartitionT.) | |
Invalidate(T) |
Invalidates the cached spatial information of the specified item.
(Overrides BasePartitionTInvalidate(T).) | |
MemberwiseClone | Creates a shallow copy of the current Object. (Inherited from Object.) | |
Remove |
Removes the first occurrence of a specific object from the BasePartitionT.
(Inherited from BasePartitionT.) | |
ToString | Returns a string that represents the current object. (Inherited from Object.) | |
Update |
Updates the internal structure of this ISpatialPartitionT.
(Inherited from BasePartitionT.) |
Name | Description | |
---|---|---|
Aabb |
Gets the axis-aligned bounding box (AABB) that contains all items.
(Inherited from BasePartitionT.) | |
BottomUpBuildThreshold |
Gets or sets the threshold that determines when a bottom-up tree build method is used.
| |
Count |
Gets the number of items contained in the ICollectionT.
(Inherited from BasePartitionT.) | |
EnableMotionPrediction |
Gets a value indicating whether motion prediction is enabled.
| |
EnableSelfOverlaps |
Gets or sets a value indicating whether self-overlaps are computed.
(Inherited from BasePartitionT.) | |
Filter |
Gets or sets the filter that is used to filter overlaps of two items.
(Inherited from BasePartitionT.) | |
GetAabbForItem |
Gets or sets the method that computes the Aabb of an item.
(Inherited from BasePartitionT.) | |
MotionPrediction |
Gets or sets the number of frames a linear motion is predicted into the future. (Only
applied if motion prediction is enabled.)
| |
OptimizationPerFrame |
Gets or set the amount of incremental optimization per frame (time step).
| |
RelativeMargin |
Gets or sets a relative margin that is added to the AABB of moving objects. (Only applied if
motion prediction is enabled.)
|
Name | Description | |
---|---|---|
IEnumerableTGetEnumerator |
Returns an enumerator that iterates through the collection.
(Inherited from BasePartitionT.) | |
IEnumerableGetEnumerator |
Returns an enumerator that iterates through a collection.
(Inherited from BasePartitionT.) | |
ICollectionTIsReadOnly |
Gets a value indicating whether the ICollectionT is read-only.
(Inherited from BasePartitionT.) | |
ISpatialPartitionTClone |
Creates a new spatial partition that is a clone (deep copy) of the current instance.
(Inherited from BasePartitionT.) |
The DynamicAabbTreeT was inspired by the dynamic bounding volume tree (btDbvt) as implemented in the Bullet Continuous Collision Detection and Physics Library. (Original btDbvt implementation by Nathanael Presson.)
The DynamicAabbTreeT was designed to manage deformable objects efficiently. It should be uses for CompositeShapes or TriangleMeshShapes when the the contained shapes or triangles are updated at runtime.
It can also be used as a collision detection broad-phase (see BroadPhase).
Incremental Optimization: When items in the AABB tree are added, removed or moved the AABB tree might become unbalanced and less optimal for collision detection. Therefore, the DynamicAabbTreeT tries to optimize its tree structure over time. In each frame (time step) it performs a number of optimization passes. The amount of optimization per frame can be controlled by setting OptimizationPerFrame.
Motion Prediction: The dynamic AABB tree is further optimized for models/space where items are constantly moving. The DynamicAabbTreeT automatically detects when items are moving. It adds a small margin (see RelativeMargin) to the AABB of these items to account for small random movements ("jittering") and it extends the AABB in the direction the items are moving (see MotionPrediction). This reduces the number of required tree updates per frame. However, the downside is that the AABB tree is more conservative (safe, but less accurate). It might return more overlaps ("false positives") than other types of spatial partitions.
Motion predication can be enabled by setting EnableMotionPrediction. The feature is disabled by default.
AdaptiveAabbTreeT vs. DynamicAabbTreeT: The AdaptiveAabbTreeT and the DynamicAabbTreeT are similar data structures. As a general rule, the AdaptiveAabbTreeT should be used if
The AdaptiveAabbTreeT should not be used as the collision detection broad-phase (see BroadPhase). Whereas, a DynamicAabbTreeT can be used as the collision detection broad-phase.
However, please note these are just general rules. You should always try different ISpatialPartitionT types and measure which one yields the best performance in your application.
Special handling of self-overlaps in GetOverlaps(ISpatialPartitionT): If GetOverlaps(ISpatialPartitionT) is used to test an AABB tree against itself then overlaps of an item with itself are not returned. That means, each item A overlaps with itself, but (A, A) is not returned. And if two different items overlap, only one overlap is returned, for example: If item A and item B overlap (A, B) or (B, A) is returned, but not both.