UnigineEditor
Interface Overview
Assets Workflow
Settings and Preferences
Working With Projects
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
Extending Editor Functionality
FAQ
Programming
Fundamentals
Setting Up Development Environment
Usage Examples
UnigineScript
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
Rendering-Related Classes

Unigine::LandscapeFetch Class

Header: #include <UnigineObjects.h>

This class is used to fetch data of the Landscape Terrain Object at a certain point (e.g. a height request) or check for an intersection with a traced line. The following performance optimizations are available:

  • For each request you can engage or disengage certain data types (albedo, heights, masks, etc.). When the data type is engaged, you can obtain information via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
  • Both fetch and intersection requests can be performed asynchronously when an instant result is not required.

The workflow is as follows:

  1. Create a new LandscapeFetch object instance.
  2. Set necessary parameters (e.g. which data layers are to be used, whether to enable holes or not, etc.).
  3. To get terrain data for a certain point call the fetchForce() method providing coordinates for the desired point.
    Notice
    You can also fetch terrain data asynchronously via the fetchAsync() method.
  4. To find an intersection of a traced line with the terrain call either the intersectionForce() method or the intersectionAsync() method, if you want to perform an asynchronous request.

Usage Example#

Source code (C++)
// creating a fetch object and setting necessary parameters
LandscapeFetchPtr landscape_fetch = LandscapeFetch::create();
landscape_fetch->setUses(0);
landscape_fetch->setUsesHeight(true);
landscape_fetch->setHolesEnabled(true);
landscape_fetch->setBicubicFilterHeight(true);

// ...

// getting terrain data for a point at (100, 100) and printing the height value
if (landscape_fetch->fetchForce(Vec2(100, 100)))
	Log::message("Terrain height at the specified point is: %f", Scalar(landscape_fetch->getHeight()));

Asynchronous Operations Example#

Source code (C++)
// creating a fetch object and setting necessary parameters
LandscapeFetchPtr landscape_fetch = LandscapeFetch::create();
landscape_fetch->setUses(0);
landscape_fetch->setUsesHeight(true);
landscape_fetch->setHolesEnabled(true);
landscape_fetch->setBicubicFilterHeight(true);

// ...

// making an asynchronous fetch request for a point at (100, 100)
landscape_fetch->fetchAsync(Vec2(2.05f, 2.05f));

// ...

// checking if our asynchronous fetch request is completed and printing the height value
if (landscape_fetch->isAsyncCompleted()) {
		Log::message("Terrain height at the specified point is: %f", Scalar(landscape_fetch->getHeight()));
}

LandscapeFetch Class

Members


LandscapeFetch ( ) #

The LandscapeFetch constructor.

Math::Vec3 getPosition ( ) #

Returns the coordinates of the fetch/intersection point.

Return value

Fetch/intersection point coordinates as a three-component vector.

float getHeight ( ) #

Returns the height value at the point.

Return value

Height value at the point.

Math::vec3 getNormal ( ) #

Returns normal vector coordinates at the point.
Notice
To get valid normal information via this method, engage normal data for the fetch/intersection request.

Return value

Normal vector coordinates at the point.

Math::vec3 getTangent ( ) #

Returns tangent vector coordinates at the point.
Notice
To get valid tangent information via this method, engage normal data for the fetch/intersection request.

Return value

Tangent vector coordinates at the point.

Math::vec3 getBinormal ( ) #

Returns binormal vector coordinates at the point.
Notice
To get valid binormal information via this method, engage normal data for the fetch/intersection request.

Return value

Binormal vector coordinates at the point.

Math::vec4 getAlbedo ( ) #

Returns albedo color information at the point.
Notice
To get valid albedo color information via this method, engage albedo data for the fetch/intersection request.

Return value

Albedo color at the point as a 4 component vector (R, G, B, A).

bool isIntersection ( ) #

Returns a value indicating if an intersection was detected.

Return value

true if an intersection was detected; otherwise, false.

float getMask ( int num ) #

Returns information stored for the point in the detail mask with the specified number.
Notice
To get valid detail mask information via this method, engage mask data for the fetch/intersection request.

Arguments

  • int num - Number of the detail mask in the [0; 19] range.

Return value

Value for the point stored in the detail mask with the specified number.

void setUses ( int uses ) #

Sets multiple flags engaging/disengaging certain data types for the fetch/intersection request.

Arguments

  • int uses - Combination of data engagement flags to be set.

int getUses ( ) #

Returns the current state of flags engaging/disengaging certain data types for the fetch/intersection request.

