Package org.joml

Class RayAabIntersection


  • public class RayAabIntersection
    extends java.lang.Object
    This is an implementation of the Fast Ray/Axis-Aligned Bounding Box Overlap Tests using Ray Slopes paper.

    It is an efficient implementation when testing many axis-aligned boxes against the same ray.

    This class is thread-safe and can be used in a multithreaded environment when testing many axis-aligned boxes against the same ray concurrently.

    Author:
    Kai Burjack
    • Constructor Summary

      Constructors 
      Constructor Description
      RayAabIntersection()
      Create a new RayAabIntersection without initializing a ray.
      RayAabIntersection​(float originX, float originY, float originZ, float dirX, float dirY, float dirZ)
      Create a new RayAabIntersection and initialize it with a ray with origin (originX, originY, originZ) and direction (dirX, dirY, dirZ).
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void set​(float originX, float originY, float originZ, float dirX, float dirY, float dirZ)
      Update the ray stored by this RayAabIntersection with the new origin (originX, originY, originZ) and direction (dirX, dirY, dirZ).
      boolean test​(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)
      Test whether the ray stored in this RayAabIntersection intersect the axis-aligned box given via its minimum corner (minX, minY, minZ) and its maximum corner (maxX, maxY, maxZ).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • RayAabIntersection

        public RayAabIntersection​(float originX,
                                  float originY,
                                  float originZ,
                                  float dirX,
                                  float dirY,
                                  float dirZ)
        Create a new RayAabIntersection and initialize it with a ray with origin (originX, originY, originZ) and direction (dirX, dirY, dirZ).

        In order to change the direction and/or origin of the ray later, use set().

        Parameters:
        originX - the x coordinate of the origin
        originY - the y coordinate of the origin
        originZ - the z coordinate of the origin
        dirX - the x coordinate of the direction
        dirY - the y coordinate of the direction
        dirZ - the z coordinate of the direction
        See Also:
        set(float, float, float, float, float, float)
    • Method Detail

      • set

        public void set​(float originX,
                        float originY,
                        float originZ,
                        float dirX,
                        float dirY,
                        float dirZ)
        Update the ray stored by this RayAabIntersection with the new origin (originX, originY, originZ) and direction (dirX, dirY, dirZ).
        Parameters:
        originX - the x coordinate of the ray origin
        originY - the y coordinate of the ray origin
        originZ - the z coordinate of the ray origin
        dirX - the x coordinate of the ray direction
        dirY - the y coordinate of the ray direction
        dirZ - the z coordinate of the ray direction
      • test

        public boolean test​(float minX,
                            float minY,
                            float minZ,
                            float maxX,
                            float maxY,
                            float maxZ)
        Test whether the ray stored in this RayAabIntersection intersect the axis-aligned box given via its minimum corner (minX, minY, minZ) and its maximum corner (maxX, maxY, maxZ).

        This implementation uses a tableswitch to dispatch to the correct intersection method.

        This method is thread-safe and can be used to test many axis-aligned boxes concurrently.

        Parameters:
        minX - the x coordinate of the minimum corner
        minY - the y coordinate of the minimum corner
        minZ - the z coordinate of the minimum corner
        maxX - the x coordinate of the maximum corner
        maxY - the y coordinate of the maximum corner
        maxZ - the z coordinate of the maximum corner
        Returns:
        true iff the ray intersects the given axis-aligned box; false otherwise