diff --git a/DebugUtils/Source/DetourDebugDraw.cpp b/DebugUtils/Source/DetourDebugDraw.cpp index 9ed12b8..405c5e0 100755 --- a/DebugUtils/Source/DetourDebugDraw.cpp +++ b/DebugUtils/Source/DetourDebugDraw.cpp @@ -100,7 +100,7 @@ static void drawPolyBoundaries(duDebugDraw* dd, const dtMeshHeader* header, } } if (con) - c = duRGBA(255,255,255,128); + c = duRGBA(255,255,255,64); else c = duRGBA(0,0,0,128); } diff --git a/DebugUtils/Source/RecastDebugDraw.cpp b/DebugUtils/Source/RecastDebugDraw.cpp index 5c3cb34..fe41dcf 100644 --- a/DebugUtils/Source/RecastDebugDraw.cpp +++ b/DebugUtils/Source/RecastDebugDraw.cpp @@ -235,9 +235,7 @@ void duDebugDrawHeightfieldSolid(duDebugDraw* dd, const rcHeightfield& hf) const int w = hf.width; const int h = hf.height; - - const int spanCount = getSpanCount(hf); - + dd->begin(DU_DRAW_QUADS); for (int y = 0; y < h; ++y) @@ -271,8 +269,6 @@ void duDebugDrawHeightfieldWalkable(duDebugDraw* dd, const rcHeightfield& hf) const int w = hf.width; const int h = hf.height; - const int spanCount = getSpanCount(hf); - dd->begin(DU_DRAW_QUADS); for (int y = 0; y < h; ++y) diff --git a/Detour/Include/DetourNavMesh.h b/Detour/Include/DetourNavMesh.h index d0809bf..c862df1 100644 --- a/Detour/Include/DetourNavMesh.h +++ b/Detour/Include/DetourNavMesh.h @@ -230,10 +230,11 @@ public: // startPos - (in) start position of the query. // endPos - (in) end position of the query. // t - (out) hit parameter along the segment, 0 if no hit. + // hitNormal - (out) normal of the nearest hit. // endRef - (out) ref to the last polygon which was processed. // Returns: Number of polygons in path or 0 if failed. int raycast(dtPolyRef startRef, const float* startPos, const float* endPos, - float& t, dtPolyRef* path, const int pathSize); + float& t, float* hitNormal, dtPolyRef* path, const int pathSize); // Returns distance to nearest wall from the specified location. // Params: diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index c83012b..217d0ae 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -1277,7 +1277,7 @@ bool dtNavMesh::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const } int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* endPos, - float& t, dtPolyRef* path, const int pathSize) + float& t, float* hitNormal, dtPolyRef* path, const int pathSize) { t = 0; @@ -1288,6 +1288,10 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* float verts[DT_VERTS_PER_POLYGON*3]; int n = 0; + hitNormal[0] = 0; + hitNormal[1] = 0; + hitNormal[2] = 0; + while (curRef) { // Cast ray against current polygon. @@ -1379,6 +1383,19 @@ int dtNavMesh::raycast(dtPolyRef centerRef, const float* startPos, const float* if (!nextRef) { // No neighbour, we hit a wall. + + // Calculate hit normal. + const int a = segMax; + const int b = segMax+1 < nv ? segMax+1 : 0; + const float* va = &verts[a*3]; + const float* vb = &verts[b*3]; + const float dx = vb[0] - va[0]; + const float dz = vb[2] - va[2]; + hitNormal[0] = dz; + hitNormal[1] = 0; + hitNormal[2] = -dx; + vnormalize(hitNormal); + return n; } diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index 6174e97..22dadfa 100755 Binary files a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast and b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast differ diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index 72a2a2f..71d445f 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -130,51 +130,73 @@ PBXFindDataSource_LocationID, ); }; - PBXPerProjectTemplateStateSaveDate = 282058966; - PBXWorkspaceStateSaveDate = 282058966; + PBXPerProjectTemplateStateSaveDate = 283083322; + PBXWorkspaceStateSaveDate = 283083322; }; perUserProjectItems = { - 6B57D358108C66B200DDD053 /* PBXTextBookmark */ = 6B57D358108C66B200DDD053 /* PBXTextBookmark */; - 6B7FB74D1091EBDE001BA51A /* PBXTextBookmark */ = 6B7FB74D1091EBDE001BA51A /* PBXTextBookmark */; - 6B8DE70D10B01BBF00DF20FB /* PBXTextBookmark */ = 6B8DE70D10B01BBF00DF20FB /* PBXTextBookmark */; - 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */ = 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */; - 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */; - 6B8DE84910B0584400DF20FB /* PBXTextBookmark */ = 6B8DE84910B0584400DF20FB /* PBXTextBookmark */; - 6B8DEA3810B6CBC200DF20FB /* PBXTextBookmark */ = 6B8DEA3810B6CBC200DF20FB /* PBXTextBookmark */; - 6B8DEAA110BC7BCD00DF20FB /* PBXTextBookmark */ = 6B8DEAA110BC7BCD00DF20FB /* PBXTextBookmark */; - 6BA1E63A10C1DB5B008007F6 /* PBXTextBookmark */ = 6BA1E63A10C1DB5B008007F6 /* PBXTextBookmark */; - 6BA1E7F210C7B3FF008007F6 /* PBXTextBookmark */ = 6BA1E7F210C7B3FF008007F6 /* PBXTextBookmark */; - 6BA1E89310C7C227008007F6 /* PBXTextBookmark */ = 6BA1E89310C7C227008007F6 /* PBXTextBookmark */; - 6BA1E8B010C7C5D1008007F6 /* PBXTextBookmark */ = 6BA1E8B010C7C5D1008007F6 /* PBXTextBookmark */; - 6BA1E8DB10C7CB62008007F6 /* PBXTextBookmark */ = 6BA1E8DB10C7CB62008007F6 /* PBXTextBookmark */; - 6BA1E8E410C7D2FA008007F6 /* PBXTextBookmark */ = 6BA1E8E410C7D2FA008007F6 /* PBXTextBookmark */; - 6BA1E8F210C7D4D9008007F6 /* PBXTextBookmark */ = 6BA1E8F210C7D4D9008007F6 /* PBXTextBookmark */; - 6BB4964510C8ECF300BC0805 /* PBXTextBookmark */ = 6BB4964510C8ECF300BC0805 /* PBXTextBookmark */; - 6BB4965E10C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4965E10C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4965F10C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4965F10C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4966110C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4966110C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4966510C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4966510C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4966810C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4966810C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4966A10C8F2AE00BC0805 /* PBXTextBookmark */ = 6BB4966A10C8F2AE00BC0805 /* PBXTextBookmark */; - 6BB4967C10C8F8F500BC0805 /* PBXTextBookmark */ = 6BB4967C10C8F8F500BC0805 /* PBXTextBookmark */; - 6BB93C8210CFE3B100F74F2B /* PBXTextBookmark */ = 6BB93C8210CFE3B100F74F2B /* PBXTextBookmark */; - 6BB93CCF10CFEA7A00F74F2B /* PBXTextBookmark */ = 6BB93CCF10CFEA7A00F74F2B /* PBXTextBookmark */; - 6BB93CD010CFEA7A00F74F2B /* PBXTextBookmark */ = 6BB93CD010CFEA7A00F74F2B /* PBXTextBookmark */; - 6BB93CD210CFEA7A00F74F2B /* PBXTextBookmark */ = 6BB93CD210CFEA7A00F74F2B /* PBXTextBookmark */; - 6BB93CD710CFEA7A00F74F2B /* PBXTextBookmark */ = 6BB93CD710CFEA7A00F74F2B /* PBXTextBookmark */; - 6BB93CD810CFEA7A00F74F2B /* PBXTextBookmark */ = 6BB93CD810CFEA7A00F74F2B /* PBXTextBookmark */; - 6BB93CE710CFEB5D00F74F2B /* PBXTextBookmark */ = 6BB93CE710CFEB5D00F74F2B /* PBXTextBookmark */; - 6BB93CEB10CFEB5D00F74F2B /* PBXTextBookmark */ = 6BB93CEB10CFEB5D00F74F2B /* PBXTextBookmark */; - 6BB93D0510CFFC1300F74F2B /* PBXTextBookmark */ = 6BB93D0510CFFC1300F74F2B /* PBXTextBookmark */; - 6BB93D0710CFFC1300F74F2B /* PBXTextBookmark */ = 6BB93D0710CFFC1300F74F2B /* PBXTextBookmark */; - 6BB93D0810CFFC1300F74F2B /* PBXTextBookmark */ = 6BB93D0810CFFC1300F74F2B /* PBXTextBookmark */; - 6BB93D0910CFFC1300F74F2B /* PBXTextBookmark */ = 6BB93D0910CFFC1300F74F2B /* PBXTextBookmark */; - 6BB93D0A10CFFC1300F74F2B /* PBXTextBookmark */ = 6BB93D0A10CFFC1300F74F2B /* PBXTextBookmark */; - 6BB93D1510CFFC6D00F74F2B /* PBXTextBookmark */ = 6BB93D1510CFFC6D00F74F2B /* PBXTextBookmark */; - 6BB93D1B10CFFD7600F74F2B /* PBXTextBookmark */ = 6BB93D1B10CFFD7600F74F2B /* PBXTextBookmark */; - 6BB93D1C10CFFD7600F74F2B /* PBXTextBookmark */ = 6BB93D1C10CFFD7600F74F2B /* PBXTextBookmark */; - 6BB93D1E10D001BA00F74F2B /* PBXTextBookmark */ = 6BB93D1E10D001BA00F74F2B /* PBXTextBookmark */; - 6BF2589310BE6F220061DCC9 /* PBXTextBookmark */ = 6BF2589310BE6F220061DCC9 /* PBXTextBookmark */; + 6B57D358108C66B200DDD053 = 6B57D358108C66B200DDD053 /* PBXTextBookmark */; + 6B7FB74D1091EBDE001BA51A = 6B7FB74D1091EBDE001BA51A /* PBXTextBookmark */; + 6B8DE70D10B01BBF00DF20FB = 6B8DE70D10B01BBF00DF20FB /* PBXTextBookmark */; + 6B8DE76D10B0243500DF20FB = 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */; + 6B8DE7F110B0517A00DF20FB = 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE84910B0584400DF20FB = 6B8DE84910B0584400DF20FB /* PBXTextBookmark */; + 6B8DEA3810B6CBC200DF20FB = 6B8DEA3810B6CBC200DF20FB /* PBXTextBookmark */; + 6B8DEAA110BC7BCD00DF20FB = 6B8DEAA110BC7BCD00DF20FB /* PBXTextBookmark */; + 6B98692510DF824E007D8D84 /* PBXTextBookmark */ = 6B98692510DF824E007D8D84 /* PBXTextBookmark */; + 6B98692610DF824E007D8D84 /* PBXTextBookmark */ = 6B98692610DF824E007D8D84 /* PBXTextBookmark */; + 6B98692710DF824E007D8D84 /* PBXTextBookmark */ = 6B98692710DF824E007D8D84 /* PBXTextBookmark */; + 6B98692810DF824E007D8D84 /* PBXTextBookmark */ = 6B98692810DF824E007D8D84 /* PBXTextBookmark */; + 6B98693110DF8929007D8D84 /* PBXTextBookmark */ = 6B98693110DF8929007D8D84 /* PBXTextBookmark */; + 6B98693210DF8929007D8D84 /* PBXTextBookmark */ = 6B98693210DF8929007D8D84 /* PBXTextBookmark */; + 6B98693310DF8929007D8D84 /* PBXTextBookmark */ = 6B98693310DF8929007D8D84 /* PBXTextBookmark */; + 6B98693410DF8929007D8D84 /* PBXTextBookmark */ = 6B98693410DF8929007D8D84 /* PBXTextBookmark */; + 6B98693510DF8929007D8D84 /* PBXTextBookmark */ = 6B98693510DF8929007D8D84 /* PBXTextBookmark */; + 6B98693610DF8929007D8D84 /* PBXTextBookmark */ = 6B98693610DF8929007D8D84 /* PBXTextBookmark */; + 6B98693710DF8929007D8D84 /* PBXTextBookmark */ = 6B98693710DF8929007D8D84 /* PBXTextBookmark */; + 6B98693810DF8929007D8D84 /* PBXTextBookmark */ = 6B98693810DF8929007D8D84 /* PBXTextBookmark */; + 6B98693910DF8929007D8D84 /* PBXTextBookmark */ = 6B98693910DF8929007D8D84 /* PBXTextBookmark */; + 6B98693A10DF8929007D8D84 /* PBXTextBookmark */ = 6B98693A10DF8929007D8D84 /* PBXTextBookmark */; + 6B98693B10DF8929007D8D84 /* PBXTextBookmark */ = 6B98693B10DF8929007D8D84 /* PBXTextBookmark */; + 6B98693C10DF8929007D8D84 /* PBXTextBookmark */ = 6B98693C10DF8929007D8D84 /* PBXTextBookmark */; + 6B98693D10DF8929007D8D84 /* PBXTextBookmark */ = 6B98693D10DF8929007D8D84 /* PBXTextBookmark */; + 6B98693E10DF8929007D8D84 /* PBXTextBookmark */ = 6B98693E10DF8929007D8D84 /* PBXTextBookmark */; + 6B98694710DF8982007D8D84 /* PBXTextBookmark */ = 6B98694710DF8982007D8D84 /* PBXTextBookmark */; + 6B98694810DF8982007D8D84 /* PBXTextBookmark */ = 6B98694810DF8982007D8D84 /* PBXTextBookmark */; + 6B98694910DF8982007D8D84 /* PBXTextBookmark */ = 6B98694910DF8982007D8D84 /* PBXTextBookmark */; + 6B98694A10DF8982007D8D84 /* PBXTextBookmark */ = 6B98694A10DF8982007D8D84 /* PBXTextBookmark */; + 6BA1E63A10C1DB5B008007F6 = 6BA1E63A10C1DB5B008007F6 /* PBXTextBookmark */; + 6BA1E7F210C7B3FF008007F6 = 6BA1E7F210C7B3FF008007F6 /* PBXTextBookmark */; + 6BA1E89310C7C227008007F6 = 6BA1E89310C7C227008007F6 /* PBXTextBookmark */; + 6BA1E8B010C7C5D1008007F6 = 6BA1E8B010C7C5D1008007F6 /* PBXTextBookmark */; + 6BA1E8DB10C7CB62008007F6 = 6BA1E8DB10C7CB62008007F6 /* PBXTextBookmark */; + 6BA1E8E410C7D2FA008007F6 = 6BA1E8E410C7D2FA008007F6 /* PBXTextBookmark */; + 6BA1E8F210C7D4D9008007F6 = 6BA1E8F210C7D4D9008007F6 /* PBXTextBookmark */; + 6BB4964510C8ECF300BC0805 = 6BB4964510C8ECF300BC0805 /* PBXTextBookmark */; + 6BB4965E10C8F2AE00BC0805 = 6BB4965E10C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4965F10C8F2AE00BC0805 = 6BB4965F10C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4966110C8F2AE00BC0805 = 6BB4966110C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4966510C8F2AE00BC0805 = 6BB4966510C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4966810C8F2AE00BC0805 = 6BB4966810C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4966A10C8F2AE00BC0805 = 6BB4966A10C8F2AE00BC0805 /* PBXTextBookmark */; + 6BB4967C10C8F8F500BC0805 = 6BB4967C10C8F8F500BC0805 /* PBXTextBookmark */; + 6BB93C8210CFE3B100F74F2B = 6BB93C8210CFE3B100F74F2B /* PBXTextBookmark */; + 6BB93CCF10CFEA7A00F74F2B = 6BB93CCF10CFEA7A00F74F2B /* PBXTextBookmark */; + 6BB93CD010CFEA7A00F74F2B = 6BB93CD010CFEA7A00F74F2B /* PBXTextBookmark */; + 6BB93CD210CFEA7A00F74F2B = 6BB93CD210CFEA7A00F74F2B /* PBXTextBookmark */; + 6BB93CD710CFEA7A00F74F2B = 6BB93CD710CFEA7A00F74F2B /* PBXTextBookmark */; + 6BB93CD810CFEA7A00F74F2B = 6BB93CD810CFEA7A00F74F2B /* PBXTextBookmark */; + 6BB93CE710CFEB5D00F74F2B = 6BB93CE710CFEB5D00F74F2B /* PBXTextBookmark */; + 6BB93CEB10CFEB5D00F74F2B = 6BB93CEB10CFEB5D00F74F2B /* PBXTextBookmark */; + 6BB93D0510CFFC1300F74F2B = 6BB93D0510CFFC1300F74F2B /* PBXTextBookmark */; + 6BB93D0710CFFC1300F74F2B = 6BB93D0710CFFC1300F74F2B /* PBXTextBookmark */; + 6BB93D0810CFFC1300F74F2B = 6BB93D0810CFFC1300F74F2B /* PBXTextBookmark */; + 6BB93D0910CFFC1300F74F2B = 6BB93D0910CFFC1300F74F2B /* PBXTextBookmark */; + 6BB93D0A10CFFC1300F74F2B = 6BB93D0A10CFFC1300F74F2B /* PBXTextBookmark */; + 6BB93D1510CFFC6D00F74F2B = 6BB93D1510CFFC6D00F74F2B /* PBXTextBookmark */; + 6BB93D1B10CFFD7600F74F2B = 6BB93D1B10CFFD7600F74F2B /* PBXTextBookmark */; + 6BB93D1C10CFFD7600F74F2B = 6BB93D1C10CFFD7600F74F2B /* PBXTextBookmark */; + 6BB93D1E10D001BA00F74F2B = 6BB93D1E10D001BA00F74F2B /* PBXTextBookmark */; + 6BF2589310BE6F220061DCC9 = 6BF2589310BE6F220061DCC9 /* PBXTextBookmark */; }; sourceControlManager = 6B8632A90F78115100E2684A /* Source Control */; userBookmarkGroup = 6B8DE6F010A88F0500DF20FB /* PBXBookmarkGroup */; @@ -204,7 +226,6 @@ lineNumber = 27; location = Recast; modificationTime = 281534653.905802; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B0249ED10037C0A00CF7107 /* DetourTileNavMesh.cpp:1 */ = { @@ -222,7 +243,6 @@ lineNumber = 1; location = Recast; modificationTime = 281534653.906114; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B0249EF10037C0C00CF7107 /* DetourTileNavMesh.cpp:1 */ = { @@ -240,7 +260,6 @@ lineNumber = 1; location = Recast; modificationTime = 281534653.906272; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B024AC01004AB3900CF7107 /* DetourTileNavMesh.cpp:1 */ = { @@ -258,7 +277,6 @@ lineNumber = 1; location = Recast; modificationTime = 281534653.9064361; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B1185F41006895B0018F96F /* DetourNode.cpp */ = { @@ -333,9 +351,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 9200}}"; - sepNavSelRange = "{11131, 0}"; - sepNavVisRange = "{10860, 552}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 9488}}"; + sepNavSelRange = "{11228, 0}"; + sepNavVisRange = "{10817, 598}"; }; }; 6B137C800F7FCBFE00459200 /* RecastLog.h */ = { @@ -374,11 +392,6 @@ name = RecastDebugDraw.cpp; path = /Users/memon/Code/recastnavigation/Recast/Source/RecastDebugDraw.cpp; sourceTree = ""; - uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {922, 14544}}"; - sepNavSelRange = "{8787, 0}"; - sepNavVisRange = "{8263, 853}"; - }; }; 6B137C850F7FCC1100459200 /* RecastFilter.cpp */ = { uiCtxt = { @@ -462,9 +475,9 @@ }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1223, 15536}}"; - sepNavSelRange = "{12939, 0}"; - sepNavVisRange = "{12811, 672}"; + sepNavIntBoundsRect = "{{0, 0}, {1146, 15744}}"; + sepNavSelRange = "{12353, 0}"; + sepNavVisRange = "{11481, 1138}"; }; }; 6B2AEC590FFB8A7A005BE9CC /* DetourTileNavMesh.cpp */ = { @@ -490,7 +503,6 @@ lineNumber = 281; location = Recast; modificationTime = 281534653.90745; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */ = { @@ -529,7 +541,6 @@ lineNumber = 622; location = Recast; modificationTime = 281534653.907625; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B57D358108C66B200DDD053 /* PBXTextBookmark */ = { @@ -557,7 +568,6 @@ lineNumber = 252; location = Recast; modificationTime = 281534653.9078138; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B624169103434880002E346 /* RecastMeshDetail.cpp */ = { @@ -589,9 +599,6 @@ configStateDict = { }; customDataFormattersEnabled = 1; - dataTipCustomDataFormattersEnabled = 1; - dataTipShowTypeColumn = 1; - dataTipSortType = 0; debuggerPlugin = GDBDebugging; disassemblyDisplayState = 0; dylibVariantSuffix = ""; @@ -604,7 +611,6 @@ name = Recast; savedGlobals = { }; - showTypeColumn = 0; sourceDirectories = ( ); variableFormatDictionary = { @@ -681,8 +687,8 @@ 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */ = { uiCtxt = { sepNavIntBoundsRect = "{{0, 0}, {915, 26800}}"; - sepNavSelRange = "{19570, 0}"; - sepNavVisRange = "{18975, 1282}"; + sepNavSelRange = "{35712, 0}"; + sepNavVisRange = "{35373, 693}"; }; }; 6B8DE88810B69E3E00DF20FB /* DetourNavMeshBuilder.cpp */ = { @@ -694,9 +700,9 @@ }; 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 6016}}"; - sepNavSelRange = "{1178, 0}"; - sepNavVisRange = "{915, 1064}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 5856}}"; + sepNavSelRange = "{10286, 0}"; + sepNavVisRange = "{9854, 1611}"; }; }; 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = { @@ -711,7 +717,7 @@ fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; name = detail; rLen = 0; - rLoc = 12759; + rLoc = 12826; rType = 0; vrLen = 1182; vrLoc = 9676; @@ -751,7 +757,6 @@ lineNumber = 281; location = Recast; modificationTime = 281534653.907283; - originalNumberOfMultipleMatches = 0; state = 1; }; 6B93FEFF1030443300F0C0DA /* Recast.cpp:281 */ = { @@ -769,9 +774,228 @@ lineNumber = 281; location = Recast; modificationTime = 281534653.90712; - originalNumberOfMultipleMatches = 0; state = 2; }; + 6B98692510DF824E007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 269"; + rLen = 0; + rLoc = 8023; + rType = 0; + vrLen = 716; + vrLoc = 7679; + }; + 6B98692610DF824E007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 19"; + rLen = 0; + rLoc = 919; + rType = 0; + vrLen = 1269; + vrLoc = 0; + }; + 6B98692710DF824E007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */; + name = "Sample_SoloMeshSimple.cpp: 269"; + rLen = 0; + rLoc = 8023; + rType = 0; + vrLen = 716; + vrLoc = 7679; + }; + 6B98692810DF824E007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 15"; + rLen = 0; + rLoc = 836; + rType = 0; + vrLen = 965; + vrLoc = 5002; + }; + 6B98693110DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 184"; + rLen = 0; + rLoc = 5238; + rType = 0; + vrLen = 965; + vrLoc = 5002; + }; + 6B98693210DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 237"; + rLen = 0; + rLoc = 10286; + rType = 0; + vrLen = 1611; + vrLoc = 9854; + }; + 6B98693310DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 329"; + rLen = 0; + rLoc = 11228; + rType = 0; + vrLen = 598; + vrLoc = 10817; + }; + 6B98693410DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1387"; + rLen = 0; + rLoc = 35712; + rType = 0; + vrLen = 693; + vrLoc = 35373; + }; + 6B98693510DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; + name = "Sample_SoloMesh.cpp: 358"; + rLen = 286; + rLoc = 8889; + rType = 0; + vrLen = 1217; + vrLoc = 8666; + }; + 6B98693610DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 185"; + rLen = 379; + rLoc = 4518; + rType = 0; + vrLen = 939; + vrLoc = 4236; + }; + 6B98693710DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 184"; + rLen = 0; + rLoc = 5238; + rType = 0; + vrLen = 965; + vrLoc = 5002; + }; + 6B98693810DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 237"; + rLen = 0; + rLoc = 10286; + rType = 0; + vrLen = 1611; + vrLoc = 9854; + }; + 6B98693910DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88710B69E3E00DF20FB /* DetourNavMesh.cpp */; + name = "DetourNavMesh.cpp: 1387"; + rLen = 0; + rLoc = 35712; + rType = 0; + vrLen = 693; + vrLoc = 35373; + }; + 6B98693A10DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 191"; + rLen = 0; + rLoc = 4807; + rType = 0; + vrLen = 932; + vrLoc = 4243; + }; + 6B98693B10DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; + name = "Sample_SoloMesh.cpp: 226"; + rLen = 0; + rLoc = 5520; + rType = 0; + vrLen = 730; + vrLoc = 4798; + }; + 6B98693C10DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 185"; + rLen = 379; + rLoc = 4518; + rType = 0; + vrLen = 932; + vrLoc = 4240; + }; + 6B98693D10DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; + name = "Sample_SoloMesh.cpp: 358"; + rLen = 286; + rLoc = 8889; + rType = 0; + vrLen = 1217; + vrLoc = 8666; + }; + 6B98693E10DF8929007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 478"; + rLen = 0; + rLoc = 12353; + rType = 0; + vrLen = 1034; + vrLoc = 11369; + }; + 6B98694710DF8982007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 476"; + rLen = 0; + rLoc = 12353; + rType = 0; + vrLen = 1138; + vrLoc = 11481; + }; + 6B98694810DF8982007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; + name = "Sample_SoloMesh.cpp: 358"; + rLen = 286; + rLoc = 8889; + rType = 0; + vrLen = 1213; + vrLoc = 8666; + }; + 6B98694910DF8982007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 476"; + rLen = 0; + rLoc = 12353; + rType = 0; + vrLen = 1138; + vrLoc = 11481; + }; + 6B98694A10DF8982007D8D84 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; + name = "Sample_SoloMesh.cpp: 360"; + rLen = 0; + rLoc = 9006; + rType = 0; + vrLen = 1169; + vrLoc = 8666; + }; 6B9D0891102715D5009B1A6C /* RecastTexture.cpp */ = { isa = PBXFileReference; fileEncoding = 4; @@ -794,7 +1018,6 @@ ignoreCount = 0; lineNumber = 301; modificationTime = 281534654.306096; - originalNumberOfMultipleMatches = 0; state = 0; }; 6B9D09921028542A009B1A6C /* RecastDebugDraw.cpp:29 */ = { @@ -812,7 +1035,6 @@ lineNumber = 29; location = Recast; modificationTime = 281534653.906959; - originalNumberOfMultipleMatches = 0; state = 2; }; 6BA1E63A10C1DB5B008007F6 /* PBXTextBookmark */ = { @@ -850,21 +1072,20 @@ lineNumber = 516; location = Recast; modificationTime = 281534653.90798; - originalNumberOfMultipleMatches = 0; state = 1; }; 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 6848}}"; - sepNavSelRange = "{9905, 0}"; - sepNavVisRange = "{9343, 728}"; + sepNavIntBoundsRect = "{{0, 0}, {1174, 6976}}"; + sepNavSelRange = "{9006, 0}"; + sepNavVisRange = "{8666, 1169}"; }; }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1160, 8848}}"; - sepNavSelRange = "{8152, 63}"; - sepNavVisRange = "{7681, 690}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 9840}}"; + sepNavSelRange = "{8023, 0}"; + sepNavVisRange = "{7679, 716}"; }; }; 6BA1E88910C7BFC9008007F6 /* Sample_SoloMeshTiled.cpp */ = { @@ -1076,9 +1297,9 @@ }; 6BB93C7C10CFE1D500F74F2B /* RecastDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 13280}}"; - sepNavSelRange = "{919, 0}"; - sepNavVisRange = "{0, 1139}"; + sepNavIntBoundsRect = "{{0, 0}, {922, 12736}}"; + sepNavSelRange = "{5238, 0}"; + sepNavVisRange = "{5002, 965}"; }; }; 6BB93C8210CFE3B100F74F2B /* PBXTextBookmark */ = { @@ -1126,7 +1347,7 @@ fRef = 6BA1E88710C7BFC9008007F6 /* Sample_SoloMesh.cpp */; name = "Sample_SoloMesh.cpp: 388"; rLen = 0; - rLoc = 9905; + rLoc = 10148; rType = 0; vrLen = 728; vrLoc = 9343; @@ -1136,7 +1357,7 @@ fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; name = "Sample_TileMesh.cpp: 497"; rLen = 0; - rLoc = 12939; + rLoc = 13161; rType = 0; vrLen = 672; vrLoc = 12811; @@ -1253,7 +1474,7 @@ rLen = 0; rLoc = 18793; rType = 0; - vrLen = 1702; + vrLen = 1562; vrLoc = 17248; }; 6BB93D1E10D001BA00F74F2B /* PBXTextBookmark */ = { diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index 5aa8940..9e0de85 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -195,32 +195,7 @@ Name All-In-One Notifications - - - XCObserverAutoDisconnectKey - - XCObserverDefintionKey - - PBXStatusErrorsKey - 0 - - XCObserverFactoryKey - XCPerspectivesSpecificationIdentifier - XCObserverGUIDKey - XCObserverProjectIdentifier - XCObserverNotificationKey - PBXStatusBuildStateMessageNotification - XCObserverTargetKey - XCMainBuildResultsModuleGUID - XCObserverTriggerKey - awakenModuleWithObserver: - XCObserverValidationKey - - PBXStatusErrorsKey - 2 - - - + OpenEditors PerspectiveWidths @@ -238,11 +213,10 @@ active-combo-popup action NSToolbarFlexibleSpaceItem - debugger-enable-breakpoints build-and-go com.apple.ide.PBXToolbarStopButton - get-info NSToolbarFlexibleSpaceItem + get-info com.apple.pbx.toolbar.searchfield ControllerClassBaseName @@ -294,6 +268,7 @@ 29B97314FDCFA39411CA2CEA 080E96DDFE201D6D7F000001 6BB93C7610CFE1BD00F74F2B + 6BDD9E030F91110C00904EEF 6B137C7D0F7FCBE800459200 6B555DF5100B25FC00247EA3 29B97315FDCFA39411CA2CEA @@ -305,14 +280,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 31 - 26 + 38 + 34 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 11}, {282, 660}} + {{0, 192}, {282, 660}} PBXTopSmartGroupGIDs @@ -347,7 +322,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - Sample_SoloMeshSimple.cpp + Sample_SoloMesh.cpp PBXSplitModuleInNavigatorKey Split0 @@ -355,11 +330,11 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - Sample_SoloMeshSimple.cpp + Sample_SoloMesh.cpp _historyCapacity 0 bookmark - 6BB93D1E10D001BA00F74F2B + 6B98694A10DF8982007D8D84 history 6B57D358108C66B200DDD053 @@ -384,24 +359,36 @@ 6BB4966110C8F2AE00BC0805 6BB4966510C8F2AE00BC0805 6BB4966810C8F2AE00BC0805 - 6BB4966A10C8F2AE00BC0805 6BB4967C10C8F8F500BC0805 - 6BB93C8210CFE3B100F74F2B 6BB93CCF10CFEA7A00F74F2B 6BB93CD010CFEA7A00F74F2B 6BB93CD210CFEA7A00F74F2B - 6BB93CD710CFEA7A00F74F2B - 6BB93CD810CFEA7A00F74F2B 6BB93CE710CFEB5D00F74F2B 6BB93CEB10CFEB5D00F74F2B 6BB93D0510CFFC1300F74F2B 6BB93D0710CFFC1300F74F2B - 6BB93D0810CFFC1300F74F2B - 6BB93D0910CFFC1300F74F2B 6BB93D0A10CFFC1300F74F2B 6BB93D1510CFFC6D00F74F2B 6BB93D1B10CFFD7600F74F2B - 6BB93D1C10CFFD7600F74F2B + 6B98692510DF824E007D8D84 + 6B98693110DF8929007D8D84 + 6B98693210DF8929007D8D84 + 6B98693310DF8929007D8D84 + 6B98693410DF8929007D8D84 + 6B98694710DF8982007D8D84 + 6B98694810DF8982007D8D84 + + prevStack + + 6B98692710DF824E007D8D84 + 6B98693710DF8929007D8D84 + 6B98693810DF8929007D8D84 + 6B98693910DF8929007D8D84 + 6B98693A10DF8929007D8D84 + 6B98693B10DF8929007D8D84 + 6B98693C10DF8929007D8D84 + 6B98693D10DF8929007D8D84 + 6B98694910DF8982007D8D84 SplitCount @@ -440,7 +427,7 @@ GeometryConfiguration Frame - {{10, 27}, {976, 220}} + {{10, 27}, {976, 122}} Module XCDetailModule @@ -485,11 +472,11 @@ PBXProjectModuleGUID XCMainBuildResultsModuleGUID PBXProjectModuleLabel - Build Results + Build XCBuildResultsTrigger_Collapse 1021 XCBuildResultsTrigger_Open - 1012 + 1011 GeometryConfiguration @@ -524,11 +511,11 @@ TableOfContents - 6BB93CDB10CFEA7A00F74F2B + 6B98692910DF824E007D8D84 1CA23ED40692098700951B8B - 6BB93CDC10CFEA7A00F74F2B + 6B98692A10DF824E007D8D84 6B8632A30F78115100E2684A - 6BB93CDD10CFEA7A00F74F2B + 6B98692B10DF824E007D8D84 1CA23EDF0692099D00951B8B 1CA23EE00692099D00951B8B 1CA23EE10692099D00951B8B @@ -546,7 +533,6 @@ NSToolbarSeparatorItem active-combo-popup NSToolbarFlexibleSpaceItem - debugger-enable-breakpoints build-and-go com.apple.ide.PBXToolbarStopButton debugger-restart-executable @@ -554,9 +540,10 @@ debugger-step-over debugger-step-into debugger-step-out + debugger-enable-breakpoints NSToolbarFlexibleSpaceItem - servicesModulebreakpoints - debugger-show-console-window + com.apple.ide.XCBreakpointsToolbarItem + clear-log ControllerClassBaseName PBXDebugSessionModule @@ -677,14 +664,14 @@ TableOfContents - 6BB93CDE10CFEA7A00F74F2B + 6B98693F10DF8929007D8D84 1CCC7628064C1048000F2A68 1CCC7629064C1048000F2A68 - 6BB93CDF10CFEA7A00F74F2B - 6BB93CE010CFEA7A00F74F2B - 6BB93CE110CFEA7A00F74F2B - 6BB93CE210CFEA7A00F74F2B - 6BB93CE310CFEA7A00F74F2B + 6B98694010DF8929007D8D84 + 6B98694110DF8929007D8D84 + 6B98694210DF8929007D8D84 + 6B98694310DF8929007D8D84 + 6B98694410DF8929007D8D84 ToolbarConfigUserDefaultsMinorVersion 2 @@ -701,7 +688,7 @@ StatusbarIsVisible TimeStamp - 282067386.65052402 + 0.0 ToolbarDisplayMode 1 ToolbarIsVisible @@ -716,8 +703,6 @@ 5 WindowOrderList - 6BB93CE510CFEA7A00F74F2B - 6BB93CE610CFEA7A00F74F2B /Users/memon/Code/recastnavigation/RecastDemo/Build/Xcode/Recast.xcodeproj WindowString diff --git a/RecastDemo/Source/Sample_SoloMesh.cpp b/RecastDemo/Source/Sample_SoloMesh.cpp index f87199e..3f829df 100644 --- a/RecastDemo/Source/Sample_SoloMesh.cpp +++ b/RecastDemo/Source/Sample_SoloMesh.cpp @@ -223,19 +223,15 @@ void Sample_SoloMesh::toolRecalc() m_straightPath[0] = m_spos[0]; m_straightPath[1] = m_spos[1]; m_straightPath[2] = m_spos[2]; - m_npolys = m_navMesh->raycast(m_startRef, m_spos, m_epos, t, m_polys, MAX_POLYS); - if (t < 1) + vcopy(m_hitPos, m_epos); + m_npolys = m_navMesh->raycast(m_startRef, m_spos, m_epos, t, m_hitNormal, m_polys, MAX_POLYS); + if (m_npolys && t < 1) { - m_straightPath[3] = m_spos[0] + (m_epos[0] - m_spos[0]) * t; - m_straightPath[4] = m_spos[1] + (m_epos[1] - m_spos[1]) * t; - m_straightPath[5] = m_spos[2] + (m_epos[2] - m_spos[2]) * t; - } - else - { - m_straightPath[3] = m_epos[0]; - m_straightPath[4] = m_epos[1]; - m_straightPath[5] = m_epos[2]; + m_hitPos[0] = m_spos[0] + (m_epos[0] - m_spos[0]) * t; + m_hitPos[1] = m_spos[1] + (m_epos[1] - m_spos[1]) * t; + m_hitPos[2] = m_spos[2] + (m_epos[2] - m_spos[2]) * t; } + vcopy(&m_straightPath[3], m_hitPos); } } else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL) @@ -358,6 +354,12 @@ void Sample_SoloMesh::toolRender(int flags) glVertex3f(m_straightPath[i*3], m_straightPath[i*3+1]+0.4f, m_straightPath[i*3+2]); glEnd(); glPointSize(1.0f); + + glColor4ub(255,255,255,128); + glBegin(GL_LINES); + glVertex3f(m_hitPos[0], m_hitPos[1] + 0.4f, m_hitPos[2]); + glVertex3f(m_hitPos[0] + m_hitNormal[0]*m_agentRadius, m_hitPos[1] + 0.4f + m_hitNormal[1]*m_agentRadius, m_hitPos[2] + m_hitNormal[2]*m_agentRadius); + glEnd(); } } else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL) diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index 7b5fb2b..c5c779e 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -182,19 +182,15 @@ void Sample_TileMesh::toolRecalc() m_straightPath[0] = m_spos[0]; m_straightPath[1] = m_spos[1]; m_straightPath[2] = m_spos[2]; - m_npolys = m_navMesh->raycast(m_startRef, m_spos, m_epos, t, m_polys, MAX_POLYS); + vcopy(m_hitPos, m_epos); + m_npolys = m_navMesh->raycast(m_startRef, m_spos, m_epos, t, m_hitNormal, m_polys, MAX_POLYS); if (m_npolys && t < 1) { - m_straightPath[3] = m_spos[0] + (m_epos[0] - m_spos[0]) * t; - m_straightPath[4] = m_spos[1] + (m_epos[1] - m_spos[1]) * t; - m_straightPath[5] = m_spos[2] + (m_epos[2] - m_spos[2]) * t; - } - else - { - m_straightPath[3] = m_epos[0]; - m_straightPath[4] = m_epos[1]; - m_straightPath[5] = m_epos[2]; + m_hitPos[0] = m_spos[0] + (m_epos[0] - m_spos[0]) * t; + m_hitPos[1] = m_spos[1] + (m_epos[1] - m_spos[1]) * t; + m_hitPos[2] = m_spos[2] + (m_epos[2] - m_spos[2]) * t; } + vcopy(&m_straightPath[3], m_hitPos); } } else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL) @@ -471,6 +467,12 @@ void Sample_TileMesh::handleRender() glVertex3f(m_straightPath[i*3], m_straightPath[i*3+1]+0.4f, m_straightPath[i*3+2]); glEnd(); glPointSize(1.0f); + + glColor4ub(255,255,255,128); + glBegin(GL_LINES); + glVertex3f(m_hitPos[0], m_hitPos[1] + 0.4f, m_hitPos[2]); + glVertex3f(m_hitPos[0] + m_hitNormal[0]*m_agentRadius, m_hitPos[1] + 0.4f + m_hitNormal[1]*m_agentRadius, m_hitPos[2] + m_hitNormal[2]*m_agentRadius); + glEnd(); } } else if (m_toolMode == TOOLMODE_DISTANCE_TO_WALL)