Allow dtNavMesh m_tileBits and m_polyBits to be zero.

This commit is contained in:
Mikko Mononen 2010-08-24 21:02:31 +00:00
parent 057c3e9bfd
commit 3f0995dc1c
6 changed files with 952 additions and 113 deletions

View File

@ -116,17 +116,6 @@ public:
// Returns: True if succeed, else false.
bool init(const dtNavMesh* nav, const int maxNodes);
// Sets the pathfinding cost of the specified area.
// Params:
// area - (in) area ID (0-63).
// cost - (int) travel cost of the area.
// void setAreaCost(const int area, float cost);
// Returns the pathfinding cost of the specified area.
// Params:
// area - (in) area ID (0-63).
// float getAreaCost(const int area) const;
// Finds the nearest navigation polygon around the center location.
// Params:
// center[3] - (in) The center of the search box.

View File

@ -202,8 +202,8 @@ bool dtNavMesh::init(const dtNavMeshParams* params)
}
// Init ID generator values.
m_tileBits = dtMax((unsigned int)1, dtIlog2(dtNextPow2((unsigned int)params->maxTiles)));
m_polyBits = dtMax((unsigned int)1, dtIlog2(dtNextPow2((unsigned int)params->maxPolys)));
m_tileBits = dtIlog2(dtNextPow2((unsigned int)params->maxTiles));
m_polyBits = dtIlog2(dtNextPow2((unsigned int)params->maxPolys));
m_saltBits = 32 - m_tileBits - m_polyBits;
if (m_saltBits < 10)
return false;

View File

