Issue 60: fixed end of path issues in findStraightPath().

This commit is contained in:
Mikko Mononen 2010-04-13 07:38:57 +00:00
parent 77cc2b9eef
commit 1d8c7dac84
5 changed files with 564 additions and 2395 deletions

View File

@ -1568,19 +1568,24 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
vcopy(portalApex, portalLeft); vcopy(portalApex, portalLeft);
apexIndex = leftIndex; apexIndex = leftIndex;
unsigned char flags = (leftPolyType == DT_POLYTYPE_OFFMESH_CONNECTION) ? DT_STRAIGHTPATH_OFFMESH_CONNECTION : 0; unsigned char flags = 0;
if (!leftPolyRef)
flags = DT_STRAIGHTPATH_END;
else if (rightPolyType == DT_POLYTYPE_OFFMESH_CONNECTION)
flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION;
dtPolyRef ref = leftPolyRef; dtPolyRef ref = leftPolyRef;
if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex)) if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex))
{ {
// Append new vertex.
vcopy(&straightPath[straightPathSize*3], portalApex); vcopy(&straightPath[straightPathSize*3], portalApex);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = flags; straightPathFlags[straightPathSize] = flags;
if (straightPathRefs) if (straightPathRefs)
straightPathRefs[straightPathSize] = ref; straightPathRefs[straightPathSize] = ref;
straightPathSize++; straightPathSize++;
if (straightPathSize >= maxStraightPathSize) // If reached end of path or there is no space to append more vertices, return.
if (flags == DT_STRAIGHTPATH_END || straightPathSize >= maxStraightPathSize)
return straightPathSize; return straightPathSize;
} }
else else
@ -1619,19 +1624,24 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
vcopy(portalApex, portalRight); vcopy(portalApex, portalRight);
apexIndex = rightIndex; apexIndex = rightIndex;
unsigned char flags = (rightPolyType == DT_POLYTYPE_OFFMESH_CONNECTION) ? DT_STRAIGHTPATH_OFFMESH_CONNECTION : 0; unsigned char flags = 0;
if (!rightPolyRef)
flags = DT_STRAIGHTPATH_END;
else if (rightPolyType == DT_POLYTYPE_OFFMESH_CONNECTION)
flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION;
dtPolyRef ref = rightPolyRef; dtPolyRef ref = rightPolyRef;
if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex)) if (!vequal(&straightPath[(straightPathSize-1)*3], portalApex))
{ {
// Append new vertex.
vcopy(&straightPath[straightPathSize*3], portalApex); vcopy(&straightPath[straightPathSize*3], portalApex);
if (straightPathFlags) if (straightPathFlags)
straightPathFlags[straightPathSize] = flags; straightPathFlags[straightPathSize] = flags;
if (straightPathRefs) if (straightPathRefs)
straightPathRefs[straightPathSize] = ref; straightPathRefs[straightPathSize] = ref;
straightPathSize++; straightPathSize++;
if (straightPathSize >= maxStraightPathSize) // If reached end of path or there is no space to append more vertices, return.
if (flags == DT_STRAIGHTPATH_END || straightPathSize >= maxStraightPathSize)
return straightPathSize; return straightPathSize;
} }
else else
@ -1657,14 +1667,20 @@ int dtNavMesh::findStraightPath(const float* startPos, const float* endPos,
} }
} }
// If the point already exists, remove it and add reappend the actual end location.
if (straightPathSize && vequal(&straightPath[(straightPathSize-1)*3], closestEndPos))
straightPathSize--;
// Add end point. // Add end point.
vcopy(&straightPath[straightPathSize*3], closestEndPos); if (straightPathSize < maxStraightPathSize)
if (straightPathFlags) {
straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_END; vcopy(&straightPath[straightPathSize*3], closestEndPos);
if (straightPathRefs) if (straightPathFlags)
straightPathRefs[straightPathSize] = 0; straightPathFlags[straightPathSize] = DT_STRAIGHTPATH_END;
if (straightPathRefs)
straightPathSize++; straightPathRefs[straightPathSize] = 0;
straightPathSize++;
}
return straightPathSize; return straightPathSize;
} }

File diff suppressed because it is too large Load Diff

View File