Return value

Current combination of data engagement flags.

void setUsesHeight ( bool height ) #

Sets a value indicating if heights data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point). This option is enabled by default.

Arguments

  • bool height - true to engage height data in the fetch/intersection request, false - to disengage.

bool isUsesHeight ( ) #

Returns a value indicating if heights data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point). This option is enabled by default.

Return value

true if heights data is engaged in the fetch/intersection request; otherwise, false.

void setUsesNormal ( bool normal ) #

Sets a value indicating if normals data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get normal, tangent and binormal information for the point.

Arguments

  • bool normal - true to engage normals data in the fetch/intersection request, false - to disengage.

bool isUsesNormal ( ) #

Returns a value indicating if normals data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get normal, tangent and binormal information for the point.

Return value

true if normals data is engaged in the fetch/intersection request; otherwise, false.

void setUsesAlbedo ( bool albedo ) #

Sets a value indicating if albedo data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get albedo information for the point.

Arguments

  • bool albedo - true to engage albedo data in the fetch/intersection request, false - to disengage.

bool isUsesAlbedo ( ) #

Returns a value indicating if albedo data is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get albedo information for the point.

Return value

true if albedo data is engaged in the fetch/intersection request; otherwise, false.

void setUsesMask ( int num, bool value ) #

Sets a value indicating if data of the specified detail mask is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get detail mask data for the point.

Arguments

  • int num - Detail mask number in the [0; 19] range.
  • bool value - true to engage data of the specified detail mask in the fetch/intersection request, false - to disengage.

bool isUsesMask ( int num ) #

Returns a value indicating if data of the specified detail mask is engaged in the fetch/intersection request. When the data type is engaged, you can obtain it via the corresponding get() method. Disengaging unnecessary data when performing requests saves some performance (e.g., you can engage albedo data only if you need only color information at a certain point).
Notice
Enable this option to get detail mask data for the point.

Arguments

  • int num - Detail mask number in the [0; 19] range.

Return value

true if data of the specified detail mask is engaged in the fetch/intersection request; otherwise, false.

void setBicubicFilterHeight ( bool height ) #

Sets a value indicating if bicubic filtering for height texture is enabled.
Notice
For best accuracy this setting should match the same setting for the Object Landscape Terrain.

Arguments

  • bool height - true to enable bicubic filtering for height texture, false - to disable it.

bool isBicubicFilterHeight ( ) #

Returns a value indicating if bicubic filtering for height texture is enabled.
Notice
For best accuracy this setting should match the same setting for the Object Landscape Terrain.

Return value

true if bicubic filtering for height texture is enabled; otherwise, false.

void setBicubicFilterNormal ( bool normal ) #

Sets a value indicating if bicubic filtering for normals texture is enabled.
Notice
For best accuracy this setting should match the same setting for the Object Landscape Terrain.

Arguments

  • bool normal - true to enable bicubic filtering for normals texture, false - to disable it.

bool isBicubicFilterNormal ( ) #

Returns a value indicating if bicubic filtering for normals texture is enabled.
Notice
For best accuracy this setting should match the same setting for the Object Landscape Terrain.

Return value

true if bicubic filtering for normals texture is enabled is enabled; otherwise, false.

void setHolesEnabled ( bool albedo ) #

Sets a value indicating if checking for terrain holes in the fetch/intersection request is enabled. This option is enabled by default. When disabled terrain holes created using decals are ignored.

Arguments

  • bool albedo - true to enable checking for terrain holes in the fetch/intersection request, false - to disable it.

bool isHolesEnabled ( ) #

Returns a value indicating if checking for terrain holes in the fetch/intersection request is enabled. This option is enabled by default. When disabled terrain holes created using decals are ignored.

Return value

true if checking for terrain holes in the fetch/intersection request is enabled; otherwise, false.

void setPrecisionBegin ( float begin ) #

Sets a new start precision value to be used for intersection detection requested by intersectionForce() and intersectionAsync() methods. Intersections are detected with a variable precision, starting from lower value and ending up with a higher one.
Notice
Normally there's no need to modify this value. In case of intersection detection errors you can try tweaking start and end precision values for optimum balance, but be careful as it may significantly affect performance and accuracy.

Arguments

  • float begin - Start precision for intersection detection as a fraction of maximum precision in the [0; 1] range. The default value is 0.5f. Maximum precision is determined by the Engine on the basis of the data of your Landscape Terrain.

float getPrecisionBegin ( ) #

