Renamed 'region size' to 'region area' and improved documentation.
This commit is contained in:
parent
b429ee7304
commit
ab9ada50c5
@ -115,8 +115,8 @@ struct rcConfig
|
||||
int walkableRadius; // Radius of the agent in cells (vx)
|
||||
int maxEdgeLen; // Maximum contour edge length (vx)
|
||||
float maxSimplificationError; // Maximum distance error from contour to cells (vx)
|
||||
int minRegionSize; // Minimum regions size. Smaller regions will be deleted (vx)
|
||||
int mergeRegionSize; // Minimum regions size. Smaller regions will be merged (vx)
|
||||
int minRegionArea; // Regions whose area is smaller than this threshold will be removed. (vx)
|
||||
int mergeRegionArea; // Regions whose area is smaller than this threshold will be merged (vx)
|
||||
int maxVertsPerPoly; // Max number of vertices per polygon
|
||||
float detailSampleDist; // Detail mesh sample spacing.
|
||||
float detailSampleMaxError; // Detail mesh simplification max sample error.
|
||||
@ -619,32 +619,34 @@ bool rcBuildDistanceField(rcContext* ctx, rcCompactHeightfield& chf);
|
||||
// Divides the walkable heighfied into simple regions using watershed partitioning.
|
||||
// Each region has only one contour and no overlaps.
|
||||
// The regions are stored in the compact heightfield 'reg' field.
|
||||
// The process sometimes creates small regions. The parameter
|
||||
// 'minRegionSize' specifies the smallest allowed regions size.
|
||||
// If the area of a regions is smaller than allowed, the regions is
|
||||
// removed or merged to neighbour region.
|
||||
// The process sometimes creates small regions. If the area of a regions is
|
||||
// smaller than 'mergeRegionArea' then the region will be merged with a neighbour
|
||||
// region if possible. If multiple regions form an area which is smaller than
|
||||
// 'minRegionArea' all the regions belonging to that area will be removed.
|
||||
// Here area means the count of spans in an area.
|
||||
// Params:
|
||||
// chf - (in/out) compact heightfield representing the open space.
|
||||
// minRegionSize - (in) the smallest allowed regions size.
|
||||
// maxMergeRegionSize - (in) the largest allowed regions size which can be merged.
|
||||
// minRegionArea - (in) the smallest allowed region area.
|
||||
// maxMergeRegionArea - (in) the largest allowed region area which can be merged.
|
||||
// Returns false if operation ran out of memory.
|
||||
bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
const int borderSize, const int minRegionSize, const int mergeRegionSize);
|
||||
const int borderSize, const int minRegionArea, const int mergeRegionArea);
|
||||
|
||||
// Divides the walkable heighfied into simple regions using simple monotone partitioning.
|
||||
// Each region has only one contour and no overlaps.
|
||||
// The regions are stored in the compact heightfield 'reg' field.
|
||||
// The process sometimes creates small regions. The parameter
|
||||
// 'minRegionSize' specifies the smallest allowed regions size.
|
||||
// If the area of a regions is smaller than allowed, the regions is
|
||||
// removed or merged to neighbour region.
|
||||
// The process sometimes creates small regions. If the area of a regions is
|
||||
// smaller than 'mergeRegionArea' then the region will be merged with a neighbour
|
||||
// region if possible. If multiple regions form an area which is smaller than
|
||||
// 'minRegionArea' all the regions belonging to that area will be removed.
|
||||
// Here area means the count of spans in an area.
|
||||
// Params:
|
||||
// chf - (in/out) compact heightfield representing the open space.
|
||||
// minRegionSize - (in) the smallest allowed regions size.
|
||||
// maxMergeRegionSize - (in) the largest allowed regions size which can be merged.
|
||||
// minRegionArea - (in) the smallest allowed regions size.
|
||||
// maxMergeRegionArea - (in) the largest allowed regions size which can be merged.
|
||||
// Returns false if operation ran out of memory.
|
||||
bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
const int borderSize, const int minRegionSize, const int mergeRegionSize);
|
||||
const int borderSize, const int minRegionArea, const int mergeRegionArea);
|
||||
|
||||
// Builds simplified contours from the regions outlines.
|
||||
// Params:
|
||||
|
@ -438,16 +438,16 @@ static unsigned short* expandRegions(int maxIter, unsigned short level,
|
||||
struct rcRegion
|
||||
{
|
||||
inline rcRegion(unsigned short i) :
|
||||
count(0),
|
||||
spanCount(0),
|
||||
id(i),
|
||||
area(0),
|
||||
areaType(0),
|
||||
remap(false),
|
||||
visited(false)
|
||||
{}
|
||||
|
||||
int count;
|
||||
unsigned short id;
|
||||
unsigned char area;
|
||||
int spanCount; // Number of spans belonging to this region
|
||||
unsigned short id; // ID of the region
|
||||
unsigned char areaType; // Are type.
|
||||
bool remap;
|
||||
bool visited;
|
||||
rcIntArray connections;
|
||||
@ -494,7 +494,7 @@ static void replaceNeighbour(rcRegion& reg, unsigned short oldId, unsigned short
|
||||
|
||||
static bool canMergeWithRegion(const rcRegion& rega, const rcRegion& regb)
|
||||
{
|
||||
if (rega.area != regb.area)
|
||||
if (rega.areaType != regb.areaType)
|
||||
return false;
|
||||
int n = 0;
|
||||
for (int i = 0; i < rega.connections.size(); ++i)
|
||||
@ -570,8 +570,8 @@ static bool mergeRegions(rcRegion& rega, rcRegion& regb)
|
||||
|
||||
for (int j = 0; j < regb.floors.size(); ++j)
|
||||
addUniqueFloorRegion(rega, regb.floors[j]);
|
||||
rega.count += regb.count;
|
||||
regb.count = 0;
|
||||
rega.spanCount += regb.spanCount;
|
||||
regb.spanCount = 0;
|
||||
regb.connections.resize(0);
|
||||
|
||||
return true;
|
||||
@ -694,7 +694,7 @@ static void walkContour(int x, int y, int i, int dir,
|
||||
}
|
||||
}
|
||||
|
||||
static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegionSize,
|
||||
static bool filterSmallRegions(rcContext* ctx, int minRegionArea, int mergeRegionSize,
|
||||
unsigned short& maxRegionId,
|
||||
rcCompactHeightfield& chf,
|
||||
unsigned short* srcReg)
|
||||
@ -727,7 +727,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
continue;
|
||||
|
||||
rcRegion& reg = regions[r];
|
||||
reg.count++;
|
||||
reg.spanCount++;
|
||||
|
||||
|
||||
// Update floors.
|
||||
@ -744,7 +744,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
if (reg.connections.size() > 0)
|
||||
continue;
|
||||
|
||||
reg.area = chf.areas[i];
|
||||
reg.areaType = chf.areas[i];
|
||||
|
||||
// Check if this cell is next to a border.
|
||||
int ndir = -1;
|
||||
@ -775,7 +775,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
rcRegion& reg = regions[i];
|
||||
if (reg.id == 0 || (reg.id & RC_BORDER_REG))
|
||||
continue;
|
||||
if (reg.count == 0)
|
||||
if (reg.spanCount == 0)
|
||||
continue;
|
||||
if (reg.visited)
|
||||
continue;
|
||||
@ -783,7 +783,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
// Count the total size of all the connected regions.
|
||||
// Also keep track of the regions connects to a tile border.
|
||||
bool connectsToBorder = false;
|
||||
int count = 0;
|
||||
int spanCount = 0;
|
||||
stack.resize(0);
|
||||
trace.resize(0);
|
||||
|
||||
@ -797,7 +797,7 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
|
||||
rcRegion& creg = regions[ri];
|
||||
|
||||
count += creg.count;
|
||||
spanCount += creg.spanCount;
|
||||
trace.push(ri);
|
||||
|
||||
for (int j = 0; j < creg.connections.size(); ++j)
|
||||
@ -822,12 +822,12 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
// Do not remove areas which connect to tile borders
|
||||
// as their size cannot be estimated correctly and removing them
|
||||
// can potentially remove necessary areas.
|
||||
if (count < minRegionSize && !connectsToBorder)
|
||||
if (spanCount < minRegionArea && !connectsToBorder)
|
||||
{
|
||||
// Kill all visited regions.
|
||||
for (int j = 0; j < trace.size(); ++j)
|
||||
{
|
||||
regions[trace[j]].count = 0;
|
||||
regions[trace[j]].spanCount = 0;
|
||||
regions[trace[j]].id = 0;
|
||||
}
|
||||
}
|
||||
@ -843,11 +843,11 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
rcRegion& reg = regions[i];
|
||||
if (reg.id == 0 || (reg.id & RC_BORDER_REG))
|
||||
continue;
|
||||
if (reg.count == 0)
|
||||
if (reg.spanCount == 0)
|
||||
continue;
|
||||
|
||||
// Check to see if the region should be merged.
|
||||
if (reg.count > mergeRegionSize && isRegionConnectedToBorder(reg))
|
||||
if (reg.spanCount > mergeRegionSize && isRegionConnectedToBorder(reg))
|
||||
continue;
|
||||
|
||||
// Small region with more than 1 connection.
|
||||
@ -860,11 +860,11 @@ static bool filterSmallRegions(rcContext* ctx, int minRegionSize, int mergeRegio
|
||||
if (reg.connections[j] & RC_BORDER_REG) continue;
|
||||
rcRegion& mreg = regions[reg.connections[j]];
|
||||
if (mreg.id == 0 || (mreg.id & RC_BORDER_REG)) continue;
|
||||
if (mreg.count < smallest &&
|
||||
if (mreg.spanCount < smallest &&
|
||||
canMergeWithRegion(reg, mreg) &&
|
||||
canMergeWithRegion(mreg, reg))
|
||||
{
|
||||
smallest = mreg.count;
|
||||
smallest = mreg.spanCount;
|
||||
mergeId = mreg.id;
|
||||
}
|
||||
}
|
||||
@ -1022,7 +1022,7 @@ struct rcSweepSpan
|
||||
};
|
||||
|
||||
bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
const int borderSize, const int minRegionSize, const int mergeRegionSize)
|
||||
const int borderSize, const int minRegionArea, const int mergeRegionArea)
|
||||
{
|
||||
rcAssert(ctx);
|
||||
|
||||
@ -1153,7 +1153,7 @@ bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
|
||||
// Filter out small regions.
|
||||
chf.maxRegions = id;
|
||||
if (!filterSmallRegions(ctx, minRegionSize, mergeRegionSize, chf.maxRegions, chf, srcReg))
|
||||
if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg))
|
||||
return false;
|
||||
|
||||
ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER);
|
||||
@ -1168,7 +1168,7 @@ bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
}
|
||||
|
||||
bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
const int borderSize, const int minRegionSize, const int mergeRegionSize)
|
||||
const int borderSize, const int minRegionArea, const int mergeRegionArea)
|
||||
{
|
||||
rcAssert(ctx);
|
||||
|
||||
@ -1263,7 +1263,7 @@ bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf,
|
||||
|
||||
// Filter out small regions.
|
||||
chf.maxRegions = regionId;
|
||||
if (!filterSmallRegions(ctx, minRegionSize, mergeRegionSize, chf.maxRegions, chf, srcReg))
|
||||
if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg))
|
||||
return false;
|
||||
|
||||
ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER);
|
||||
|
Binary file not shown.
@ -220,6 +220,15 @@
|
||||
6BB2EE3F1261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE3F1261D02000E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE401261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE401261D02000E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE411261D02000E350F8 /* PBXTextBookmark */ = 6BB2EE411261D02000E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE641261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE641261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE651261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE651261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE661261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE661261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE671261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE671261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE681261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE681261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE691261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE691261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */ = 6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */;
|
||||
6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */ = 6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */;
|
||||
6BBB0361124E242E00533229 = 6BBB0361124E242E00533229 /* PBXTextBookmark */;
|
||||
6BBB0363124E242E00533229 = 6BBB0363124E242E00533229 /* PBXTextBookmark */;
|
||||
6BBB0365124E242E00533229 = 6BBB0365124E242E00533229 /* PBXTextBookmark */;
|
||||
@ -360,9 +369,9 @@
|
||||
};
|
||||
6B137C7E0F7FCBFE00459200 /* Recast.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 8944}}";
|
||||
sepNavSelRange = "{960, 84}";
|
||||
sepNavVisRange = "{521, 923}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 8606}}";
|
||||
sepNavSelRange = "{23762, 14}";
|
||||
sepNavVisRange = "{22925, 2730}";
|
||||
sepNavWindowFrame = "{{15, 51}, {1214, 722}}";
|
||||
};
|
||||
};
|
||||
@ -406,9 +415,9 @@
|
||||
};
|
||||
6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 17082}}";
|
||||
sepNavSelRange = "{19532, 0}";
|
||||
sepNavVisRange = "{17831, 971}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 16926}}";
|
||||
sepNavSelRange = "{22090, 0}";
|
||||
sepNavVisRange = "{21330, 766}";
|
||||
};
|
||||
};
|
||||
6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = {
|
||||
@ -423,23 +432,23 @@
|
||||
};
|
||||
6B25B6100FFA62AD004F1BC4 /* Sample.h */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {933, 1677}}";
|
||||
sepNavSelRange = "{3880, 19}";
|
||||
sepNavVisRange = "{3295, 748}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 1976}}";
|
||||
sepNavSelRange = "{2579, 0}";
|
||||
sepNavVisRange = "{2271, 551}";
|
||||
};
|
||||
};
|
||||
6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 2769}}";
|
||||
sepNavSelRange = "{2884, 0}";
|
||||
sepNavVisRange = "{2623, 1223}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 2834}}";
|
||||
sepNavSelRange = "{2904, 0}";
|
||||
sepNavVisRange = "{2623, 730}";
|
||||
};
|
||||
};
|
||||
6B25B6180FFA62BE004F1BC4 /* main.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 12025}}";
|
||||
sepNavSelRange = "{20913, 0}";
|
||||
sepNavVisRange = "{20575, 601}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1217, 12025}}";
|
||||
sepNavSelRange = "{1985, 0}";
|
||||
sepNavVisRange = "{1794, 437}";
|
||||
sepNavWindowFrame = "{{15, 51}, {1214, 722}}";
|
||||
};
|
||||
};
|
||||
@ -453,9 +462,9 @@
|
||||
};
|
||||
6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {936, 18560}}";
|
||||
sepNavSelRange = "{25434, 0}";
|
||||
sepNavVisRange = "{25185, 649}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 15392}}";
|
||||
sepNavSelRange = "{24602, 0}";
|
||||
sepNavVisRange = "{23873, 1419}";
|
||||
sepNavWindowFrame = "{{38, 30}, {1214, 722}}";
|
||||
};
|
||||
};
|
||||
@ -820,7 +829,7 @@
|
||||
fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
|
||||
name = "RecastRegion.cpp: 931";
|
||||
rLen = 0;
|
||||
rLoc = 23307;
|
||||
rLoc = 23477;
|
||||
rType = 0;
|
||||
vrLen = 751;
|
||||
vrLoc = 21660;
|
||||
@ -844,9 +853,9 @@
|
||||
};
|
||||
6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {933, 14560}}";
|
||||
sepNavSelRange = "{11617, 0}";
|
||||
sepNavVisRange = "{11096, 1076}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {1013, 14274}}";
|
||||
sepNavSelRange = "{26519, 0}";
|
||||
sepNavVisRange = "{20368, 1429}";
|
||||
sepNavWindowFrame = "{{38, 30}, {1214, 722}}";
|
||||
};
|
||||
};
|
||||
@ -904,9 +913,9 @@
|
||||
};
|
||||
6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 8307}}";
|
||||
sepNavSelRange = "{11545, 0}";
|
||||
sepNavVisRange = "{10675, 1806}";
|
||||
sepNavIntBoundsRect = "{{0, 0}, {931, 8684}}";
|
||||
sepNavSelRange = "{11552, 0}";
|
||||
sepNavVisRange = "{10928, 1315}";
|
||||
};
|
||||
};
|
||||
6BA1E88E10C7BFD3008007F6 /* Sample_SoloMeshSimple.h */ = {
|
||||
@ -986,7 +995,7 @@
|
||||
fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */;
|
||||
name = "Sample_TileMesh.cpp: 929";
|
||||
rLen = 0;
|
||||
rLoc = 25434;
|
||||
rLoc = 25487;
|
||||
rType = 0;
|
||||
vrLen = 649;
|
||||
vrLoc = 25185;
|
||||
@ -1691,7 +1700,7 @@
|
||||
fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
|
||||
name = "RecastRegion.cpp: 849";
|
||||
rLen = 0;
|
||||
rLoc = 19562;
|
||||
rLoc = 19716;
|
||||
rType = 0;
|
||||
vrLen = 1078;
|
||||
vrLoc = 19104;
|
||||
@ -1701,7 +1710,7 @@
|
||||
fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */;
|
||||
name = "Sample_SoloMeshSimple.cpp: 380";
|
||||
rLen = 0;
|
||||
rLoc = 11545;
|
||||
rLoc = 11598;
|
||||
rType = 0;
|
||||
vrLen = 1806;
|
||||
vrLoc = 10675;
|
||||
@ -1751,7 +1760,7 @@
|
||||
fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
|
||||
name = "RecastRegion.cpp: 849";
|
||||
rLen = 0;
|
||||
rLoc = 19562;
|
||||
rLoc = 19716;
|
||||
rType = 0;
|
||||
vrLen = 1093;
|
||||
vrLoc = 19103;
|
||||
@ -1761,11 +1770,101 @@
|
||||
fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
|
||||
name = "RecastRegion.cpp: 830";
|
||||
rLen = 0;
|
||||
rLoc = 19532;
|
||||
rLoc = 19686;
|
||||
rType = 0;
|
||||
vrLen = 971;
|
||||
vrLoc = 17831;
|
||||
};
|
||||
6BB2EE641261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
|
||||
name = "Recast.h: 632";
|
||||
rLen = 14;
|
||||
rLoc = 23762;
|
||||
rType = 0;
|
||||
vrLen = 2730;
|
||||
vrLoc = 22925;
|
||||
};
|
||||
6BB2EE651261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */;
|
||||
name = "RecastRegion.cpp: 917";
|
||||
rLen = 0;
|
||||
rLoc = 22090;
|
||||
rType = 0;
|
||||
vrLen = 766;
|
||||
vrLoc = 21330;
|
||||
};
|
||||
6BB2EE661261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */;
|
||||
name = "Sample.h: 87";
|
||||
rLen = 0;
|
||||
rLoc = 2579;
|
||||
rType = 0;
|
||||
vrLen = 551;
|
||||
vrLoc = 2271;
|
||||
};
|
||||
6BB2EE671261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */;
|
||||
name = "Sample.cpp: 122";
|
||||
rLen = 0;
|
||||
rLoc = 2904;
|
||||
rType = 0;
|
||||
vrLen = 730;
|
||||
vrLoc = 2623;
|
||||
};
|
||||
6BB2EE681261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */;
|
||||
name = "Sample_SoloMeshTiled.cpp: 866";
|
||||
rLen = 0;
|
||||
rLoc = 26519;
|
||||
rType = 0;
|
||||
vrLen = 1429;
|
||||
vrLoc = 20368;
|
||||
};
|
||||
6BB2EE691261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */;
|
||||
name = "Sample_SoloMeshSimple.cpp: 379";
|
||||
rLen = 0;
|
||||
rLoc = 11552;
|
||||
rType = 0;
|
||||
vrLen = 1315;
|
||||
vrLoc = 10928;
|
||||
};
|
||||
6BB2EE6A1261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */;
|
||||
name = "Sample_TileMesh.cpp: 903";
|
||||
rLen = 0;
|
||||
rLoc = 24421;
|
||||
rType = 0;
|
||||
vrLen = 1348;
|
||||
vrLoc = 23835;
|
||||
};
|
||||
6BB2EE6B1261D48100E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */;
|
||||
name = "Sample_TileMesh.cpp: 903";
|
||||
rLen = 0;
|
||||
rLoc = 24453;
|
||||
rType = 0;
|
||||
vrLen = 1363;
|
||||
vrLoc = 23873;
|
||||
};
|
||||
6BB2EE6D1261D4A400E350F8 /* PBXTextBookmark */ = {
|
||||
isa = PBXTextBookmark;
|
||||
fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */;
|
||||
name = "Sample_TileMesh.cpp: 906";
|
||||
rLen = 0;
|
||||
rLoc = 24602;
|
||||
rType = 0;
|
||||
vrLen = 1419;
|
||||
vrLoc = 23873;
|
||||
};
|
||||
6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = {
|
||||
uiCtxt = {
|
||||
sepNavIntBoundsRect = "{{0, 0}, {933, 3712}}";
|
||||
@ -2237,7 +2336,7 @@
|
||||
fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */;
|
||||
name = "Recast.h: 256";
|
||||
rLen = 0;
|
||||
rLoc = 9742;
|
||||
rLoc = 9767;
|
||||
rType = 0;
|
||||
vrLen = 1723;
|
||||
vrLoc = 8968;
|
||||
|
@ -284,8 +284,8 @@
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>34</integer>
|
||||
<integer>27</integer>
|
||||
<integer>48</integer>
|
||||
<integer>40</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
@ -326,7 +326,7 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A30F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>RecastRegion.cpp</string>
|
||||
<string>Sample_TileMesh.cpp</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
@ -334,11 +334,11 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A40F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>RecastRegion.cpp</string>
|
||||
<string>Sample_TileMesh.cpp</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>6BB2EE411261D02000E350F8</string>
|
||||
<string>6BB2EE6D1261D4A400E350F8</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>6BBB4AA5115B4F3400CF791D</string>
|
||||
@ -369,7 +369,6 @@
|
||||
<string>6BD402B4122441CB00995864</string>
|
||||
<string>6B920A521225C0AC00D5B5AD</string>
|
||||
<string>6B920A6D1225C5DD00D5B5AD</string>
|
||||
<string>6BA7F8AC1226EF0400C8C47A</string>
|
||||
<string>6BA7F8EC1227002300C8C47A</string>
|
||||
<string>6BA7F8ED1227002300C8C47A</string>
|
||||
<string>6BA7F8EE1227002300C8C47A</string>
|
||||
@ -406,10 +405,8 @@
|
||||
<string>6BA8CEEF1255C4B700272A3B</string>
|
||||
<string>6BA8CF4A1255D44700272A3B</string>
|
||||
<string>6BA8CF4D1255D44700272A3B</string>
|
||||
<string>6BA8CF501255D44700272A3B</string>
|
||||
<string>6BA8CF511255D44700272A3B</string>
|
||||
<string>6BA8CF5B1255D49B00272A3B</string>
|
||||
<string>6BA8CF7C1255D5FE00272A3B</string>
|
||||
<string>6BA8CF941255D97400272A3B</string>
|
||||
<string>6BA8CF951255D97400272A3B</string>
|
||||
<string>6BA8CFA81255DC6500272A3B</string>
|
||||
@ -419,7 +416,6 @@
|
||||
<string>6BA8D10D125B0E8E00272A3B</string>
|
||||
<string>6BB2EDF61261C75400E350F8</string>
|
||||
<string>6BB2EDF91261C75400E350F8</string>
|
||||
<string>6BB2EE231261C92300E350F8</string>
|
||||
<string>6BB2EE241261C92300E350F8</string>
|
||||
<string>6BB2EE251261C92300E350F8</string>
|
||||
<string>6BB2EE261261C92300E350F8</string>
|
||||
@ -427,10 +423,14 @@
|
||||
<string>6BB2EE281261C92300E350F8</string>
|
||||
<string>6BB2EE351261CEB800E350F8</string>
|
||||
<string>6BB2EE361261CEB800E350F8</string>
|
||||
<string>6BB2EE381261CEB800E350F8</string>
|
||||
<string>6BB2EE3E1261D02000E350F8</string>
|
||||
<string>6BB2EE3F1261D02000E350F8</string>
|
||||
<string>6BB2EE401261D02000E350F8</string>
|
||||
<string>6BB2EE641261D48100E350F8</string>
|
||||
<string>6BB2EE651261D48100E350F8</string>
|
||||
<string>6BB2EE661261D48100E350F8</string>
|
||||
<string>6BB2EE671261D48100E350F8</string>
|
||||
<string>6BB2EE681261D48100E350F8</string>
|
||||
<string>6BB2EE691261D48100E350F8</string>
|
||||
<string>6BB2EE6A1261D48100E350F8</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
@ -444,18 +444,18 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {992, 673}}</string>
|
||||
<string>{{0, 0}, {992, 471}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>0 59 1278 719 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>673pt</string>
|
||||
<string>471pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>0pt</string>
|
||||
<string>202pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
@ -485,9 +485,7 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {992, -27}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>0 59 1278 719 0 0 1280 778 </string>
|
||||
<string>{{10, 27}, {992, 175}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXProjectFindModule</string>
|
||||
@ -525,7 +523,9 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {992, 99}}</string>
|
||||
<string>{{10, 27}, {992, 175}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>0 59 1278 719 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
|
@ -375,8 +375,8 @@ bool Sample_SoloMeshSimple::handleBuild()
|
||||
m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs);
|
||||
m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize);
|
||||
m_cfg.maxSimplificationError = m_edgeMaxError;
|
||||
m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize);
|
||||
m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize);
|
||||
m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size
|
||||
m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size
|
||||
m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly;
|
||||
m_cfg.detailSampleDist = m_detailSampleDist < 0.9f ? 0 : m_cellSize * m_detailSampleDist;
|
||||
m_cfg.detailSampleMaxError = m_cellHeight * m_detailSampleMaxError;
|
||||
@ -495,7 +495,7 @@ bool Sample_SoloMeshSimple::handleBuild()
|
||||
}
|
||||
|
||||
// Partition the walkable surface into simple regions without holes.
|
||||
if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionSize, m_cfg.mergeRegionSize))
|
||||
if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionArea, m_cfg.mergeRegionArea))
|
||||
{
|
||||
m_ctx->log(RC_LOG_ERROR, "buildNavigation: Could not build regions.");
|
||||
return false;
|
||||
|
@ -720,8 +720,8 @@ bool Sample_SoloMeshTiled::handleBuild()
|
||||
m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs);
|
||||
m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize);
|
||||
m_cfg.maxSimplificationError = m_edgeMaxError;
|
||||
m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize);
|
||||
m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize);
|
||||
m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size
|
||||
m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size
|
||||
m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly;
|
||||
m_cfg.tileSize = (int)m_tileSize;
|
||||
m_cfg.borderSize = m_cfg.walkableRadius + 3; // Reserve enough padding.
|
||||
@ -867,7 +867,7 @@ bool Sample_SoloMeshTiled::handleBuild()
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!rcBuildRegions(m_ctx, *tile.chf, tileCfg.borderSize, tileCfg.minRegionSize, tileCfg.mergeRegionSize))
|
||||
if (!rcBuildRegions(m_ctx, *tile.chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea))
|
||||
{
|
||||
m_ctx->log(RC_LOG_ERROR, "buildTiledNavigation: [%d,%d] Could not build regions.", x, y);
|
||||
continue;
|
||||
|
@ -899,8 +899,8 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const
|
||||
m_cfg.walkableRadius = (int)ceilf(m_agentRadius / m_cfg.cs);
|
||||
m_cfg.maxEdgeLen = (int)(m_edgeMaxLen / m_cellSize);
|
||||
m_cfg.maxSimplificationError = m_edgeMaxError;
|
||||
m_cfg.minRegionSize = (int)rcSqr(m_regionMinSize);
|
||||
m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize);
|
||||
m_cfg.minRegionArea = (int)rcSqr(m_regionMinSize); // Note: area = size*size
|
||||
m_cfg.mergeRegionArea = (int)rcSqr(m_regionMergeSize); // Note: area = size*size
|
||||
m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly;
|
||||
m_cfg.tileSize = (int)m_tileSize;
|
||||
m_cfg.borderSize = m_cfg.walkableRadius + 3; // Reserve enough padding.
|
||||
@ -1030,7 +1030,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const
|
||||
}
|
||||
|
||||
// Partition the walkable surface into simple regions without holes.
|
||||
if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionSize, m_cfg.mergeRegionSize))
|
||||
if (!rcBuildRegions(m_ctx, *m_chf, m_cfg.borderSize, m_cfg.minRegionArea, m_cfg.mergeRegionArea))
|
||||
{
|
||||
m_ctx->log(RC_LOG_ERROR, "buildNavigation: Could not build regions.");
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user