Package org.joml

Class RayAabIntersection

java.lang.Object
org.joml.RayAabIntersection

public class RayAabIntersection extends 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
    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

    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 Details

    • RayAabIntersection

      public RayAabIntersection()
      Create a new RayAabIntersection without initializing a ray.

      Before using the intersect() method, the method set() must be called in order to initialize the created RayAabIntersection instance with a ray.

      See Also:
    • 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:
  • Method Details

    • 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