Class BresenhamTerrainPicker

All Implemented Interfaces:

public class BresenhamTerrainPicker extends Object implements TerrainPicker
It basically works by casting a pick ray against the bounding volumes of the TerrainQuad and its children, gathering all of the TerrainPatches hit (in distance order.) The triangles of each patch are then tested using the BresenhamYUpGridTracer to determine which triangles to test and in what order. When a hit is found, it is guaranteed to be the first such hit and can immediately be returned.
  • Constructor Details

    • BresenhamTerrainPicker

      public BresenhamTerrainPicker(TerrainQuad root)
  • Method Details

    • setSupportMultipleCollisions

      public void setSupportMultipleCollisions(boolean multipleCollisions)
    • isSupportingMultipleCollisions

      public boolean isSupportingMultipleCollisions()
    • getTerrainIntersection

      public int getTerrainIntersection(Ray worldPick, CollisionResults results)
      Description copied from interface: TerrainPicker
      Ask for the point of intersection between the given ray and the terrain.
      Specified by:
      getTerrainIntersection in interface TerrainPicker
      worldPick - our pick ray, in world space.
      The number of collisions found
    • checkTriangles

      protected boolean checkTriangles(float gridX, float gridY, Ray pick, Vector3f intersection, TerrainPatch patch, Triangle store)
    • getTriangles

      protected boolean getTriangles(float gridX, float gridY, TerrainPatch patch)
      Request the triangles (in world coord space) of a TerrainBlock that correspond to the given grid location. The triangles are stored in the class fields _gridTriA and _gridTriB.
      gridX - grid row
      gridY - grid column
      patch - the TerrainPatch we are working with
      true if the grid point is valid for the given block, false if it is off the block.
    • findClosestHeightIndex

      protected int findClosestHeightIndex(Vector3f position, TerrainPatch patch)
      Finds the closest height point to a position. Will always be left/above that position.
      position - the position to check at
      patch - the patch to get height values from
      an index to the height position of the given block.