Changed link bmin/bmax to fraction along the edge. Fixed moveAlong to work with multiple links per edge. Use flat delta for path iterator.
This commit is contained in:
parent
47a572d42e
commit
474a3ddc67
@ -415,17 +415,21 @@ void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side)
|
||||
// Compress portal limits to a byte value.
|
||||
if (side == 0 || side == 4)
|
||||
{
|
||||
const float lmin = dtMin(va[2], vb[2]);
|
||||
const float lmax = dtMax(va[2], vb[2]);
|
||||
link->bmin = (unsigned char)(dtClamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
|
||||
link->bmax = (unsigned char)(dtClamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
|
||||
float tmin = (neia[k*2+0]-va[2]) / (vb[2]-va[2]);
|
||||
float tmax = (neia[k*2+1]-va[2]) / (vb[2]-va[2]);
|
||||
if (tmin > tmax)
|
||||
dtSwap(tmin,tmax);
|
||||
link->bmin = (unsigned char)(dtClamp(tmin, 0.0f, 1.0f)*255.0f);
|
||||
link->bmax = (unsigned char)(dtClamp(tmax, 0.0f, 1.0f)*255.0f);
|
||||
}
|
||||
else if (side == 2 || side == 6)
|
||||
{
|
||||
const float lmin = dtMin(va[0], vb[0]);
|
||||
const float lmax = dtMax(va[0], vb[0]);
|
||||
link->bmin = (unsigned char)(dtClamp((neia[k*2+0]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
|
||||
link->bmax = (unsigned char)(dtClamp((neia[k*2+1]-lmin)/(lmax-lmin), 0.0f, 1.0f)*255.0f);
|
||||
float tmin = (neia[k*2+0]-va[0]) / (vb[0]-va[0]);
|
||||
float tmax = (neia[k*2+1]-va[0]) / (vb[0]-va[0]);
|
||||
if (tmin > tmax)
|
||||
dtSwap(tmin,tmax);
|
||||
link->bmin = (unsigned char)(dtClamp(tmin, 0.0f, 1.0f)*255.0f);
|
||||
link->bmax = (unsigned char)(dtClamp(tmax, 0.0f, 1.0f)*255.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1839,8 +1843,11 @@ int dtNavMesh::moveAlongSurface(dtPolyRef startRef, const float* startPos, const
|
||||
// Find wall edges and find nearest point inside the walls.
|
||||
for (int i = 0, j = (int)curPoly->vertCount-1; i < (int)curPoly->vertCount; j = i++)
|
||||
{
|
||||
// Skip non-solid edges.
|
||||
dtPolyRef neighbourRef = 0;
|
||||
// Find links to neighbours.
|
||||
static const int MAX_NEIS = 8;
|
||||
int nneis = 0;
|
||||
dtPolyRef neis[MAX_NEIS];
|
||||
|
||||
if (curPoly->neis[j] & DT_EXT_LINK)
|
||||
{
|
||||
// Tile border.
|
||||
@ -1850,18 +1857,20 @@ int dtNavMesh::moveAlongSurface(dtPolyRef startRef, const float* startPos, const
|
||||
if (link->edge == j)
|
||||
{
|
||||
if (link->ref != 0 && passFilter(filter, getPolyFlags(link->ref)))
|
||||
neighbourRef = link->ref;
|
||||
break;
|
||||
{
|
||||
if (nneis < MAX_NEIS)
|
||||
neis[nneis++] = link->ref;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (curPoly->neis[j] && passFilter(filter, curTile->polys[curPoly->neis[j]-1].flags))
|
||||
{
|
||||
// Internal edge, encode id.
|
||||
neighbourRef = getTilePolyRefBase(curTile) | (unsigned int)(curPoly->neis[j]-1);
|
||||
neis[nneis++] = getTilePolyRefBase(curTile) | (unsigned int)(curPoly->neis[j]-1);
|
||||
}
|
||||
|
||||
if (!neighbourRef)
|
||||
if (!nneis)
|
||||
{
|
||||
// Wall edge, calc distance.
|
||||
const float* vj = &verts[j*3];
|
||||
@ -1877,9 +1886,11 @@ int dtNavMesh::moveAlongSurface(dtPolyRef startRef, const float* startPos, const
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int k = 0; k < nneis; ++k)
|
||||
{
|
||||
// Skip if no node can be allocated.
|
||||
dtNode* neighbourNode = m_tinyNodePool->getNode(neighbourRef);
|
||||
dtNode* neighbourNode = m_tinyNodePool->getNode(neis[k]);
|
||||
if (!neighbourNode)
|
||||
continue;
|
||||
// Skip if already visited.
|
||||
@ -1887,6 +1898,7 @@ int dtNavMesh::moveAlongSurface(dtPolyRef startRef, const float* startPos, const
|
||||
continue;
|
||||
|
||||
// Skip the link if it is too far from search constraint.
|
||||
// TODO: Maybe should use getPortalPoints(), but this one is way faster.
|
||||
const float* vj = &verts[j*3];
|
||||
const float* vi = &verts[i*3];
|
||||
float tseg;
|
||||
@ -1904,6 +1916,7 @@ int dtNavMesh::moveAlongSurface(dtPolyRef startRef, const float* startPos, const
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int n = 0;
|
||||
if (bestNode)
|
||||
@ -2019,31 +2032,17 @@ bool dtNavMesh::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dt
|
||||
|
||||
// If the link is at tile boundary, dtClamp the vertices to
|
||||
// the link width.
|
||||
if (link->side == 0 || link->side == 4)
|
||||
if (link->side != 0xff)
|
||||
{
|
||||
// Unpack portal limits.
|
||||
const float smin = dtMin(left[2],right[2]);
|
||||
const float smax = dtMax(left[2],right[2]);
|
||||
const float s = (smax-smin) / 255.0f;
|
||||
const float lmin = smin + link->bmin*s;
|
||||
const float lmax = smin + link->bmax*s;
|
||||
left[2] = dtMax(left[2],lmin);
|
||||
left[2] = dtMin(left[2],lmax);
|
||||
right[2] = dtMax(right[2],lmin);
|
||||
right[2] = dtMin(right[2],lmax);
|
||||
if (link->bmin != 0 || link->bmax != 255)
|
||||
{
|
||||
const float s = 1.0f/255.0f;
|
||||
const float tmin = link->bmin*s;
|
||||
const float tmax = link->bmax*s;
|
||||
dtVlerp(left, &fromTile->verts[v0*3], &fromTile->verts[v1*3], tmin);
|
||||
dtVlerp(right, &fromTile->verts[v0*3], &fromTile->verts[v1*3], tmax);
|
||||
}
|
||||
else if (link->side == 2 || link->side == 6)
|
||||
{
|
||||
// Unpack portal limits.
|
||||
const float smin = dtMin(left[0],right[0]);
|
||||
const float smax = dtMax(left[0],right[0]);
|
||||
const float s = (smax-smin) / 255.0f;
|
||||
const float lmin = smin + link->bmin*s;
|
||||
const float lmax = smin + link->bmax*s;
|
||||
left[0] = dtMax(left[0],lmin);
|
||||
left[0] = dtMin(left[0],lmax);
|
||||
right[0] = dtMax(right[0],lmin);
|
||||
right[0] = dtMin(right[0],lmax);
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -2212,6 +2211,15 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
|
||||
}
|
||||
|
||||
// If the link is at tile boundary,
|
||||
|
||||
// Check if the link spans the whole edge, and accept.
|
||||
if (link->bmin == 0 && link->bmax == 255)
|
||||
{
|
||||
nextRef = link->ref;
|
||||
break;
|
||||
}
|
||||
|
||||
// Check for partial edge links.
|
||||
const int v0 = poly->verts[link->edge];
|
||||
const int v1 = poly->verts[(link->edge+1) % poly->vertCount];
|
||||
const float* left = &tile->verts[v0*3];
|
||||
@ -2221,11 +2229,11 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
|
||||
if (link->side == 0 || link->side == 4)
|
||||
{
|
||||
// Calculate link size.
|
||||
const float smin = dtMin(left[2],right[2]);
|
||||
const float smax = dtMax(left[2],right[2]);
|
||||
const float s = (smax-smin) / 255.0f;
|
||||
const float lmin = smin + link->bmin*s;
|
||||
const float lmax = smin + link->bmax*s;
|
||||
const float s = 1.0f/255.0f;
|
||||
float lmin = left[2] + (right[2] - left[2])*(link->bmin*s);
|
||||
float lmax = left[2] + (right[2] - left[2])*(link->bmax*s);
|
||||
if (lmin > lmax) dtSwap(lmin, lmax);
|
||||
|
||||
// Find Z intersection.
|
||||
float z = startPos[2] + (endPos[2]-startPos[2])*tmax;
|
||||
if (z >= lmin && z <= lmax)
|
||||
@ -2237,11 +2245,11 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float*
|
||||
else if (link->side == 2 || link->side == 6)
|
||||
{
|
||||
// Calculate link size.
|
||||
const float smin = dtMin(left[0],right[0]);
|
||||
const float smax = dtMax(left[0],right[0]);
|
||||
const float s = (smax-smin) / 255.0f;
|
||||
const float lmin = smin + link->bmin*s;
|
||||
const float lmax = smin + link->bmax*s;
|
||||
const float s = 1.0f/255.0f;
|
||||
float lmin = left[0] + (right[0] - left[0])*(link->bmin*s);
|
||||
float lmax = left[0] + (right[0] - left[0])*(link->bmax*s);
|
||||
if (lmin > lmax) dtSwap(lmin, lmax);
|
||||
|
||||
// Find X intersection.
|
||||
float x = startPos[0] + (endPos[0]-startPos[0])*tmax;
|
||||
if (x >= lmin && x <= lmax)
|
||||
@ -2740,6 +2748,33 @@ int dtNavMesh::findLocalNeighbourhood(dtPolyRef centerRef, const float* centerPo
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
struct dtSegInterval
|
||||
{
|
||||
short tmin, tmax;
|
||||
};
|
||||
|
||||
static void insertInterval(dtSegInterval* ints, int& nints, const int maxInts,
|
||||
const short tmin, const short tmax)
|
||||
{
|
||||
if (nints+1 > maxInts) return;
|
||||
// Find insertion point.
|
||||
int idx = 0;
|
||||
while (idx < nints)
|
||||
{
|
||||
if (tmax <= ints[idx].tmin)
|
||||
break;
|
||||
idx++;
|
||||
}
|
||||
// Move current results.
|
||||
if (nints-idx)
|
||||
memmove(ints+idx+1, ints+idx, sizeof(dtSegInterval)*(nints-idx));
|
||||
// Store
|
||||
ints[idx].tmin = tmin;
|
||||
ints[idx].tmax = tmax;
|
||||
nints++;
|
||||
}
|
||||
|
||||
int dtNavMesh::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, float* segments)
|
||||
{
|
||||
unsigned int salt, it, ip;
|
||||
@ -2751,25 +2786,28 @@ int dtNavMesh::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, f
|
||||
const dtPoly* poly = &tile->polys[ip];
|
||||
|
||||
int n = 0;
|
||||
static const int MAX_INTERVAL = 16;
|
||||
dtSegInterval ints[MAX_INTERVAL];
|
||||
int nints;
|
||||
|
||||
for (int i = 0, j = (int)poly->vertCount-1; i < (int)poly->vertCount; j = i++)
|
||||
{
|
||||
// Skip non-solid edges.
|
||||
nints = 0;
|
||||
if (poly->neis[j] & DT_EXT_LINK)
|
||||
{
|
||||
// Tile border.
|
||||
bool solid = true;
|
||||
for (unsigned int k = poly->firstLink; k != DT_NULL_LINK; k = tile->links[k].next)
|
||||
{
|
||||
const dtLink* link = &tile->links[k];
|
||||
if (link->edge == j)
|
||||
{
|
||||
if (link->ref != 0 && passFilter(filter, getPolyFlags(link->ref)))
|
||||
solid = false;
|
||||
break;
|
||||
{
|
||||
insertInterval(ints, nints, MAX_INTERVAL, link->bmin, link->bmax);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!solid) continue;
|
||||
}
|
||||
else if (poly->neis[j] && passFilter(filter, tile->polys[poly->neis[j]-1].flags))
|
||||
{
|
||||
@ -2777,14 +2815,43 @@ int dtNavMesh::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, f
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add sentinels
|
||||
insertInterval(ints, nints, MAX_INTERVAL, -1, 0);
|
||||
insertInterval(ints, nints, MAX_INTERVAL, 255, 256);
|
||||
|
||||
// Store segment.
|
||||
const float* vj = &tile->verts[poly->verts[j]*3];
|
||||
const float* vi = &tile->verts[poly->verts[i]*3];
|
||||
for (int k = 1; k < nints; ++k)
|
||||
{
|
||||
// Find the space inbetween the opening areas.
|
||||
const int imin = ints[k-1].tmax;
|
||||
const int imax = ints[k].tmin;
|
||||
if (imin == imax) continue;
|
||||
if (imin == 0 && imax == 255)
|
||||
{
|
||||
if (n < DT_VERTS_PER_POLYGON)
|
||||
{
|
||||
float* seg = &segments[n*6];
|
||||
n++;
|
||||
dtVcopy(seg+0, vj);
|
||||
dtVcopy(seg+3, vi);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const float tmin = imin/255.0f;
|
||||
const float tmax = imax/255.0f;
|
||||
if (n < DT_VERTS_PER_POLYGON)
|
||||
{
|
||||
float* seg = &segments[n*6];
|
||||
n++;
|
||||
dtVlerp(seg+0, vj,vi, tmin);
|
||||
dtVlerp(seg+3, vj,vi, tmax);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -283,14 +283,14 @@
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
|
||||
<array>
|
||||
<array>
|
||||
<integer>10</integer>
|
||||
<integer>2</integer>
|
||||
<integer>15</integer>
|
||||
<integer>11</integer>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
</array>
|
||||
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
|
||||
<string>{{0, 0}, {264, 632}}</string>
|
||||
<string>{{0, 49}, {264, 632}}</string>
|
||||
</dict>
|
||||
<key>PBXTopSmartGroupGIDs</key>
|
||||
<array/>
|
||||
@ -307,7 +307,7 @@
|
||||
<real>264</real>
|
||||
</array>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>33 87 1173 691 0 0 1280 778 </string>
|
||||
<string>34 87 1173 691 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXSmartGroupTreeModule</string>
|
||||
@ -325,7 +325,7 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A30F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>DetourNavMesh.h</string>
|
||||
<string>DetourNavMesh.cpp</string>
|
||||
<key>PBXSplitModuleInNavigatorKey</key>
|
||||
<dict>
|
||||
<key>Split0</key>
|
||||
@ -333,11 +333,11 @@
|
||||
<key>PBXProjectModuleGUID</key>
|
||||
<string>6B8632A40F78115100E2684A</string>
|
||||
<key>PBXProjectModuleLabel</key>
|
||||
<string>DetourNavMesh.h</string>
|
||||
<string>DetourNavMesh.cpp</string>
|
||||
<key>_historyCapacity</key>
|
||||
<integer>0</integer>
|
||||
<key>bookmark</key>
|
||||
<string>6BAF3AC3121039C7008CFCDF</string>
|
||||
<string>6BAF3C56121163FD008CFCDF</string>
|
||||
<key>history</key>
|
||||
<array>
|
||||
<string>6BBB4AA1115B4F3400CF791D</string>
|
||||
@ -375,39 +375,39 @@
|
||||
<string>6BF9B13611EB8CF20043574C</string>
|
||||
<string>6BF9B13711EB8CF20043574C</string>
|
||||
<string>6BF9B18811EC2D470043574C</string>
|
||||
<string>6BF9B1D111EC3DD80043574C</string>
|
||||
<string>6BF9B1F211EC43FC0043574C</string>
|
||||
<string>6BF9B20B11EC450E0043574C</string>
|
||||
<string>6BF9B21211EC49A30043574C</string>
|
||||
<string>6BF9B21B11EC49F90043574C</string>
|
||||
<string>6BAF37D411FEAC16008CFCDF</string>
|
||||
<string>6BAF37F911FEB4BB008CFCDF</string>
|
||||
<string>6BAF382112019EDA008CFCDF</string>
|
||||
<string>6BAF382212019EDA008CFCDF</string>
|
||||
<string>6BAF38471202CC9B008CFCDF</string>
|
||||
<string>6BAF385A120A8A8E008CFCDF</string>
|
||||
<string>6BAF385B120A8A8E008CFCDF</string>
|
||||
<string>6BAF385C120A8A8E008CFCDF</string>
|
||||
<string>6BAF386A120A8B78008CFCDF</string>
|
||||
<string>6BAF3872120AD32F008CFCDF</string>
|
||||
<string>6BAF3873120AD32F008CFCDF</string>
|
||||
<string>6BAF3874120AD32F008CFCDF</string>
|
||||
<string>6BAF3875120AD32F008CFCDF</string>
|
||||
<string>6BAF390F120FEB27008CFCDF</string>
|
||||
<string>6BAF3910120FEB27008CFCDF</string>
|
||||
<string>6BAF3971120FF609008CFCDF</string>
|
||||
<string>6BAF39D112100A22008CFCDF</string>
|
||||
<string>6BAF39D212100A22008CFCDF</string>
|
||||
<string>6BAF39E712100DE4008CFCDF</string>
|
||||
<string>6BAF39F012100ED1008CFCDF</string>
|
||||
<string>6BAF3A5F12102BB9008CFCDF</string>
|
||||
<string>6BAF3A7812103373008CFCDF</string>
|
||||
<string>6BAF3AAB1210369A008CFCDF</string>
|
||||
<string>6BAF3AB3121038F9008CFCDF</string>
|
||||
<string>6BAF3AB4121038F9008CFCDF</string>
|
||||
<string>6BAF3AB5121038F9008CFCDF</string>
|
||||
<string>6BAF3AB6121038F9008CFCDF</string>
|
||||
<string>6BAF3AC2121039C7008CFCDF</string>
|
||||
<string>6BAF3ADA12112A65008CFCDF</string>
|
||||
<string>6BAF3B0112112E63008CFCDF</string>
|
||||
<string>6BAF3B0312112E63008CFCDF</string>
|
||||
<string>6BAF3B3F121137C7008CFCDF</string>
|
||||
<string>6BAF3BA51211425E008CFCDF</string>
|
||||
<string>6BAF3BA912114288008CFCDF</string>
|
||||
<string>6BAF3BAF12114389008CFCDF</string>
|
||||
<string>6BAF3BB012114389008CFCDF</string>
|
||||
<string>6BAF3BB8121146D8008CFCDF</string>
|
||||
<string>6BAF3BB9121146D8008CFCDF</string>
|
||||
<string>6BAF3BC91211472E008CFCDF</string>
|
||||
<string>6BAF3BFE121151C3008CFCDF</string>
|
||||
<string>6BAF3C4312116225008CFCDF</string>
|
||||
</array>
|
||||
<key>prevStack</key>
|
||||
<array>
|
||||
@ -433,7 +433,6 @@
|
||||
<string>6BBB4AFA115B4F3400CF791D</string>
|
||||
<string>6BBB4AFB115B4F3400CF791D</string>
|
||||
<string>6BBB4AFD115B4F3400CF791D</string>
|
||||
<string>6BBB4B03115B4F3400CF791D</string>
|
||||
<string>6BBB4B07115B4F3400CF791D</string>
|
||||
<string>6BBB4B08115B4F3400CF791D</string>
|
||||
<string>6BBB4B0A115B4F3400CF791D</string>
|
||||
@ -447,7 +446,6 @@
|
||||
<string>6B4215D1118066FE006C347B</string>
|
||||
<string>6B4215DF1180672F006C347B</string>
|
||||
<string>6B5562681193EF2F00843384</string>
|
||||
<string>6B2CDD181197FE370090FA4D</string>
|
||||
<string>6B10005C11AD08FA0098A59A</string>
|
||||
<string>6B10011E11AD19F90098A59A</string>
|
||||
<string>6B10011F11AD19F90098A59A</string>
|
||||
@ -467,7 +465,6 @@
|
||||
<string>6BF9B15511EB8CF20043574C</string>
|
||||
<string>6BF9B18B11EC2D470043574C</string>
|
||||
<string>6BF9B1EB11EC43120043574C</string>
|
||||
<string>6BF9B1FE11EC442C0043574C</string>
|
||||
<string>6BF9B14911EB8CF20043574C</string>
|
||||
<string>6BAF37D611FEAC16008CFCDF</string>
|
||||
<string>6BAF37FE11FEB4BB008CFCDF</string>
|
||||
@ -481,8 +478,6 @@
|
||||
<string>6BAF3863120A8A8E008CFCDF</string>
|
||||
<string>6BAF3864120A8A8E008CFCDF</string>
|
||||
<string>6BAF386B120A8B78008CFCDF</string>
|
||||
<string>6BAF386C120A8B78008CFCDF</string>
|
||||
<string>6BAF3877120AD32F008CFCDF</string>
|
||||
<string>6BAF3878120AD32F008CFCDF</string>
|
||||
<string>6BAF3879120AD32F008CFCDF</string>
|
||||
<string>6BAF387A120AD32F008CFCDF</string>
|
||||
@ -501,20 +496,15 @@
|
||||
<string>6BAF3919120FEB27008CFCDF</string>
|
||||
<string>6BAF391B120FEB27008CFCDF</string>
|
||||
<string>6BAF391C120FEB27008CFCDF</string>
|
||||
<string>6BAF3944120FEF7A008CFCDF</string>
|
||||
<string>6BBB4AD2115B4F3400CF791D</string>
|
||||
<string>6BAF3974120FF609008CFCDF</string>
|
||||
<string>6BAF3983120FF75F008CFCDF</string>
|
||||
<string>6BAF398E120FF809008CFCDF</string>
|
||||
<string>6BAF3990120FF809008CFCDF</string>
|
||||
<string>6BAF3992120FF809008CFCDF</string>
|
||||
<string>6BAF39CA1210074E008CFCDF</string>
|
||||
<string>6BAF39D512100A22008CFCDF</string>
|
||||
<string>6BAF39DE12100D84008CFCDF</string>
|
||||
<string>6BAF39E412100DA6008CFCDF</string>
|
||||
<string>6BAF39E912100DE4008CFCDF</string>
|
||||
<string>6BAF39EA12100DE4008CFCDF</string>
|
||||
<string>6BAF39F312100ED1008CFCDF</string>
|
||||
<string>6BAF3A3412102220008CFCDF</string>
|
||||
<string>6BAF3A3B1210235F008CFCDF</string>
|
||||
<string>6BAF3A3D1210235F008CFCDF</string>
|
||||
@ -558,6 +548,40 @@
|
||||
<string>6BAF3ABB121038F9008CFCDF</string>
|
||||
<string>6BAF3ABC121038F9008CFCDF</string>
|
||||
<string>6BAF3ABD121038F9008CFCDF</string>
|
||||
<string>6BAF3ACB12112937008CFCDF</string>
|
||||
<string>6BAF3ADD12112A65008CFCDF</string>
|
||||
<string>6BAF3ADE12112A65008CFCDF</string>
|
||||
<string>6BAF3ADF12112A65008CFCDF</string>
|
||||
<string>6BAF3AE012112A65008CFCDF</string>
|
||||
<string>6BAF3AE912112BBF008CFCDF</string>
|
||||
<string>6BAF3AF512112C6C008CFCDF</string>
|
||||
<string>6BAF3B0512112E63008CFCDF</string>
|
||||
<string>6BAF3B0612112E63008CFCDF</string>
|
||||
<string>6BAF3B1512112F65008CFCDF</string>
|
||||
<string>6BAF3B21121130D9008CFCDF</string>
|
||||
<string>6BAF3B291211334A008CFCDF</string>
|
||||
<string>6BAF3B38121137A7008CFCDF</string>
|
||||
<string>6BAF3B39121137A7008CFCDF</string>
|
||||
<string>6BAF3B3A121137A7008CFCDF</string>
|
||||
<string>6BAF3B41121137C7008CFCDF</string>
|
||||
<string>6BAF3B42121137C7008CFCDF</string>
|
||||
<string>6BAF3B47121138BE008CFCDF</string>
|
||||
<string>6BAF3B6312113D2F008CFCDF</string>
|
||||
<string>6BAF3B6412113D2F008CFCDF</string>
|
||||
<string>6BAF3B6F12113E1F008CFCDF</string>
|
||||
<string>6BAF3BA71211425E008CFCDF</string>
|
||||
<string>6BAF3BAB12114288008CFCDF</string>
|
||||
<string>6BAF3BB212114389008CFCDF</string>
|
||||
<string>6BAF3BB312114389008CFCDF</string>
|
||||
<string>6BAF3BBB121146D8008CFCDF</string>
|
||||
<string>6BAF3BBC121146D8008CFCDF</string>
|
||||
<string>6BAF3BC212114716008CFCDF</string>
|
||||
<string>6BAF3BC312114716008CFCDF</string>
|
||||
<string>6BAF3BCB1211472E008CFCDF</string>
|
||||
<string>6BAF3BDC12114B45008CFCDF</string>
|
||||
<string>6BAF3BDD12114B45008CFCDF</string>
|
||||
<string>6BAF3C00121151C3008CFCDF</string>
|
||||
<string>6BAF3C01121151C3008CFCDF</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>SplitCount</key>
|
||||
@ -571,18 +595,18 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {887, 530}}</string>
|
||||
<string>{{0, 0}, {887, 558}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>33 87 1173 691 0 0 1280 778 </string>
|
||||
<string>34 87 1173 691 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXNavigatorGroup</string>
|
||||
<key>Proportion</key>
|
||||
<string>530pt</string>
|
||||
<string>558pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>Proportion</key>
|
||||
<string>116pt</string>
|
||||
<string>88pt</string>
|
||||
<key>Tabs</key>
|
||||
<array>
|
||||
<dict>
|
||||
@ -650,9 +674,9 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{10, 27}, {887, 89}}</string>
|
||||
<string>{{10, 27}, {887, 61}}</string>
|
||||
<key>RubberWindowFrame</key>
|
||||
<string>33 87 1173 691 0 0 1280 778 </string>
|
||||
<string>34 87 1173 691 0 0 1280 778 </string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXBuildResultsModule</string>
|
||||
@ -735,12 +759,12 @@
|
||||
<key>GeometryConfiguration</key>
|
||||
<dict>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 0}, {1173, 344}}</string>
|
||||
<string>{{0, 0}, {1173, 323}}</string>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXDebugCLIModule</string>
|
||||
<key>Proportion</key>
|
||||
<string>344pt</string>
|
||||
<string>323pt</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>ContentConfiguration</key>
|
||||
@ -759,8 +783,8 @@
|
||||
<string>yes</string>
|
||||
<key>sizes</key>
|
||||
<array>
|
||||
<string>{{0, 0}, {532, 119}}</string>
|
||||
<string>{{532, 0}, {641, 119}}</string>
|
||||
<string>{{0, 0}, {536, 112}}</string>
|
||||
<string>{{536, 0}, {637, 112}}</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>VerticalSplitView</key>
|
||||
@ -775,8 +799,8 @@
|
||||
<string>yes</string>
|
||||
<key>sizes</key>
|
||||
<array>
|
||||
<string>{{0, 0}, {1173, 119}}</string>
|
||||
<string>{{0, 119}, {1173, 182}}</string>
|
||||
<string>{{0, 0}, {1173, 112}}</string>
|
||||
<string>{{0, 112}, {1173, 210}}</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
@ -796,7 +820,7 @@
|
||||
<key>DebugSTDIOWindowFrame</key>
|
||||
<string>{{200, 200}, {500, 300}}</string>
|
||||
<key>Frame</key>
|
||||
<string>{{0, 349}, {1173, 301}}</string>
|
||||
<string>{{0, 328}, {1173, 322}}</string>
|
||||
<key>PBXDebugSessionStackFrameViewKey</key>
|
||||
<dict>
|
||||
<key>DebugVariablesTableConfiguration</key>
|
||||
@ -806,16 +830,16 @@
|
||||
<string>Value</string>
|
||||
<real>85</real>
|
||||
<string>Summary</string>
|
||||
<real>348</real>
|
||||
<real>344</real>
|
||||
</array>
|
||||
<key>Frame</key>
|
||||
<string>{{532, 0}, {641, 119}}</string>
|
||||
<string>{{536, 0}, {637, 112}}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>Module</key>
|
||||
<string>PBXDebugSessionModule</string>
|
||||
<key>Proportion</key>
|
||||
<string>301pt</string>
|
||||
<string>322pt</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>Name</key>
|
||||
@ -872,13 +896,12 @@
|
||||
<integer>5</integer>
|
||||
<key>WindowOrderList</key>
|
||||
<array>
|
||||
<string>6BAF3AC4121039C7008CFCDF</string>
|
||||
<string>6BAF394F120FF023008CFCDF</string>
|
||||
<string>6BAF3950120FF023008CFCDF</string>
|
||||
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>
|
||||
</array>
|
||||
<key>WindowString</key>
|
||||
<string>33 87 1173 691 0 0 1280 778 </string>
|
||||
<string>34 87 1173 691 0 0 1280 778 </string>
|
||||
<key>WindowToolsV3</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
@ -30,6 +30,7 @@ class Sample_Debug : public Sample
|
||||
protected:
|
||||
rcCompactHeightfield* m_chf;
|
||||
rcContourSet* m_cset;
|
||||
rcPolyMesh* m_pmesh;
|
||||
|
||||
float m_ext[3];
|
||||
float m_center[3];
|
||||
|
@ -133,6 +133,7 @@ static bool getSteerTarget(dtNavMesh* navMesh, const float* startPos, const floa
|
||||
return false;
|
||||
|
||||
rcVcopy(steerPos, &steerPath[ns*3]);
|
||||
steerPos[1] = startPos[1];
|
||||
steerPosFlag = steerPathFlags[ns];
|
||||
steerPosRef = steerPathPolys[ns];
|
||||
|
||||
|
@ -52,7 +52,8 @@ static int loadBin(const char* path, unsigned char** data)
|
||||
|
||||
Sample_Debug::Sample_Debug() :
|
||||
m_chf(0),
|
||||
m_cset(0)
|
||||
m_cset(0),
|
||||
m_pmesh(0)
|
||||
{
|
||||
resetCommonSettings();
|
||||
|
||||
@ -138,9 +139,14 @@ Sample_Debug::Sample_Debug() :
|
||||
if (m_cset)
|
||||
{
|
||||
FileIO io;
|
||||
if (io.openForRead("test.cset"))
|
||||
if (io.openForRead("remove_vertex_issue_contour_cache.rc"))
|
||||
{
|
||||
duReadContourSet(*m_cset, &io);
|
||||
|
||||
printf("bmin=(%f,%f,%f) bmax=(%f,%f,%f)\n",
|
||||
m_cset->bmin[0], m_cset->bmin[1], m_cset->bmin[2],
|
||||
m_cset->bmax[0], m_cset->bmax[1], m_cset->bmax[2]);
|
||||
printf("cs=%f ch=%f\n", m_cset->cs, m_cset->ch);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -151,6 +157,16 @@ Sample_Debug::Sample_Debug() :
|
||||
{
|
||||
printf("Could not alloc cset\n");
|
||||
}
|
||||
|
||||
|
||||
if (m_cset)
|
||||
{
|
||||
m_pmesh = rcAllocPolyMesh();
|
||||
if (m_pmesh)
|
||||
{
|
||||
rcBuildPolyMesh(*m_cset, 6, *m_pmesh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -159,6 +175,7 @@ Sample_Debug::~Sample_Debug()
|
||||
{
|
||||
rcFreeCompactHeightfield(m_chf);
|
||||
rcFreeContourSet(m_cset);
|
||||
rcFreePolyMesh(m_pmesh);
|
||||
}
|
||||
|
||||
void Sample_Debug::handleSettings()
|
||||
@ -196,7 +213,16 @@ void Sample_Debug::handleRender()
|
||||
duDebugDrawCross(&dd, m_center[0], m_center[1], m_center[2], 1.0f, duRGBA(255,255,255,128), 2.0f);*/
|
||||
|
||||
if (m_cset)
|
||||
duDebugDrawRawContours(&dd, *m_cset);
|
||||
{
|
||||
duDebugDrawRawContours(&dd, *m_cset, 0.25f);
|
||||
// duDebugDrawContours(&dd, *m_cset);
|
||||
}
|
||||
|
||||
if (m_pmesh)
|
||||
{
|
||||
duDebugDrawPolyMesh(&dd, *m_pmesh);
|
||||
}
|
||||
|
||||
/*
|
||||
dd.depthMask(false);
|
||||
{
|
||||
@ -306,20 +332,24 @@ void Sample_Debug::handleMeshChanged(InputGeom* geom)
|
||||
|
||||
const float* Sample_Debug::getBoundsMin()
|
||||
{
|
||||
if (m_cset)
|
||||
return m_cset->bmin;
|
||||
if (m_chf)
|
||||
return m_chf->bmin;
|
||||
if (m_navMesh)
|
||||
return m_bmin;
|
||||
|
||||
if (!m_chf) return 0;
|
||||
return m_chf->bmin;
|
||||
return 0;
|
||||
}
|
||||
|
||||
const float* Sample_Debug::getBoundsMax()
|
||||
{
|
||||
if (m_cset)
|
||||
return m_cset->bmax;
|
||||
if (m_chf)
|
||||
return m_chf->bmax;
|
||||
if (m_navMesh)
|
||||
return m_bmax;
|
||||
|
||||
if (!m_chf) return 0;
|
||||
return m_chf->bmax;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Sample_Debug::handleClick(const float* p, bool shift)
|
||||
|
@ -709,7 +709,7 @@ bool Sample_SoloMeshTiled::handleBuild()
|
||||
m_cfg.mergeRegionSize = (int)rcSqr(m_regionMergeSize);
|
||||
m_cfg.maxVertsPerPoly = (int)m_vertsPerPoly;
|
||||
m_cfg.tileSize = (int)m_tileSize;
|
||||
m_cfg.borderSize = m_cfg.walkableRadius + 4; // Reserve enough padding.
|
||||
m_cfg.borderSize = m_cfg.walkableRadius + 3; // Reserve enough padding.
|
||||
m_cfg.detailSampleDist = m_detailSampleDist < 0.9f ? 0 : m_cellSize * m_detailSampleDist;
|
||||
m_cfg.detailSampleMaxError = m_cellHeight * m_detailSampleMaxError;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user