@ -175,8 +175,37 @@ bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPo
const unsigned int ip = (unsigned int)(poly - tile->polys);
const dtPolyDetail* pd = &tile->detailMeshes[ip];
float closestDistSqr = FLT_MAX;
// TODO: The commented out version finds 'cylinder distance' instead of 'sphere distance' to the navmesh.
// Test and enable.
/*
// Clamp point to be inside the polygon.
float verts[DT_VERTS_PER_POLYGON*3];
float edged[DT_VERTS_PER_POLYGON];
float edget[DT_VERTS_PER_POLYGON];
const int nv = poly->vertCount;
for (int i = 0; i < nv; ++i)
dtVcopy(&verts[i*3], &tile->verts[poly->verts[i]*3]);
dtVcopy(closest, pos);
if (!dtDistancePtPolyEdgesSqr(pos, verts, nv, edged, edget))
{
// Point is outside the polygon, dtClamp to nearest edge.
float dmin = FLT_MAX;
int imin = -1;
for (int i = 0; i < nv; ++i)
{
if (edged[i] < dmin)
{
dmin = edged[i];
imin = i;
}
}
const float* va = &verts[imin*3];
const float* vb = &verts[((imin+1)%nv)*3];
dtVlerp(closest, va, vb, edget[imin]);
}
// Find height at the location.
for (int j = 0; j < pd->triCount; ++j)
{
const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4];
@ -188,9 +217,31 @@ bool dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPo
else
v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3];
}
float h;
if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h))
{
closest[1] = h;
break;
}
}
*/
float closestDistSqr = FLT_MAX;
for (int j = 0; j < pd->triCount; ++j)
{
const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4];
const float* v[3];
for (int k = 0; k < 3; ++k)
{
if (t[k] < poly->vertCount)
v[k] = &tile->verts[poly->verts[t[k]]*3];
else
v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3];
}
float pt[3];
dtClosestPtPointTriangle(pt, pos, v[0], v[1], v[2]);
float d = dtVdistSqr(pos, pt);
if (d < closestDistSqr)
{
dtVcopy(closest, pt);
@ -297,21 +348,6 @@ bool dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* heigh
return false;
}
/*
void dtNavMeshQuery::setAreaCost(const int area, float cost)
{
if (area >= 0 && area < DT_MAX_AREAS)
m_areaCost[area] = cost;
}
float dtNavMeshQuery::getAreaCost(const int area) const
{
if (area >= 0 && area < DT_MAX_AREAS)
return m_areaCost[area];
return -1;
}
*/
dtPolyRef dtNavMeshQuery::findNearestPoly(const float* center, const float* extents,
const dtQueryFilter* filter, float* nearestPt) const
{

File diff suppressed because it is too large Load Diff

View File

@ -283,14 +283,14 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array>
<array>
<integer>17</integer>
<integer>15</integer>
<integer>11</integer>
<integer>1</integer>
<integer>0</integer>
</array>
</array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
<string>{{0, 196}, {264, 660}}</string>
<string>{{0, 127}, {264, 660}}</string>
</dict>
<key>PBXTopSmartGroupGIDs</key>
<array/>
@ -337,7 +337,7 @@
<key>_historyCapacity</key>
<integer>0</integer>
<key>bookmark</key>
<string>6BD402C6122441CB00995864</string>
<string>6BD4036912246AD000995864</string>
<key>history</key>
<array>
<string>6BBB4AA5115B4F3400CF791D</string>
@ -356,7 +356,6 @@
<string>6BAF3CB412116AD9008CFCDF</string>
<string>6BAF3E781212869F008CFCDF</string>
<string>6BAF404F12140B4E008CFCDF</string>
<string>6BAF40F412197F3D008CFCDF</string>
<string>6BAF4321121AF998008CFCDF</string>
<string>6BAF43FB121C241D008CFCDF</string>
<string>6BAF4421121C25E3008CFCDF</string>
@ -380,11 +379,6 @@
<string>6BA687881222F4DB00730711</string>
<string>6BA687CA1222FA9300730711</string>
<string>6BA687D81222FC4700730711</string>
<string>6BA687E4122300C300730711</string>
<string>6BA688091223041E00730711</string>
<string>6BA688211223066C00730711</string>
<string>6BA6887B1223122200730711</string>
<string>6BA688D1122321D800730711</string>
<string>6BD4020A1224336600995864</string>
<string>6BD4020D1224336600995864</string>
<string>6BD4020E1224336600995864</string>
@ -408,19 +402,23 @@
<string>6BD4028C1224399300995864</string>
<string>6BD4029B12243A8000995864</string>
<string>6BD4029C12243A8000995864</string>
<string>6BD4029D12243A8000995864</string>
<string>6BD402A612243C8100995864</string>
<string>6BD402AB12243CEA00995864</string>
<string>6BD402AC12243CEA00995864</string>
<string>6BD402B4122441CB00995864</string>
<string>6BD402B5122441CB00995864</string>
<string>6BD402B6122441CB00995864</string>
<string>6BD402B7122441CB00995864</string>
<string>6BD402B8122441CB00995864</string>
<string>6BD402B9122441CB00995864</string>
<string>6BD402BA122441CB00995864</string>
<string>6BD402BB122441CB00995864</string>
<string>6BD4020B1224336600995864</string>
<string>6BD402C912244B9B00995864</string>
<string>6BD402CA12244B9B00995864</string>
<string>6BD402CB12244B9B00995864</string>
<string>6BD402CC12244B9B00995864</string>
<string>6BD4034D122464E100995864</string>
<string>6BD4034E122464E100995864</string>
<string>6BD40350122464E100995864</string>
<string>6BD4035E1224651B00995864</string>
<string>6BD4036612246AD000995864</string>
<string>6BD4036712246AD000995864</string>
</array>
<key>prevStack</key>
<array>
@ -483,7 +481,6 @@
<string>6BAF4762121DA31D008CFCDF</string>
<string>6BAF4767121DA31D008CFCDF</string>
<string>6BAF4768121DA31D008CFCDF</string>
<string>6B1C8DDB121EA3470048697F</string>
<string>6B1C8E2A121EB6D30048697F</string>
<string>6B1C8E2D121EB6D30048697F</string>
<string>6BA6874F1222EADA00730711</string>
@ -576,8 +573,31 @@
<string>6BD402C1122441CB00995864</string>
<string>6BD402C2122441CB00995864</string>
<string>6BD402C3122441CB00995864</string>
<string>6BD402C4122441CB00995864</string>
<string>6BD402C5122441CB00995864</string>
<string>6BD402CE12244B9B00995864</string>
<string>6BD402CF12244B9B00995864</string>
<string>6BD402D012244B9B00995864</string>
<string>6BD402D112244B9B00995864</string>
<string>6BD403251224632E00995864</string>
<string>6BD403261224632E00995864</string>
<string>6BD403271224632E00995864</string>
<string>6BD403281224632E00995864</string>
<string>6BD4032D1224634E00995864</string>
<string>6BD40336122463B500995864</string>
<string>6BD403451224642600995864</string>
<string>6BD40353122464E100995864</string>
<string>6BD40354122464E100995864</string>
<string>6BD40355122464E100995864</string>
<string>6BD40356122464E100995864</string>
<string>6BD40357122464E100995864</string>
<string>6BD40358122464E100995864</string>
<string>6BD40359122464E100995864</string>
<string>6BD4035A122464E100995864</string>
<string>6BD403601224651B00995864</string>
<string>6BD403611224651B00995864</string>
<string>6BD403621224651B00995864</string>
<string>6BD403631224651B00995864</string>
<string>6BD4036812246AD000995864</string>
</array>
</dict>
<key>SplitCount</key>
@ -591,18 +611,18 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{0, 0}, {994, 434}}</string>
<string>{{0, 0}, {994, 471}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1280 719 0 0 1280 778 </string>
</dict>
<key>Module</key>
<string>PBXNavigatorGroup</string>
<key>Proportion</key>
<string>434pt</string>
<string>471pt</string>
</dict>
<dict>
<key>Proportion</key>
<string>239pt</string>
<string>202pt</string>
<key>Tabs</key>
<array>
<dict>
@ -632,7 +652,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {994, 212}}</string>
<string>{{10, 27}, {994, -27}}</string>
</dict>
<key>Module</key>
<string>PBXProjectFindModule</string>
@ -670,7 +690,7 @@
<key>GeometryConfiguration</key>
<dict>
<key>Frame</key>
<string>{{10, 27}, {994, 212}}</string>
<string>{{10, 27}, {994, 175}}</string>
<key>RubberWindowFrame</key>
<string>0 59 1280 719 0 0 1280 778 </string>
</dict>
@ -824,9 +844,9 @@
<string>Name</string>
<real>183</real>
<string>Value</string>
<real>85</real>
<real>168</real>
<string>Summary</string>
<real>410</real>
<real>327</real>
</array>
<key>Frame</key>
<string>{{577, 0}, {703, 144}}</string>
@ -892,6 +912,8 @@
<integer>5</integer>
<key>WindowOrderList</key>
<array>
<string>6BD40332122463A200995864</string>
<string>6BD40333122463A200995864</string>
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>
</array>
<key>WindowString</key>