@ -270,6 +270,7 @@
<string>6BB93C7610CFE1BD00F74F2B</string> <string>6BB93C7610CFE1BD00F74F2B</string>
<string>6BDD9E030F91110C00904EEF</string> <string>6BDD9E030F91110C00904EEF</string>
<string>6B555DF5100B25FC00247EA3</string> <string>6B555DF5100B25FC00247EA3</string>
<string>6BB7FE8E10F4A175006DA0A6</string>
<string>29B97315FDCFA39411CA2CEA</string> <string>29B97315FDCFA39411CA2CEA</string>
<string>29B97317FDCFA39411CA2CEA</string> <string>29B97317FDCFA39411CA2CEA</string>
<string>29B97323FDCFA39411CA2CEA</string> <string>29B97323FDCFA39411CA2CEA</string>
@ -281,14 +282,14 @@
<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
<array> <array>
<array> <array>
<integer>13</integer> <integer>37</integer>
<integer>12</integer> <integer>33</integer>
<integer>1</integer> <integer>1</integer>
<integer>0</integer> <integer>0</integer>
</array> </array>
</array> </array>
<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
<string>{{0, 52}, {264, 643}}</string> <string>{{0, 217}, {264, 643}}</string>
</dict> </dict>
<key>PBXTopSmartGroupGIDs</key> <key>PBXTopSmartGroupGIDs</key>
<array/> <array/>
@ -305,7 +306,7 @@
<real>264</real> <real>264</real>
</array> </array>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>11 76 1256 702 0 0 1280 778 </string> <string>13 75 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXSmartGroupTreeModule</string> <string>PBXSmartGroupTreeModule</string>
@ -323,7 +324,7 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>Sample_TileMesh.cpp</string> <string>DetourNavMesh.cpp</string>
<key>PBXSplitModuleInNavigatorKey</key> <key>PBXSplitModuleInNavigatorKey</key>
<dict> <dict>
<key>Split0</key> <key>Split0</key>
@ -331,11 +332,11 @@
<key>PBXProjectModuleGUID</key> <key>PBXProjectModuleGUID</key>
<string>6B8632A40F78115100E2684A</string> <string>6B8632A40F78115100E2684A</string>
<key>PBXProjectModuleLabel</key> <key>PBXProjectModuleLabel</key>
<string>Sample_TileMesh.cpp</string> <string>DetourNavMesh.cpp</string>
<key>_historyCapacity</key> <key>_historyCapacity</key>
<integer>0</integer> <integer>0</integer>
<key>bookmark</key> <key>bookmark</key>
<string>6BBB4C5F115B8BF700CF791D</string> <string>6BED8AF81174570F00582F38</string>
<key>history</key> <key>history</key>
<array> <array>
<string>6BBB4A94115B4F3400CF791D</string> <string>6BBB4A94115B4F3400CF791D</string>
@ -361,7 +362,6 @@
<string>6BBB4AAA115B4F3400CF791D</string> <string>6BBB4AAA115B4F3400CF791D</string>
<string>6BBB4AAB115B4F3400CF791D</string> <string>6BBB4AAB115B4F3400CF791D</string>
<string>6BBB4AAC115B4F3400CF791D</string> <string>6BBB4AAC115B4F3400CF791D</string>
<string>6BBB4AAF115B4F3400CF791D</string>
<string>6BBB4AB0115B4F3400CF791D</string> <string>6BBB4AB0115B4F3400CF791D</string>
<string>6BBB4AB1115B4F3400CF791D</string> <string>6BBB4AB1115B4F3400CF791D</string>
<string>6BBB4AB2115B4F3400CF791D</string> <string>6BBB4AB2115B4F3400CF791D</string>
@ -385,22 +385,23 @@
<string>6BBB4AC9115B4F3400CF791D</string> <string>6BBB4AC9115B4F3400CF791D</string>
<string>6BBB4ACB115B4F3400CF791D</string> <string>6BBB4ACB115B4F3400CF791D</string>
<string>6BBB4ACD115B4F3400CF791D</string> <string>6BBB4ACD115B4F3400CF791D</string>
<string>6BBB4B2D115B5B3200CF791D</string>
<string>6BBB4B7A115B639200CF791D</string> <string>6BBB4B7A115B639200CF791D</string>
<string>6BBB4B7D115B639200CF791D</string> <string>6BBB4B7D115B639200CF791D</string>
<string>6BBB4B7E115B639200CF791D</string>
<string>6BBB4B7F115B639200CF791D</string> <string>6BBB4B7F115B639200CF791D</string>
<string>6BBB4BDA115B679300CF791D</string> <string>6BBB4BDA115B679300CF791D</string>
<string>6BBB4BE6115B69BE00CF791D</string> <string>6BBB4BE6115B69BE00CF791D</string>
<string>6BBB4C34115B7A3D00CF791D</string> <string>6BBB4C34115B7A3D00CF791D</string>
<string>6BBB4C38115B7A3D00CF791D</string> <string>6BBB4C38115B7A3D00CF791D</string>
<string>6BBB4C58115B8BF700CF791D</string>
<string>6BBB4C59115B8BF700CF791D</string> <string>6BBB4C59115B8BF700CF791D</string>
<string>6BBB4C5A115B8BF700CF791D</string> <string>6BED8AD41174509800582F38</string>
<string>6BED8AE2117451EB00582F38</string>
<string>6BED8AEE117455CB00582F38</string>
<string>6BED8AF21174567000582F38</string>
<string>6BED8AF31174567000582F38</string>
</array> </array>
<key>nextStack</key> <key>nextStack</key>
<array> <array>
<string>6BBB4C5E115B8BF700CF791D</string> <string>6BED8AF41174567000582F38</string>
</array> </array>
<key>prevStack</key> <key>prevStack</key>
<array> <array>
@ -408,12 +409,7 @@
<string>6BBB4AD2115B4F3400CF791D</string> <string>6BBB4AD2115B4F3400CF791D</string>
<string>6BBB4AD3115B4F3400CF791D</string> <string>6BBB4AD3115B4F3400CF791D</string>
<string>6BBB4AD4115B4F3400CF791D</string> <string>6BBB4AD4115B4F3400CF791D</string>
<string>6BBB4AD5115B4F3400CF791D</string>
<string>6BBB4AD6115B4F3400CF791D</string>
<string>6BBB4AD7115B4F3400CF791D</string>
<string>6BBB4AD8115B4F3400CF791D</string> <string>6BBB4AD8115B4F3400CF791D</string>
<string>6BBB4AD9115B4F3400CF791D</string>
<string>6BBB4ADB115B4F3400CF791D</string>
<string>6BBB4ADD115B4F3400CF791D</string> <string>6BBB4ADD115B4F3400CF791D</string>
<string>6BBB4ADE115B4F3400CF791D</string> <string>6BBB4ADE115B4F3400CF791D</string>
<string>6BBB4ADF115B4F3400CF791D</string> <string>6BBB4ADF115B4F3400CF791D</string>
@ -435,11 +431,7 @@
<string>6BBB4AEF115B4F3400CF791D</string> <string>6BBB4AEF115B4F3400CF791D</string>
<string>6BBB4AF0115B4F3400CF791D</string> <string>6BBB4AF0115B4F3400CF791D</string>
<string>6BBB4AF1115B4F3400CF791D</string> <string>6BBB4AF1115B4F3400CF791D</string>
<string>6BBB4AF2115B4F3400CF791D</string>
<string>6BBB4AF3115B4F3400CF791D</string>
<string>6BBB4AF4115B4F3400CF791D</string> <string>6BBB4AF4115B4F3400CF791D</string>
<string>6BBB4AF5115B4F3400CF791D</string>
<string>6BBB4AF6115B4F3400CF791D</string>
<string>6BBB4AF7115B4F3400CF791D</string> <string>6BBB4AF7115B4F3400CF791D</string>
<string>6BBB4AF8115B4F3400CF791D</string> <string>6BBB4AF8115B4F3400CF791D</string>
<string>6BBB4AF9115B4F3400CF791D</string> <string>6BBB4AF9115B4F3400CF791D</string>
@ -466,83 +458,11 @@
<string>6BBB4B0F115B4F3400CF791D</string> <string>6BBB4B0F115B4F3400CF791D</string>
<string>6BBB4B10115B4F3400CF791D</string> <string>6BBB4B10115B4F3400CF791D</string>
<string>6BBB4B11115B4F3400CF791D</string> <string>6BBB4B11115B4F3400CF791D</string>
<string>6BBB4B14115B4F3400CF791D</string>
<string>6BBB4B3A115B5BFA00CF791D</string> <string>6BBB4B3A115B5BFA00CF791D</string>
<string>6BBB4B3C115B5BFA00CF791D</string>
<string>6BBB4B41115B5D4B00CF791D</string>
<string>6BBB4B43115B5D4B00CF791D</string>
<string>6BBB4B45115B5D4B00CF791D</string>
<string>6BBB4B47115B5D4B00CF791D</string>
<string>6BBB4B49115B5D4B00CF791D</string>
<string>6BBB4B4E115B5DD900CF791D</string>
<string>6BBB4B5E115B609F00CF791D</string>
<string>6BBB4B60115B609F00CF791D</string>
<string>6BBB4B62115B609F00CF791D</string>
<string>6BBB4B64115B609F00CF791D</string>
<string>6BBB4B66115B609F00CF791D</string>
<string>6BBB4B68115B609F00CF791D</string>
<string>6BBB4B6A115B609F00CF791D</string>
<string>6BBB4B6C115B609F00CF791D</string>
<string>6BBB4B6E115B609F00CF791D</string>
<string>6BBB4B85115B639200CF791D</string>
<string>6BBB4B87115B639200CF791D</string> <string>6BBB4B87115B639200CF791D</string>
<string>6BBB4B88115B639200CF791D</string>
<string>6BBB4B8A115B639200CF791D</string>
<string>6BBB4B8C115B639200CF791D</string>
<string>6BBB4B8E115B639200CF791D</string>
<string>6BBB4B90115B639200CF791D</string>
<string>6BBB4B92115B639200CF791D</string>
<string>6BBB4B95115B639200CF791D</string>
<string>6BBB4B96115B639200CF791D</string>
<string>6BBB4B97115B639200CF791D</string>
<string>6BBB4B98115B639200CF791D</string>
<string>6BBB4B99115B639200CF791D</string>
<string>6BBB4B9A115B639200CF791D</string>
<string>6BBB4B9B115B639200CF791D</string>
<string>6BBB4B9C115B639200CF791D</string>
<string>6BBB4B9D115B639200CF791D</string>
<string>6BBB4B9E115B639200CF791D</string>
<string>6BBB4B9F115B639200CF791D</string>
<string>6BBB4BA0115B639200CF791D</string>
<string>6BBB4BA1115B639200CF791D</string>
<string>6BBB4BA2115B639200CF791D</string>
<string>6BBB4BA3115B639200CF791D</string>
<string>6BBB4BB1115B649700CF791D</string>
<string>6BBB4BCC115B653C00CF791D</string>
<string>6BBB4BE0115B679300CF791D</string>
<string>6BBB4BE1115B679300CF791D</string>
<string>6BBB4BE3115B679300CF791D</string>
<string>6BBB4BE8115B69BE00CF791D</string>
<string>6BBB4BED115B6B8A00CF791D</string>
<string>6BBB4BEF115B6B8A00CF791D</string>
<string>6BBB4BF1115B6B8A00CF791D</string>
<string>6BBB4BF3115B6B8A00CF791D</string>
<string>6BBB4BF5115B6B8A00CF791D</string>
<string>6BBB4BF7115B6B8A00CF791D</string>
<string>6BBB4BFF115B6D9C00CF791D</string>
<string>6BBB4C01115B6D9C00CF791D</string>
<string>6BBB4C03115B6D9C00CF791D</string>
<string>6BBB4C0A115B6E0200CF791D</string>
<string>6BBB4C10115B72F400CF791D</string>
<string>6BBB4C12115B72F400CF791D</string>
<string>6BBB4C17115B758400CF791D</string>
<string>6BBB4C18115B758400CF791D</string>
<string>6BBB4C19115B758400CF791D</string>
<string>6BBB4C1A115B758400CF791D</string>
<string>6BBB4C1B115B758400CF791D</string>
<string>6BBB4C22115B784C00CF791D</string>
<string>6BBB4C24115B784C00CF791D</string>
<string>6BBB4C26115B784C00CF791D</string>
<string>6BBB4C28115B784C00CF791D</string>
<string>6BBB4C2A115B784C00CF791D</string>
<string>6BBB4C2C115B784C00CF791D</string>
<string>6BBB4C3B115B7A3D00CF791D</string> <string>6BBB4C3B115B7A3D00CF791D</string>
<string>6BBB4C3F115B7A3D00CF791D</string> <string>6BED8AD61174509800582F38</string>
<string>6BBB4C41115B7A3D00CF791D</string> <string>6BED8AF0117455CB00582F38</string>
<string>6BBB4C43115B7A3D00CF791D</string>
<string>6BBB4C5B115B8BF700CF791D</string>
<string>6BBB4C5C115B8BF700CF791D</string>
<string>6BBB4C5D115B8BF700CF791D</string>
</array> </array>
</dict> </dict>
<key>SplitCount</key> <key>SplitCount</key>
@ -558,7 +478,7 @@
<key>Frame</key> <key>Frame</key>
<string>{{0, 0}, {970, 564}}</string> <string>{{0, 0}, {970, 564}}</string>
<key>RubberWindowFrame</key> <key>RubberWindowFrame</key>
<string>11 76 1256 702 0 0 1280 778 </string> <string>13 75 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXNavigatorGroup</string> <string>PBXNavigatorGroup</string>
@ -581,7 +501,9 @@
<key>GeometryConfiguration</key> <key>GeometryConfiguration</key>
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {876, 55}}</string> <string>{{10, 27}, {970, 65}}</string>
<key>RubberWindowFrame</key>
<string>13 75 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>XCDetailModule</string> <string>XCDetailModule</string>
@ -636,8 +558,6 @@
<dict> <dict>
<key>Frame</key> <key>Frame</key>
<string>{{10, 27}, {970, 65}}</string> <string>{{10, 27}, {970, 65}}</string>
<key>RubberWindowFrame</key>
<string>11 76 1256 702 0 0 1280 778 </string>
</dict> </dict>
<key>Module</key> <key>Module</key>
<string>PBXBuildResultsModule</string> <string>PBXBuildResultsModule</string>
@ -665,11 +585,11 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>6BBB4B17115B4F3400CF791D</string> <string>6BED8AE6117451EB00582F38</string>
<string>1CA23ED40692098700951B8B</string> <string>1CA23ED40692098700951B8B</string>
<string>6BBB4B18115B4F3400CF791D</string> <string>6BED8AE7117451EB00582F38</string>
<string>6B8632A30F78115100E2684A</string> <string>6B8632A30F78115100E2684A</string>
<string>6BBB4B19115B4F3400CF791D</string> <string>6BED8AE8117451EB00582F38</string>
<string>1CA23EDF0692099D00951B8B</string> <string>1CA23EDF0692099D00951B8B</string>
<string>1CA23EE00692099D00951B8B</string> <string>1CA23EE00692099D00951B8B</string>
<string>1CA23EE10692099D00951B8B</string> <string>1CA23EE10692099D00951B8B</string>
@ -818,14 +738,14 @@
</array> </array>
<key>TableOfContents</key> <key>TableOfContents</key>
<array> <array>
<string>6BBB4B1A115B4F3400CF791D</string> <string>6BED8AE9117451EB00582F38</string>
<string>1CCC7628064C1048000F2A68</string> <string>1CCC7628064C1048000F2A68</string>
<string>1CCC7629064C1048000F2A68</string> <string>1CCC7629064C1048000F2A68</string>
<string>6BBB4B1B115B4F3400CF791D</string> <string>6BED8AEA117451EB00582F38</string>
<string>6BBB4B1C115B4F3400CF791D</string> <string>6BED8AEB117451EB00582F38</string>
<string>6BBB4B1D115B4F3400CF791D</string> <string>6BED8AEC117451EB00582F38</string>
<string>6BBB4B1E115B4F3400CF791D</string> <string>6BED8AED117451EB00582F38</string>
<string>6BBB4B1F115B4F3400CF791D</string> <string>6B8632A30F78115100E2684A</string>
</array> </array>
<key>ToolbarConfigUserDefaultsMinorVersion</key> <key>ToolbarConfigUserDefaultsMinorVersion</key>
<string>2</string> <string>2</string>
@ -857,12 +777,10 @@
<integer>5</integer> <integer>5</integer>
<key>WindowOrderList</key> <key>WindowOrderList</key>
<array> <array>
<string>6BBB4BB4115B649700CF791D</string>
<string>6BBB4BB5115B649700CF791D</string>
<string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string> <string>/Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj</string>
</array> </array>
<key>WindowString</key> <key>WindowString</key>
<string>11 76 1256 702 0 0 1280 778 </string> <string>13 75 1256 702 0 0 1280 778 </string>
<key>WindowToolsV3</key> <key>WindowToolsV3</key>
<array> <array>
<dict> <dict>

