23 static const float RC_PI = 3.14159265f;
258 unsigned int smin : 13;
259 unsigned int smax : 13;
260 unsigned int area : 6;
290 unsigned int index : 24;
291 unsigned int count : 8;
299 unsigned int con : 24;
555 template<
class T>
inline void rcSwap(T& a, T& b) { T t = a; a = b; b = t; }
561 template<
class T>
inline T
rcMin(T a, T b) {
return a < b ? a : b; }
567 template<
class T>
inline T
rcMax(T a, T b) {
return a > b ? a : b; }
572 template<
class T>
inline T
rcAbs(T a) {
return a < 0 ? -a : a; }
577 template<
class T>
inline T
rcSqr(T a) {
return a*a; }
584 template<
class T>
inline T
rcClamp(T v, T mn, T mx) {
return v < mn ? mn : (v > mx ? mx : v); }
599 inline void rcVcross(
float* dest,
const float* v1,
const float* v2)
601 dest[0] = v1[1]*v2[2] - v1[2]*v2[1];
602 dest[1] = v1[2]*v2[0] - v1[0]*v2[2];
603 dest[2] = v1[0]*v2[1] - v1[1]*v2[0];
610 inline float rcVdot(
const float* v1,
const float* v2)
612 return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
620 inline void rcVmad(
float* dest,
const float* v1,
const float* v2,
const float s)
622 dest[0] = v1[0]+v2[0]*s;
623 dest[1] = v1[1]+v2[1]*s;
624 dest[2] = v1[2]+v2[2]*s;
631 inline void rcVadd(
float* dest,
const float* v1,
const float* v2)
633 dest[0] = v1[0]+v2[0];
634 dest[1] = v1[1]+v2[1];
635 dest[2] = v1[2]+v2[2];
642 inline void rcVsub(
float* dest,
const float* v1,
const float* v2)
644 dest[0] = v1[0]-v2[0];
645 dest[1] = v1[1]-v2[1];
646 dest[2] = v1[2]-v2[2];
652 inline void rcVmin(
float* mn,
const float* v)
654 mn[0] =
rcMin(mn[0], v[0]);
655 mn[1] =
rcMin(mn[1], v[1]);
656 mn[2] =
rcMin(mn[2], v[2]);
662 inline void rcVmax(
float* mx,
const float* v)
664 mx[0] =
rcMax(mx[0], v[0]);
665 mx[1] =
rcMax(mx[1], v[1]);
666 mx[2] =
rcMax(mx[2], v[2]);
672 inline void rcVcopy(
float* dest,
const float* v)
683 inline float rcVdist(
const float* v1,
const float* v2)
685 float dx = v2[0] - v1[0];
686 float dy = v2[1] - v1[1];
687 float dz = v2[2] - v1[2];
688 return rcSqrt(dx*dx + dy*dy + dz*dz);
697 float dx = v2[0] - v1[0];
698 float dy = v2[1] - v1[1];
699 float dz = v2[2] - v1[2];
700 return dx*dx + dy*dy + dz*dz;
724 void rcCalcBounds(
const float* verts,
int nv,
float* bmin,
float* bmax);
733 void rcCalcGridSize(
const float* bmin,
const float* bmax,
float cs,
int* w,
int* h);
746 const float* bmin,
const float* bmax,
761 const int* tris,
int nt,
unsigned char* areas);
774 const int* tris,
int nt,
unsigned char* areas);
789 const unsigned short smin,
const unsigned short smax,
790 const unsigned char area,
const int flagMergeThr);
804 const int flagMergeThr = 1);
818 const int* tris,
const unsigned char* areas,
const int nt,
833 const unsigned short* tris,
const unsigned char* areas,
const int nt,
935 const float hmin,
const float hmax,
unsigned char areaId,
945 int rcOffsetPoly(
const float* verts,
const int nverts,
const float offset,
946 float* outVerts,
const int maxOutVerts);
957 const float r,
const float h,
unsigned char areaId,
979 const int borderSize,
const int minRegionArea,
const int mergeRegionArea);
993 const int borderSize,
const int minRegionArea,
const int mergeRegionArea);
1002 const unsigned int shift = (
unsigned int)dir*6;
1003 unsigned int con = s.
con;
1004 s.
con = (con & ~(0x3f << shift)) | (((
unsigned int)i & 0x3f) << shift);
1014 const unsigned int shift = (
unsigned int)dir*6;
1015 return (s.
con >> shift) & 0x3f;
1024 const int offset[4] = { -1, 0, 1, 0, };
1025 return offset[dir&0x03];
1034 const int offset[4] = { 0, 1, 0, -1 };
1035 return offset[dir&0x03];
1054 const int borderSize,
const int walkableHeight,
1069 const float maxError,
const int maxEdgeLen,
1102 const float sampleDist,
const float sampleMaxError,
float rcSqrt(float x)
Returns the square root of the value.
bool rcBuildPolyMeshDetail(rcContext *ctx, const rcPolyMesh &mesh, const rcCompactHeightfield &chf, const float sampleDist, const float sampleMaxError, rcPolyMeshDetail &dmesh)
Builds a detail mesh from the provided polygon mesh.
int getAccumulatedTime(const rcTimerLabel label) const
Returns the total accumulated time of the specified performance timer.
float rcVdistSqr(const float *v1, const float *v2)
Returns the square of the distance between two points.
unsigned char * areas
The area id assigned to each polygon. [Length: maxpolys].
The maximum number of timers. (Used for iterating timers.)
A dynamic heightfield representing obstructed space.
rcHeightfieldLayer * layers
The layers in the set. [Size: nlayers].
int height
The height of the heightfield. (Along the z-axis in cell units.)
rcCompactHeightfield * rcAllocCompactHeightfield()
Allocates a compact heightfield object using the Recast allocator.
The total time to build the contours. (See: rcBuildContours)
float detailSampleMaxError
The maximum distance the detail mesh surface should deviate from heightfield data. (For height detail only.) [Limit: >=0] [Units: wu].
void rcFreeCompactHeightfield(rcCompactHeightfield *chf)
Frees the specified compact heightfield object using the Recast allocator.
int nverts
The number of vertices.
bool m_logEnabled
True if logging is enabled.
int width
The width of the heightfield. (Along the x-axis in cell units.)
Represents a set of heightfield layers.
int borderSize
The AABB border size used during the build of the field. (See: rcConfig::borderSize) ...
T rcAbs(T a)
Returns the absolute value.
Tessellate edges between areas during contour simplification.
int walkableRadius
The distance to erode/shrink the walkable area of the heightfield away from obstructions. [Limit: >=0] [Units: vx].
unsigned short maxRegions
The maximum region id of any span within the field.
Represents a span of unobstructed space within a compact heightfield.
void rcFreeHeightfieldLayerSet(rcHeightfieldLayerSet *lset)
Frees the specified heightfield layer set using the Recast allocator.
int nrverts
The number of vertices in the raw contour.
rcLogCategory
Recast log categories.
The time to build the distances of the distance field. (See: rcBuildDistanceField) ...
int hmax
The maximum height bounds of usable data. (Along the y-axis.)
Tessellate solid (impassable) edges during contour simplification.
void resetTimers()
Clears all peformance timers. (Resets all to unused.)
void enableLog(bool state)
Enables or disables logging.
Provides an interface for optional logging and performance tracking of the Recast build process...
unsigned short * dist
Array containing border distance data. [Size: spanCount].
void rcSwap(T &a, T &b)
Swaps the values of the two parameters.
static const int RC_NOT_CONNECTED
The value returned by rcGetCon if the specified direction is not connected to another span...
float ch
The height of each cell. (The minimum increment along the y-axis.)
The user defined total time of the build.
bool rcCreateHeightfield(rcContext *ctx, rcHeightfield &hf, int width, int height, const float *bmin, const float *bmax, float cs, float ch)
Initializes a new heightfield.
int tileSize
The width/height size of tile's on the xz-plane. [Limit: >= 0] [Units: vx].
unsigned short reg
The id of the region the span belongs to. (Or zero if not in a region.)
int ntris
The number of triangles in tris.
The time to rasterize the triangles. (See: rcRasterizeTriangle)
int nverts
The number of vertices in the simplified contour.
void rcVnormalize(float *v)
Normalizes the vector.
unsigned char * heights
The heightfield. [Size: (width - borderSize*2) * (h - borderSize*2)].
bool m_timerEnabled
True if the performance timers are enabled.
rcCompactCell * cells
Array of cells. [Size: width*height].
int rcGetHeightFieldSpanCount(rcContext *ctx, rcHeightfield &hf)
Returns the number of spans contained in the specified heightfield.
int rcGetDirOffsetY(int dir)
Gets the standard height (z-axis) offset for the specified direction.
int walkableClimb
Maximum ledge height that is considered to still be traversable. [Limit: >=0] [Units: vx]...
The time to merge polygon meshes. (See: rcMergePolyMeshes)
void rcVadd(float *dest, const float *v1, const float *v2)
Performs a vector addition. (v1 + v2)
unsigned short y
The lower extent of the span. (Measured from the heightfield's base.)
void rcAddSpan(rcContext *ctx, rcHeightfield &hf, const int x, const int y, const unsigned short smin, const unsigned short smax, const unsigned char area, const int flagMergeThr)
Adds a span to the specified heightfield.
rcCompactSpan * spans
Array of spans. [Size: spanCount].
Specifies a configuration to use when performing Recast builds.
void resetLog()
Clears all log entries.
unsigned short * verts
The mesh vertices. [Form: (x, y, z) * nverts].
float * verts
The mesh vertices. [Size: 3*nverts].
int * rverts
Raw contour vertex and connection data. [Size: 4 * nrverts].
T rcMin(T a, T b)
Returns the minimum of two values.
float ch
The height of each cell. (The minimum increment along the y-axis.)
int rcGetCon(const rcCompactSpan &s, int dir)
Gets neighbor connection data for the specified direction.
Represents a span in a heightfield.
void rcVmin(float *mn, const float *v)
Selects the minimum value of each element from the specified vectors.
rcContour * conts
An array of the contours in the set. [Size: nconts].
virtual void doStopTimer(const rcTimerLabel)
Stops the specified performance timer.
float cs
The size of each cell. (On the xz-plane.)
int height
The height of the set. (Along the z-axis in cell units.)
Provides information on the content of a cell column in a compact heightfield.
void rcRasterizeTriangle(rcContext *ctx, const float *v0, const float *v1, const float *v2, const unsigned char area, rcHeightfield &solid, const int flagMergeThr=1)
Rasterizes a triangle into the specified heightfield.
void rcSetCon(rcCompactSpan &s, int dir, int i)
Sets the neighbor connection data for the specified direction.
int mergeRegionArea
Any regions with a span count smaller than this value will, if possible, be merged with larger region...
bool rcMergePolyMeshes(rcContext *ctx, rcPolyMesh **meshes, const int nmeshes, rcPolyMesh &mesh)
Merges multiple polygon meshes into a single mesh.
The time to build the polygon mesh detail. (See: rcBuildPolyMeshDetail)
void rcFreeHeightField(rcHeightfield *hf)
Frees the specified heightfield object using the Recast allocator.
The time to trace the boundaries of the contours. (See: rcBuildContours)
int nconts
The number of contours in the set.
int * verts
Simplified contour vertex and connection data. [Size: 4 * nverts].
int nmeshes
The number of sub-meshes defined by meshes.
int borderSize
The size of the non-navigable border around the heightfield. [Limit: >=0] [Units: vx]...
void rcFilterLedgeSpans(rcContext *ctx, const int walkableHeight, const int walkableClimb, rcHeightfield &solid)
Marks spans that are ledges as not-walkable.
float detailSampleDist
Sets the sampling distance to use when generating the detail mesh. (For height detail only...
void rcCalcGridSize(const float *bmin, const float *bmax, float cs, int *w, int *h)
Calculates the grid size based on the bounding box and grid cell size.
Represents a simple, non-overlapping contour in field space.
unsigned char * areas
Area ids. [Size: Same as heights].
int maxEdgeLen
The maximum allowed length for contour edges along the border of the mesh. [Limit: >=0] [Units: vx]...
bool rcCopyPolyMesh(rcContext *ctx, const rcPolyMesh &src, rcPolyMesh &dst)
Copies the poly mesh data from src to dst.
void rcFilterLowHangingWalkableObstacles(rcContext *ctx, const int walkableClimb, rcHeightfield &solid)
Marks non-walkable spans as walkable if their maximum is within walkableClimp of a walkable neihbor...
void rcFilterWalkableLowHeightSpans(rcContext *ctx, int walkableHeight, rcHeightfield &solid)
Marks walkable spans as not walkable if the clearence above the span is less than the specified heigh...
rcSpan * freelist
The next free span.
static const int RC_SPANS_PER_POOL
The number of spans allocated per span spool.
int walkableHeight
Minimum floor to 'ceiling' height that will still allow the floor area to be considered walkable...
int height
The height of the heightfield. (Along the z-axis in cell units.)
void rcMarkWalkableTriangles(rcContext *ctx, const float walkableSlopeAngle, const float *verts, int nv, const int *tris, int nt, unsigned char *areas)
Sets the area id of all triangles with a slope below the specified value to RC_WALKABLE_AREA.
static const int RC_SPAN_HEIGHT_BITS
Defines the number of bits allocated to rcSpan::smin and rcSpan::smax.
The time to mark a box area. (See: rcMarkBoxArea)
rcContourSet * rcAllocContourSet()
Allocates a contour set object using the Recast allocator.
static const int RC_SPAN_MAX_HEIGHT
Defines the maximum value for rcSpan::smin and rcSpan::smax.
A compact, static heightfield representing unobstructed space.
unsigned int con
Packed neighbor connection data.
The time to blur the distance field. (See: rcBuildDistanceField)
virtual int doGetAccumulatedTime(const rcTimerLabel) const
Returns the total accumulated time of the specified performance timer.
Represents a group of related contours.
The time to build heightfield layers. (See: rcBuildHeightfieldLayers)
unsigned char * tris
The mesh triangles. [Size: 4*ntris].
float rcVdist(const float *v1, const float *v2)
Returns the distance between two points.
int maxx
The maximum x-bounds of usable data.
unsigned char area
The area id of the contour.
float maxSimplificationError
The maximum distance a simplfied contour's border edges should deviate the original raw contour...
bool rcMedianFilterWalkableArea(rcContext *ctx, rcCompactHeightfield &chf)
Applies a median filter to walkable area types (based on area id), removing noise.
int rcGetDirOffsetX(int dir)
Gets the standard width (x-axis) offset for the specified direction.
void rcMarkBoxArea(rcContext *ctx, const float *bmin, const float *bmax, unsigned char areaId, rcCompactHeightfield &chf)
Applies an area id to all spans within the specified bounding box. (AABB)
float cs
The size of each cell. (On the xz-plane.)
A memory pool used for quick allocation of spans within a heightfield.
static const unsigned short RC_MESH_NULL_IDX
An value which indicates an invalid index within a mesh.
float ch
The y-axis cell size to use for fields. [Limit: > 0] [Units: wu].
The total time to apply the watershed algorithm. (See: rcBuildRegions)
Represents a polygon mesh suitable for use in building a navigation mesh.
The total time to build the distance field. (See: rcBuildDistanceField)
rcPolyMeshDetail * rcAllocPolyMeshDetail()
Allocates a detail mesh object using the Recast allocator.
static const int RC_BORDER_VERTEX
Border vertex flag. If a region ID has this bit set, then the associated element lies on a tile borde...
virtual void doStartTimer(const rcTimerLabel)
Starts the specified performance timer.
void rcCalcBounds(const float *verts, int nv, float *bmin, float *bmax)
Calculates the bounding box of an array of vertices.
rcHeightfield * rcAllocHeightfield()
Allocates a heightfield object using the Recast allocator.
int minx
The minimum x-bounds of usable data.
The time to filter low height spans. (See: rcFilterWalkableLowHeightSpans)
void rcVmad(float *dest, const float *v1, const float *v2, const float s)
Performs a scaled vector addition. (v1 + (v2 * s))
The time to erode the walkable area. (See: rcErodeWalkableArea)
unsigned char * areas
Array containing area id data. [Size: spanCount].
static const unsigned char RC_WALKABLE_AREA
The default area id used to indicate a walkable polygon. This is also the maximum allowed area id...
float ch
The height of each cell. (The minimum increment along the y-axis.)
rcTimerLabel
Recast performance timer categories.
int width
The width of the heightfield. (Along the x-axis in cell units.)
The time to build the compact heightfield. (See: rcBuildCompactHeightfield)
int maxVertsPerPoly
The maximum number of vertices allowed for polygons generated during the contour to polygon conversio...
unsigned short reg
The region id of the contour.
static const int RC_CONTOUR_REG_MASK
Applied to the region id field of contour vertices in order to extract the region id...
rcContext(bool state=true)
Contructor.
void rcClearUnwalkableTriangles(rcContext *ctx, const float walkableSlopeAngle, const float *verts, int nv, const int *tris, int nt, unsigned char *areas)
Sets the area id of all triangles with a slope greater than or equal to the specified value to RC_NUL...
bool rcBuildHeightfieldLayers(rcContext *ctx, rcCompactHeightfield &chf, const int borderSize, const int walkableHeight, rcHeightfieldLayerSet &lset)
Builds a layer set from the specified compact heightfield.
The total time to build the regions. (See: rcBuildRegions, rcBuildRegionsMonotone) ...
void rcVcopy(float *dest, const float *v)
Performs a vector copy.
float cs
The size of each cell. (On the xz-plane.)
void startTimer(const rcTimerLabel label)
Starts the specified performance timer.
void rcMarkCylinderArea(rcContext *ctx, const float *pos, const float r, const float h, unsigned char areaId, rcCompactHeightfield &chf)
Applies the area id to all spans within the specified cylinder.
void rcVsub(float *dest, const float *v1, const float *v2)
Performs a vector subtraction. (v1 - v2)
float walkableSlopeAngle
The maximum slope that is considered walkable. [Limits: 0 <= value < 90] [Units: Degrees].
rcPolyMesh * rcAllocPolyMesh()
Allocates a polygon mesh object using the Recast allocator.
int spanCount
The number of spans in the heightfield.
int walkableHeight
The walkable height used during the build of the field. (See: rcConfig::walkableHeight) ...
bool rcErodeWalkableArea(rcContext *ctx, int radius, rcCompactHeightfield &chf)
Erodes the walkable area within the heightfield by the specified radius.
unsigned char * cons
Packed neighbor connection information. [Size: Same as heights].
virtual void doResetTimers()
Clears all timers. (Resets all to unused.)
T rcSqr(T a)
Returns the square of the value.
int maxy
The maximum y-bounds of usable data. (Along the z-axis.)
T rcClamp(T v, T mn, T mx)
Clamps the value to the specified range.
int rcOffsetPoly(const float *verts, const int nverts, const float offset, float *outVerts, const int maxOutVerts)
Helper function to offset voncex polygons for rcMarkConvexPolyArea.
rcHeightfieldLayerSet * rcAllocHeightfieldLayerSet()
Allocates a heightfield layer set using the Recast allocator.
The time to flood regions while applying the watershed algorithm. (See: rcBuildRegions) ...
A user defined build time.
The time to expand regions while applying the watershed algorithm. (See: rcBuildRegions) ...
void rcFreePolyMeshDetail(rcPolyMeshDetail *dmesh)
Frees the specified detail mesh using the Recast allocator.
unsigned short * flags
The user defined flags for each polygon. [Length: maxpolys].
virtual void doResetLog()
Clears all log entries.
void enableTimer(bool state)
Enables or disables the performance timers.
float cs
The size of each cell. (On the xz-plane.)
The time to merge polygon mesh details. (See: rcMergePolyMeshDetails)
unsigned short maxDistance
The maximum distance value of any span within the field.
int height
The height of the field along the z-axis. [Limit: >= 0] [Units: vx].
static const int RC_AREA_BORDER
Area border flag. If a region ID has this bit set, then the associated element lies on the border of ...
static const float RC_PI
The value of PI used by Recast.
int width
The width of the set. (Along the x-axis in cell units.)
float cs
The xz-plane cell size to use for fields. [Limit: > 0] [Units: wu].
The time to build the polygon mesh. (See: rcBuildPolyMesh)
bool rcBuildDistanceField(rcContext *ctx, rcCompactHeightfield &chf)
Builds the distance field for the specified compact heightfield.
bool rcBuildRegions(rcContext *ctx, rcCompactHeightfield &chf, const int borderSize, const int minRegionArea, const int mergeRegionArea)
Builds region data for the heightfield using watershed partitioning.
void rcRasterizeTriangles(rcContext *ctx, const float *verts, const int nv, const int *tris, const unsigned char *areas, const int nt, rcHeightfield &solid, const int flagMergeThr=1)
Rasterizes an indexed triangle mesh into the specified heightfield.
rcSpan * next
The next span higher up in column.
int borderSize
The AABB border size used to generate the source data from which the mesh was derived.
float ch
The height of each cell. (The minimum increment along the y-axis.)
static const unsigned char RC_NULL_AREA
Represents the null area. When a data element is given this value it is considered to no longer be as...
void rcVcross(float *dest, const float *v1, const float *v2)
Derives the cross product of two vectors. (v1 x v2)
int nlayers
The number of layers in the set.
T rcMax(T a, T b)
Returns the maximum of two values.
rcSpanPool * next
The next span pool.
void log(const rcLogCategory category, const char *format,...)
Logs a message.
bool rcBuildContours(rcContext *ctx, rcCompactHeightfield &chf, const float maxError, const int maxEdgeLen, rcContourSet &cset, const int flags=RC_CONTOUR_TESS_WALL_EDGES)
Builds a contour set from the region outlines in the provided compact heightfield.
int borderSize
The AABB border size used to generate the source data from which the contours were derived...
The time to apply the median filter. (See: rcMedianFilterWalkableArea)
float ch
The height of each cell. (The minimum increment along the y-axis.)
unsigned int * meshes
The sub-mesh data. [Size: 4*nmeshes].
int npolys
The number of polygons.
bool rcBuildRegionsMonotone(rcContext *ctx, rcCompactHeightfield &chf, const int borderSize, const int minRegionArea, const int mergeRegionArea)
Builds region data for the heightfield using simple monotone partitioning.
int height
The height of the heightfield. (Along the z-axis in cell units.)
int width
The width of the heightfield. (Along the x-axis in cell units.)
virtual void doLog(const rcLogCategory, const char *, const int)
Logs a message.
float rcVdot(const float *v1, const float *v2)
Derives the dot product of two vectors. (v1 . v2)
The time to mark a cylinder area. (See: rcMarkCylinderArea)
void stopTimer(const rcTimerLabel label)
Stops the specified performance timer.
int walkableClimb
The walkable climb used during the build of the field. (See: rcConfig::walkableClimb) ...
int minRegionArea
The minimum number of cells allowed to form isolated island areas. [Limit: >=0] [Units: vx]...
int maxpolys
The number of allocated polygons.
rcBuildContoursFlags
Contour build flags.
unsigned short * regs
The region id assigned to each polygon. [Length: maxpolys].
rcSpanPool * pools
Linked list of span pools.
The time to filter ledge spans. (See: rcFilterLedgeSpans)
The time to mark a convex polygon area. (See: rcMarkConvexPolyArea)
int nverts
The number of vertices in verts.
void rcFreePolyMesh(rcPolyMesh *pmesh)
Frees the specified polygon mesh using the Recast allocator.
static const unsigned short RC_BORDER_REG
Heighfield border flag. If a heightfield region ID has this bit set, then the region is a border regi...
bool rcBuildPolyMesh(rcContext *ctx, rcContourSet &cset, const int nvp, rcPolyMesh &mesh)
Builds a polygon mesh from the provided contours.
int width
The width of the field along the x-axis. [Limit: >= 0] [Units: vx].
int hmin
The minimum height bounds of usable data. (Along the y-axis.)
float cs
The size of each cell. (On the xz-plane.)
Contains triangle meshes that represent detailed height data associated with the polygons in its asso...
The time to filter out small regions. (See: rcBuildRegions, rcBuildRegionsMonotone) ...
rcSpan ** spans
Heightfield of spans (width*height).
int nvp
The maximum number of vertices per polygon.
The time to simplify the contours. (See: rcBuildContours)
void rcMarkConvexPolyArea(rcContext *ctx, const float *verts, const int nverts, const float hmin, const float hmax, unsigned char areaId, rcCompactHeightfield &chf)
Applies the area id to the all spans within the specified convex polygon.
bool rcMergePolyMeshDetails(rcContext *ctx, rcPolyMeshDetail **meshes, const int nmeshes, rcPolyMeshDetail &mesh)
Merges multiple detail meshes into a single detail mesh.
void rcVmax(float *mx, const float *v)
Selects the maximum value of each element from the specified vectors.
unsigned short * polys
Polygon and neighbor data. [Length: maxpolys * 2 * nvp].
Represents a heightfield layer within a layer set.
The time to filter low obstacles. (See: rcFilterLowHangingWalkableObstacles)
void rcFreeContourSet(rcContourSet *cset)
Frees the specified contour set using the Recast allocator.
bool rcBuildCompactHeightfield(rcContext *ctx, const int walkableHeight, const int walkableClimb, rcHeightfield &hf, rcCompactHeightfield &chf)
Builds a compact heightfield representing open space, from a heightfield representing solid space...
int miny
The minimum y-bounds of usable data. (Along the z-axis.)