Open 3D Engine AzFramework API Reference 23.10.0
O3DE is an open-source, fully-featured, high-fidelity, modular 3D engine for building games and simulations, available to every industry.
AzFramework::Terrain::TerrainDataRequests Class Referenceabstract

Shared interface for terrain system implementations. More...

#include <TerrainDataRequestBus.h>

Inherits AZ::EBusSharedDispatchTraits< TerrainDataRequests >.

Public Types

enum class  Sampler { BILINEAR , CLAMP , EXACT , DEFAULT = BILINEAR }
 
enum  TerrainDataMask : uint8_t { Heights = 0b00000001 , Normals = 0b00000010 , SurfaceData = 0b00000100 , All = 0b11111111 }
 

Public Member Functions

virtual float GetTerrainHeightQueryResolution () const =0
 
virtual void SetTerrainHeightQueryResolution (float queryResolution)=0
 
virtual float GetTerrainSurfaceDataQueryResolution () const =0
 
virtual void SetTerrainSurfaceDataQueryResolution (float queryResolution)=0
 
virtual AZ::Aabb GetTerrainAabb () const =0
 
virtual FloatRange GetTerrainHeightBounds () const =0
 
virtual void SetTerrainHeightBounds (const FloatRange &heightRange)=0
 
virtual bool TerrainAreaExistsInBounds (const AZ::Aabb &bounds) const =0
 