Returns the current start precision value used for intersection detection requested by intersectionForce() and intersectionAsync() methods. Intersections are detected with a variable precision, starting from lower value and ending up with a higher one.
Notice
Normally there's no need to modify this value. In case of intersection detection errors you can try tweaking start and end precision values for optimum balance, but be careful as it may significantly affect performance and accuracy.

Return value

Start precision for intersection detection as a fraction of maximum precision in the [0; 1] range. The default value is 0.5f. Maximum precision is determined by the Engine on the basis of the data of your Landscape Terrain.

void setPrecisionEnd ( float end ) #

Sets a new end precision value to be used for intersection detection requested by intersectionForce() and intersectionAsync() methods. Intersections are detected with a variable precision, starting from lower value and ending up with a higher one.
Notice
Normally there's no need to modify this value. In case of intersection detection errors you can try tweaking start and end precision values for optimum balance, but be careful as it may significantly affect performance and accuracy.

Arguments

  • float end - End precision for intersection detection as a fraction of maximum precision in the [0; 1] range. The default value is 1.0f. Maximum precision is determined by the Engine on the basis of the data of your Landscape Terrain.

float getPrecisionEnd ( ) #

Returns the current end precision value used for intersection detection requested by intersectionForce() and intersectionAsync() methods. Intersections are detected with a variable precision, starting from lower value and ending up with a higher one.
Notice
Normally there's no need to modify this value. In case of intersection detection errors you can try tweaking start and end precision values for optimum balance, but be careful as it may significantly affect performance and accuracy.

Return value

End precision for intersection detection as a fraction of maximum precision in the [0; 1] range. The default value is 1.0f. Maximum precision is determined by the Engine on the basis of the data of your Landscape Terrain.

bool fetchForce ( const Math::Vec2 & position ) #

Fetches terrain data for the point with the specified coordinates in forced mode. You can use the fetchAsync() method to reduce load, when an instant result is not required.

Arguments

  • const Math::Vec2 & position - Two-component vector specifying point coordinates along X and Y axes.

Return value

true if terrain data was successfully obtained for the specified point; otherwise, false.

bool intersectionForce ( const Math::Vec3 & p0, const Math::Vec3 & p1 ) #

Performs tracing along the line from the p0 point to the p1 point to find an intersection with the terrain in forced mode. You can use the intersectionAsync() method to reduce load, when an instant result is not required.

Arguments

  • const Math::Vec3 & p0 - Line start point coordinates.
  • const Math::Vec3 & p1 - Line end point coordinates.

Return value

true if an intersection with the terrain was found; otherwise, false.

void fetchAsync ( const Math::Vec2 & position, bool critical = false ) #

Fetches terrain data for the point with the specified coordinates in asynchronous mode (the corresponding task shall be put to the queue, to wait until the result is obtained use the wait() method). For an instant result use the fetchForce() method.

Arguments

  • const Math::Vec2 & position - Two-component vector specifying point coordinates along X and Y axes.
  • bool critical - true to set high priority for the fetch task, false - to set normal priority.

void intersectionAsync ( const Math::Vec3 & p0, const Math::Vec3 & p1, bool critical = false ) #

Performs tracing along the line from the p0 point to the p1 point to find an intersection with the terrain in asynchronous mode (the corresponding task shall be put to the queue, to wait until the result is obtained use the wait() method). For an instant result use the intersectionForce() method.

Arguments

  • const Math::Vec3 & p0 - Line start point coordinates.
  • const Math::Vec3 & p1 - Line end point coordinates.
  • bool critical - true to set high priority for the intersection task, false - to set normal priority.

static void fetchForce ( const Vector< Ptr<LandscapeFetch> > & fetches, const Math::Vec2 & position ) #

Fetches terrain data for the point with the specified coordinates in forced mode. You can use the fetchAsync() method to reduce load, when an instant result is not required.

Arguments

  • const Vector< Ptr<LandscapeFetch> > & fetches - List of fetch requests to be completed.
  • const Math::Vec2 & position - Two-component vector specifying point coordinates along X and Y axes.

static void intersectionForce ( const Vector< Ptr<LandscapeFetch> > & fetches, const Math::Vec3 & p0, const Math::Vec3 & p1 ) #

Performs tracing along the line from the p0 point to the p1 point to find an intersection with the terrain in forced mode. You can use the intersectionAsync() method to reduce load, when an instant result is not required.

Arguments

  • const Vector< Ptr<LandscapeFetch> > & fetches - List of fetch requests to be completed.
  • const Math::Vec3 & p0 - Line start point coordinates.
  • const Math::Vec3 & p1 - Line end point coordinates.