View File

@ -707,19 +707,21 @@ void NavMeshTesterTool::handleRender()
static const unsigned int endCol = duRGBA(51,102,0,129); static const unsigned int endCol = duRGBA(51,102,0,129);
static const unsigned int pathCol = duRGBA(0,0,0,64); static const unsigned int pathCol = duRGBA(0,0,0,64);
glDepthMask(GL_FALSE);
const float agentRadius = m_sample->getAgentRadius(); const float agentRadius = m_sample->getAgentRadius();
const float agentHeight = m_sample->getAgentHeight(); const float agentHeight = m_sample->getAgentHeight();
const float agentClimb = m_sample->getAgentClimb(); const float agentClimb = m_sample->getAgentClimb();
dd.depthMask(false);
if (m_sposSet) if (m_sposSet)
drawAgent(m_spos, agentRadius, agentHeight, agentClimb, startCol); drawAgent(m_spos, agentRadius, agentHeight, agentClimb, startCol);
if (m_eposSet) if (m_eposSet)
drawAgent(m_epos, agentRadius, agentHeight, agentClimb, endCol); drawAgent(m_epos, agentRadius, agentHeight, agentClimb, endCol);
dd.depthMask(true);
if (!m_navMesh) if (!m_navMesh)
{
return; return;
}
if (m_toolMode == TOOLMODE_PATHFIND_ITER) if (m_toolMode == TOOLMODE_PATHFIND_ITER)
{ {
@ -734,17 +736,20 @@ void NavMeshTesterTool::handleRender()
if (m_nsmoothPath) if (m_nsmoothPath)
{ {
dd.depthMask(false);
const unsigned int pathCol = duRGBA(0,0,0,220); const unsigned int pathCol = duRGBA(0,0,0,220);
dd.begin(DU_DRAW_LINES, 3.0f); dd.begin(DU_DRAW_LINES, 3.0f);
for (int i = 0; i < m_nsmoothPath; ++i) for (int i = 0; i < m_nsmoothPath; ++i)
dd.vertex(m_smoothPath[i*3], m_smoothPath[i*3+1]+0.1f, m_smoothPath[i*3+2], pathCol); dd.vertex(m_smoothPath[i*3], m_smoothPath[i*3+1]+0.1f, m_smoothPath[i*3+2], pathCol);
dd.end(); dd.end();
dd.depthMask(true);
} }
if (m_pathIterNum) if (m_pathIterNum)
{ {
duDebugDrawNavMeshPoly(&dd, m_navMesh, m_pathIterPolys[0], duRGBA(255,255,255,128)); duDebugDrawNavMeshPoly(&dd, m_navMesh, m_pathIterPolys[0], duRGBA(255,255,255,128));
dd.depthMask(false);
dd.begin(DU_DRAW_LINES, 1.0f); dd.begin(DU_DRAW_LINES, 1.0f);
const unsigned int prevCol = duRGBA(255,192,0,220); const unsigned int prevCol = duRGBA(255,192,0,220);
@ -770,6 +775,7 @@ void NavMeshTesterTool::handleRender()
} }
dd.end(); dd.end();
dd.depthMask(true);
} }
} }
else if (m_toolMode == TOOLMODE_PATHFIND_STRAIGHT) else if (m_toolMode == TOOLMODE_PATHFIND_STRAIGHT)
@ -785,6 +791,7 @@ void NavMeshTesterTool::handleRender()
if (m_nstraightPath) if (m_nstraightPath)
{ {
dd.depthMask(false);
const unsigned int pathCol = duRGBA(64,16,0,220); const unsigned int pathCol = duRGBA(64,16,0,220);
const unsigned int offMeshCol = duRGBA(128,96,0,220); const unsigned int offMeshCol = duRGBA(128,96,0,220);
dd.begin(DU_DRAW_LINES, 2.0f); dd.begin(DU_DRAW_LINES, 2.0f);
@ -815,6 +822,7 @@ void NavMeshTesterTool::handleRender()
dd.vertex(m_straightPath[i*3], m_straightPath[i*3+1]+0.4f, m_straightPath[i*3+2], pathCol); dd.vertex(m_straightPath[i*3], m_straightPath[i*3+1]+0.4f, m_straightPath[i*3+2], pathCol);
} }
dd.end(); dd.end();
dd.depthMask(true);
} }
} }
else if (m_toolMode == TOOLMODE_RAYCAST) else if (m_toolMode == TOOLMODE_RAYCAST)
@ -826,6 +834,7 @@ void NavMeshTesterTool::handleRender()
for (int i = 1; i < m_npolys; ++i) for (int i = 1; i < m_npolys; ++i)
duDebugDrawNavMeshPoly(&dd, m_navMesh, m_polys[i], pathCol); duDebugDrawNavMeshPoly(&dd, m_navMesh, m_polys[i], pathCol);
dd.depthMask(false);
const unsigned int pathCol = m_hitResult ? duRGBA(64,16,0,220) : duRGBA(240,240,240,220); const unsigned int pathCol = m_hitResult ? duRGBA(64,16,0,220) : duRGBA(240,240,240,220);
dd.begin(DU_DRAW_LINES, 2.0f); dd.begin(DU_DRAW_LINES, 2.0f);
for (int i = 0; i < m_nstraightPath-1; ++i) for (int i = 0; i < m_nstraightPath-1; ++i)
@ -849,22 +858,26 @@ void NavMeshTesterTool::handleRender()
m_hitPos[2] + m_hitNormal[2]*agentRadius, hitCol); m_hitPos[2] + m_hitNormal[2]*agentRadius, hitCol);
dd.end(); dd.end();
} }
dd.depthMask(true);
} }
} }
else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL) else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL)
{ {
duDebugDrawNavMeshPoly(&dd, m_navMesh, m_startRef, startCol); duDebugDrawNavMeshPoly(&dd, m_navMesh, m_startRef, startCol);
dd.depthMask(false);
duDebugDrawCircle(&dd, m_spos[0], m_spos[1]+agentHeight/2, m_spos[2], m_distanceToWall, duRGBA(64,16,0,220), 2.0f); duDebugDrawCircle(&dd, m_spos[0], m_spos[1]+agentHeight/2, m_spos[2], m_distanceToWall, duRGBA(64,16,0,220), 2.0f);
dd.begin(DU_DRAW_LINES, 3.0f); dd.begin(DU_DRAW_LINES, 3.0f);
dd.vertex(m_hitPos[0], m_hitPos[1] + 0.02f, m_hitPos[2], duRGBA(0,0,0,192)); dd.vertex(m_hitPos[0], m_hitPos[1] + 0.02f, m_hitPos[2], duRGBA(0,0,0,192));
dd.vertex(m_hitPos[0], m_hitPos[1] + agentHeight, m_hitPos[2], duRGBA(0,0,0,192)); dd.vertex(m_hitPos[0], m_hitPos[1] + agentHeight, m_hitPos[2], duRGBA(0,0,0,192));
dd.end(); dd.end();
dd.depthMask(true);
} }
else if (m_toolMode == TOOLMODE_FIND_POLYS_AROUND) else if (m_toolMode == TOOLMODE_FIND_POLYS_AROUND)
{ {
for (int i = 0; i < m_npolys; ++i) for (int i = 0; i < m_npolys; ++i)
{ {
duDebugDrawNavMeshPoly(&dd, m_navMesh, m_polys[i], pathCol); duDebugDrawNavMeshPoly(&dd, m_navMesh, m_polys[i], pathCol);
dd.depthMask(false);
if (m_parent[i]) if (m_parent[i])
{ {
float p0[3], p1[3]; float p0[3], p1[3];
@ -874,6 +887,7 @@ void NavMeshTesterTool::handleRender()
duDebugDrawArc(&dd, p0[0],p0[1],p0[2], p1[0],p1[1],p1[2], 0.25f, 0.0f, 0.4f, duRGBA(0,0,0,128), 2.0f); duDebugDrawArc(&dd, p0[0],p0[1],p0[2], p1[0],p1[1],p1[2], 0.25f, 0.0f, 0.4f, duRGBA(0,0,0,128), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
dd.depthMask(true);
} }
if (m_sposSet && m_eposSet) if (m_sposSet && m_eposSet)
@ -885,9 +899,7 @@ void NavMeshTesterTool::handleRender()
duDebugDrawCircle(&dd, m_spos[0], m_spos[1]+agentHeight/2, m_spos[2], dist, duRGBA(64,16,0,220), 2.0f); duDebugDrawCircle(&dd, m_spos[0], m_spos[1]+agentHeight/2, m_spos[2], dist, duRGBA(64,16,0,220), 2.0f);
dd.depthMask(true); dd.depthMask(true);
} }
} }
glDepthMask(GL_TRUE);
} }
void NavMeshTesterTool::handleRenderOverlay(double* proj, double* model, int* view) void NavMeshTesterTool::handleRenderOverlay(double* proj, double* model, int* view)