virtual float GetHeight (const AZ::Vector3 &position, Sampler sampler=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual float GetHeightFromVector2 (const AZ::Vector2 &position, Sampler sampler=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual float GetHeightFromFloats (float x, float y, Sampler sampler=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual bool GetIsHole (const AZ::Vector3 &position, Sampler sampleFilter=Sampler::BILINEAR) const =0
 
virtual bool GetIsHoleFromVector2 (const AZ::Vector2 &position, Sampler sampleFilter=Sampler::BILINEAR) const =0
 
virtual bool GetIsHoleFromFloats (float x, float y, Sampler sampleFilter=Sampler::BILINEAR) const =0
 
virtual AZ::Vector3 GetNormal (const AZ::Vector3 &position, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual AZ::Vector3 GetNormalFromVector2 (const AZ::Vector2 &position, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual AZ::Vector3 GetNormalFromFloats (float x, float y, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeight (const AZ::Vector3 &position, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromVector2 (const AZ::Vector2 &inPosition, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual SurfaceData::SurfaceTagWeight GetMaxSurfaceWeightFromFloats (float x, float y, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfaceWeights (const AZ::Vector3 &inPosition, SurfaceData::SurfaceTagWeightList &outSurfaceWeights, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfaceWeightsFromVector2 (const AZ::Vector2 &inPosition, SurfaceData::SurfaceTagWeightList &outSurfaceWeights, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfaceWeightsFromFloats (float x, float y, SurfaceData::SurfaceTagWeightList &outSurfaceWeights, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual const char * GetMaxSurfaceName (const AZ::Vector3 &position, Sampler sampleFilter=Sampler::BILINEAR, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfacePoint (const AZ::Vector3 &inPosition, SurfaceData::SurfacePoint &outSurfacePoint, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfacePointFromVector2 (const AZ::Vector2 &inPosition, SurfaceData::SurfacePoint &outSurfacePoint, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual void GetSurfacePointFromFloats (float x, float y, SurfaceData::SurfacePoint &outSurfacePoint, Sampler sampleFilter=Sampler::DEFAULT, bool *terrainExistsPtr=nullptr) const =0
 
virtual void QueryList (const AZStd::span< const AZ::Vector3 > &inPositions, TerrainDataMask requestedData, SurfacePointListFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT) const =0
 
virtual void QueryListOfVector2 (const AZStd::span< const AZ::Vector2 > &inPositions, TerrainDataMask requestedData, SurfacePointListFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT) const =0
 
virtual void QueryRegion (const TerrainQueryRegion &queryRegion, TerrainDataMask requestedData, SurfacePointRegionFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT) const =0
 
virtual EntityContextId GetTerrainRaycastEntityContextId () const =0
 Get the terrain ray cast entity context id.
 
virtual RenderGeometry::RayResult GetClosestIntersection (const RenderGeometry::RayRequest &ray) const =0
 Given a ray, return the closest intersection with terrain.
 
virtual AZStd::shared_ptr< TerrainJobContextQueryListAsync (const AZStd::span< const AZ::Vector3 > &inPositions, TerrainDataMask requestedData, SurfacePointListFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT, AZStd::shared_ptr< QueryAsyncParams > params=nullptr) const =0
 
virtual AZStd::shared_ptr< TerrainJobContextQueryListOfVector2Async (const AZStd::span< const AZ::Vector2 > &inPositions, TerrainDataMask requestedData, SurfacePointListFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT, AZStd::shared_ptr< QueryAsyncParams > params=nullptr) const =0
 
virtual AZStd::shared_ptr< TerrainJobContextQueryRegionAsync (const TerrainQueryRegion &queryRegion, TerrainDataMask requestedData, SurfacePointRegionFillCallback perPositionCallback, Sampler sampleFilter=Sampler::DEFAULT, AZStd::shared_ptr< QueryAsyncParams > params=nullptr) const =0
 

Static Public Member Functions

static void Reflect (AZ::ReflectContext *context)
 
static float GetDefaultTerrainHeight ()
 
static AZ::Vector3 GetDefaultTerrainNormal ()
 

Static Public Attributes

static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single
 
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single
 

Detailed Description

Shared interface for terrain system implementations.

Member Enumeration Documentation

◆ Sampler

Enumerator
CLAMP 

Get the value at the requested location, using terrain sample grid to bilinear filter between sample grid points.

EXACT 

Clamp the input point to the terrain sample grid, then get the height at the given grid location.

DEFAULT 

Directly get the value at the location, regardless of terrain sample grid density.

◆ TerrainDataMask

Flags for selecting the combination of data to query when querying a list or region. The flags determine which subset of data in the SurfacePoint struct will be valid in the FillCallback.

Enumerator
Normals 

Query height data.

SurfaceData 

Query normal data.

All 

Query surface types and weights.

Member Function Documentation

◆ GetHeight()

virtual float AzFramework::Terrain::TerrainDataRequests::GetHeight ( const AZ::Vector3 &  position,
Sampler  sampler = Sampler::BILINEAR,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

Returns terrains height in meters at location x,y. @terrainExistsPtr: Can be nullptr. If != nullptr then, if there's no terrain at location x,y or location x,y is inside a terrain HOLE then *terrainExistsPtr will become false, otherwise *terrainExistsPtr will become true.

◆ GetIsHole()

virtual bool AzFramework::Terrain::TerrainDataRequests::GetIsHole ( const AZ::Vector3 &  position,
Sampler  sampleFilter = Sampler::BILINEAR 
) const
pure virtual

Returns true if there's a hole at location x,y. Also returns true if there's no terrain data at location x,y.

◆ GetMaxSurfaceName()

virtual const char * AzFramework::Terrain::TerrainDataRequests::GetMaxSurfaceName ( const AZ::Vector3 &  position,
Sampler  sampleFilter = Sampler::BILINEAR,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

Convenience function for low level systems that can't do a reverse lookup from Crc to string. Everyone else should use GetMaxSurfaceWeight or GetMaxSurfaceWeightFromFloats. Not available in the behavior context. Returns nullptr if the position is inside a hole or outside of the terrain boundaries.

◆ GetMaxSurfaceWeight()

virtual SurfaceData::SurfaceTagWeight AzFramework::Terrain::TerrainDataRequests::GetMaxSurfaceWeight ( const AZ::Vector3 &  position,
Sampler  sampleFilter = Sampler::BILINEAR,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

Given an XY coordinate, return the max surface type and weight. @terrainExists: Can be nullptr. If != nullptr then, if there's no terrain at location x,y or location x,y is inside a terrain HOLE then *terrainExistsPtr will be set to false, otherwise *terrainExistsPtr will be set to true.

◆ GetNormal()

virtual AZ::Vector3 AzFramework::Terrain::TerrainDataRequests::GetNormal ( const AZ::Vector3 &  position,
Sampler  sampleFilter = Sampler::BILINEAR,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

@terrainExists: Can be nullptr. If != nullptr then, if there's no terrain at location x,y or location x,y is inside a terrain HOLE then *terrainExistsPtr will be set to false, otherwise *terrainExistsPtr will be set to true.

◆ GetSurfacePoint()

virtual void AzFramework::Terrain::TerrainDataRequests::GetSurfacePoint ( const AZ::Vector3 &  inPosition,
SurfaceData::SurfacePoint outSurfacePoint,
Sampler  sampleFilter = Sampler::DEFAULT,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

Given an XY coordinate, return all terrain information at that location. The Vector3 input position version is defined to ignore the input Z value.

◆ GetSurfaceWeights()

virtual void AzFramework::Terrain::TerrainDataRequests::GetSurfaceWeights ( const AZ::Vector3 &  inPosition,
SurfaceData::SurfaceTagWeightList &  outSurfaceWeights,
Sampler  sampleFilter = Sampler::DEFAULT,
bool *  terrainExistsPtr = nullptr 
) const
pure virtual

Given an XY coordinate, return the set of surface types and weights. The Vector3 input position version is defined to ignore the input Z value.

◆ QueryList()

virtual void AzFramework::Terrain::TerrainDataRequests::QueryList ( const AZStd::span< const AZ::Vector3 > &  inPositions,
TerrainDataMask  requestedData,
SurfacePointListFillCallback  perPositionCallback,
Sampler  sampleFilter = Sampler::DEFAULT 
) const
pure virtual

Given a list of XY coordinates, call the provided callback function with surface data corresponding to each XY coordinate in the list.

◆ QueryListAsync()

virtual AZStd::shared_ptr< TerrainJobContext > AzFramework::Terrain::TerrainDataRequests::QueryListAsync ( const AZStd::span< const AZ::Vector3 > &  inPositions,
TerrainDataMask  requestedData,
SurfacePointListFillCallback  perPositionCallback,
Sampler  sampleFilter = Sampler::DEFAULT,
AZStd::shared_ptr< QueryAsyncParams params = nullptr 
) const
pure virtual

Asynchronous versions of the various 'Query*' API functions declared above. It's the responsibility of the caller to ensure all callbacks are thread-safe.

◆ QueryRegion()

virtual void AzFramework::Terrain::TerrainDataRequests::QueryRegion ( const TerrainQueryRegion queryRegion,
TerrainDataMask  requestedData,
SurfacePointRegionFillCallback  perPositionCallback,
Sampler  sampleFilter = Sampler::DEFAULT 
) const
pure virtual

Given a terrain query region, call the provided callback function with terrain data corresponding to the coordinates in the region.


The documentation for this class was generated from the following file: