Package com.badlogic.gdx.math
Class Octree<T>
- java.lang.Object
-
- com.badlogic.gdx.math.Octree<T>
-
public class Octree<T> extends java.lang.ObjectA static Octree implementation. Example of usage:Vector3 min = new Vector3(-10, -10, -10); Vector3 max = new Vector3(10, 10, 10); octree = new Octree
(min, max, MAX_DEPTH, MAX_ITEMS_PER_NODE, new Octree.Collider () { @Override public boolean intersects (BoundingBox nodeBounds, GameObject geometry) { return nodeBounds.intersects(geometry.box); } @Override public boolean intersects (Frustum frustum, GameObject geometry) { return frustum.boundsInFrustum(geometry.box); } @Override public float intersects (Ray ray, GameObject geometry) { if (Intersector.intersectRayBounds(ray, geometry.box, new Vector3())) { return tmp.dst2(ray.origin); } return Float.MAX_VALUE; } }); // Adding game objects to the octree octree.add(gameObject1); octree.add(gameObject2); // Querying the result ObjectSet result = new ObjectSet<>(); octree.query(cam.frustum, result); // Rendering the result for (GameObject gameObject : result) { modelBatch.render(gameObject); }
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceOctree.Collider<T>Interface used by octree to handle geometries' collisions against BoundingBox, Frustum and Ray.protected classOctree.OctreeNodestatic classOctree.RayCastResult<T>
-
Field Summary
Fields Modifier and Type Field Description protected Octree.OctreeNoderoot
-
Constructor Summary
Constructors Constructor Description Octree(Vector3 minimum, Vector3 maximum, int maxDepth, int maxItemsPerNode, Octree.Collider<T> collider)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(T object)ObjectSet<T>getAll(ObjectSet<T> resultSet)Method to retrieve all the geometries.ObjectSet<BoundingBox>getNodesBoxes(ObjectSet<BoundingBox> boxes)Method to get nodes as bounding boxes.ObjectSet<T>query(BoundingBox aabb, ObjectSet<T> result)Method to query geometries inside nodes that the aabb intersects.ObjectSet<T>query(Frustum frustum, ObjectSet<T> result)Method to query geometries inside nodes that the frustum intersects.TrayCast(Ray ray, Octree.RayCastResult<T> result)voidremove(T object)voidupdate(T object)
-
-
-
Field Detail
-
root
protected Octree.OctreeNode root
-
-
Constructor Detail
-
Octree
public Octree(Vector3 minimum, Vector3 maximum, int maxDepth, int maxItemsPerNode, Octree.Collider<T> collider)
-
-
Method Detail
-
add
public void add(T object)
-
remove
public void remove(T object)
-
update
public void update(T object)
-
getAll
public ObjectSet<T> getAll(ObjectSet<T> resultSet)
Method to retrieve all the geometries.- Parameters:
resultSet-- Returns:
- the result set
-
query
public ObjectSet<T> query(BoundingBox aabb, ObjectSet<T> result)
Method to query geometries inside nodes that the aabb intersects. Can be used as broad phase.- Parameters:
aabb- - The bounding box to queryresult- - Set to be populated with objects inside the BoundingBoxes
-
query
public ObjectSet<T> query(Frustum frustum, ObjectSet<T> result)
Method to query geometries inside nodes that the frustum intersects. Can be used as broad phase.- Parameters:
frustum- - The frustum to queryresult- set populated with objects near from the frustum
-
rayCast
public T rayCast(Ray ray, Octree.RayCastResult<T> result)
-
getNodesBoxes
public ObjectSet<BoundingBox> getNodesBoxes(ObjectSet<BoundingBox> boxes)
Method to get nodes as bounding boxes. Useful for debug purpose.- Parameters:
boxes-
-
-