static void fetchAsync ( const Vector< Ptr<LandscapeFetch> > & fetches, const Math::Vec2 & position, bool critical = false ) #

Fetches terrain data for the point with the specified coordinates in asynchronous mode (the corresponding task shall be put to the queue, to wait until the result is obtained use the wait() method). For an instant result use the fetchForce() method.

Arguments

  • const Vector< Ptr<LandscapeFetch> > & fetches - List of fetch requests to be completed.
  • const Math::Vec2 & position - Two-component vector specifying point coordinates along X and Y axes.
  • bool critical - true to set high priority for the fetch task, false - to set normal priority.

static void intersectionAsync ( const Vector< Ptr<LandscapeFetch> > & fetches, const Math::Vec3 & p0, const Math::Vec3 & p1, bool critical = false ) #

Performs tracing along the line from the p0 point to the p1 point to find an intersection with the terrain in asynchronous mode (the corresponding task shall be put to the queue, to wait until the result is obtained use the wait() method). For an instant result use the intersectionForce() method.

Arguments

  • const Vector< Ptr<LandscapeFetch> > & fetches - List of fetch requests to be completed.
  • const Math::Vec3 & p0 - Line start point coordinates.
  • const Math::Vec3 & p1 - Line end point coordinates.
  • bool critical - true to set high priority for the intersection task, false - to set normal priority.

void wait ( ) #

Waits for completion of the fetch operation. As the operation is completed you can obtain necessary data via get*() methods.

static void wait ( const Vector< Ptr<LandscapeFetch> > & fetches ) #

Waits for completion of the specified fetch operations. As the operations are completed you can obtain necessary data via get*() methods.

Arguments

  • const Vector< Ptr<LandscapeFetch> > & fetches - List of fetch requests to be completed.

bool isAsyncCompleted ( ) #

Returns a value indicating if async operation is completed. As the operation is completed you can obtain necessary data via get*() methods.

Return value

true if async operation is completed; otherwise, false.

void * addStartCallback ( Unigine::CallbackBase * func ) #

Adds a callback function to be called on beginning of the fetch process. The signature of the callback function must be as follows:
Source code (C++)
void fetch_start_callback();

You can set a callback function as follows:

Source code (C++)
addStartCallback(MakeCallback(fetch_start_callback));

Example: Setting a fetch start callback function for a certain class:

Source code (C++)
// callback function implementing certain actions to be performed on beginning of the fetch process
void FetchStart()
{
	// insert your specific handling code here
}

// ...
virtual int AppWorldLogic::init()
{
	// setting the FetchStart() function to handle beginning of the fetch process
	Landscape::addStartCallback(MakeCallback(&FetchStart));
}

Arguments

  • Unigine::CallbackBase * func - Callback pointer.

Return value

ID of the last added fetch start callback, if the callback was added successfully; otherwise, nullptr. This ID can be used to remove this callback when necessary.

bool removeStartCallback ( void * id ) #

Removes the specified callback from the list of file fetch start callbacks.

Arguments

  • void * id - Start callback ID obtained when adding it.

Return value

True if the fetch start callback with the given ID was removed successfully; otherwise false.

void clearStartCallback ( ) #

Clears all added fetch start callbacks.

void * addEndCallback ( Unigine::CallbackBase * func ) #

Adds a callback function to be called on fetch completion. The signature of the callback function must be as follows:
Source code (C++)
void fetch_end_callback();

You can set a callback function as follows:

Source code (C++)
addEndCallback(MakeCallback(fetch_end_callback));

Example: Setting a fetch completion callback function for a certain class:

Source code (C++)
// callback function implementing certain actions to be performed on fetch completion
void FetchEnd()
{
	// insert your specific handling code here
}

// ...
virtual int AppWorldLogic::init()
{
	// setting the FetchEnd() function to handle fetch completion
	Landscape::addEndCallback(MakeCallback(&FetchEnd));
}

Arguments

  • Unigine::CallbackBase * func - Callback pointer.

Return value

ID of the last added fetch end callback, if the callback was added successfully; otherwise, nullptr. This ID can be used to remove this callback when necessary.

bool removeEndCallback ( void * id ) #

Removes the specified callback from the list of file fetch end callbacks.

Arguments

  • void * id - End callback ID obtained when adding it.

Return value

True if the fetch end callback with the given ID was removed successfully; otherwise false.

void clearEndCallback ( ) #

Clears all added fetch end callbacks.
Last update: 2019-12-04