diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index 46e3c14..e83768f 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 8354ebb..4f9dd7f 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -148,6 +148,41 @@ 6B163317126832D20083FC15 /* PBXTextBookmark */ = 6B163317126832D20083FC15 /* PBXTextBookmark */; 6B163318126832D20083FC15 /* PBXTextBookmark */ = 6B163318126832D20083FC15 /* PBXTextBookmark */; 6B163319126832D20083FC15 /* PBXTextBookmark */ = 6B163319126832D20083FC15 /* PBXTextBookmark */; + 6B16331A126833820083FC15 /* PBXTextBookmark */ = 6B16331A126833820083FC15 /* PBXTextBookmark */; + 6B16331D126833AA0083FC15 /* PBXTextBookmark */ = 6B16331D126833AA0083FC15 /* PBXTextBookmark */; + 6B16338112684C6F0083FC15 /* PBXTextBookmark */ = 6B16338112684C6F0083FC15 /* PBXTextBookmark */; + 6B16338212684C6F0083FC15 /* PBXTextBookmark */ = 6B16338212684C6F0083FC15 /* PBXTextBookmark */; + 6B16338312684C6F0083FC15 /* PBXTextBookmark */ = 6B16338312684C6F0083FC15 /* PBXTextBookmark */; + 6B1633B6126850730083FC15 /* PBXTextBookmark */ = 6B1633B6126850730083FC15 /* PBXTextBookmark */; + 6B1633C1126850AB0083FC15 /* PBXTextBookmark */ = 6B1633C1126850AB0083FC15 /* PBXTextBookmark */; + 6B16357012687A5D0083FC15 /* PBXTextBookmark */ = 6B16357012687A5D0083FC15 /* PBXTextBookmark */; + 6B16357112687A5D0083FC15 /* PBXTextBookmark */ = 6B16357112687A5D0083FC15 /* PBXTextBookmark */; + 6B16357212687A5D0083FC15 /* PBXTextBookmark */ = 6B16357212687A5D0083FC15 /* PBXTextBookmark */; + 6B16357312687A5D0083FC15 /* PBXTextBookmark */ = 6B16357312687A5D0083FC15 /* PBXTextBookmark */; + 6B16357512687A700083FC15 /* PBXTextBookmark */ = 6B16357512687A700083FC15 /* PBXTextBookmark */; + 6B16357612687A750083FC15 /* PBXTextBookmark */ = 6B16357612687A750083FC15 /* PBXTextBookmark */; + 6B16357712687A7E0083FC15 /* PBXTextBookmark */ = 6B16357712687A7E0083FC15 /* PBXTextBookmark */; + 6B16358C12687D740083FC15 /* PBXTextBookmark */ = 6B16358C12687D740083FC15 /* PBXTextBookmark */; + 6B16358D12687D740083FC15 /* PBXTextBookmark */ = 6B16358D12687D740083FC15 /* PBXTextBookmark */; + 6B16358E12687D740083FC15 /* PBXTextBookmark */ = 6B16358E12687D740083FC15 /* PBXTextBookmark */; + 6B16358F12687D740083FC15 /* PBXTextBookmark */ = 6B16358F12687D740083FC15 /* PBXTextBookmark */; + 6B16359012687D740083FC15 /* PBXTextBookmark */ = 6B16359012687D740083FC15 /* PBXTextBookmark */; + 6B16359112687D740083FC15 /* PBXTextBookmark */ = 6B16359112687D740083FC15 /* PBXTextBookmark */; + 6B16359212687D740083FC15 /* PBXTextBookmark */ = 6B16359212687D740083FC15 /* PBXTextBookmark */; + 6B16359312687D740083FC15 /* PBXTextBookmark */ = 6B16359312687D740083FC15 /* PBXTextBookmark */; + 6B16359412687D740083FC15 /* PBXTextBookmark */ = 6B16359412687D740083FC15 /* PBXTextBookmark */; + 6B16359512687D840083FC15 /* PBXTextBookmark */ = 6B16359512687D840083FC15 /* PBXTextBookmark */; + 6B16359612687D840083FC15 /* PBXTextBookmark */ = 6B16359612687D840083FC15 /* PBXTextBookmark */; + 6B16359712687D840083FC15 /* PBXTextBookmark */ = 6B16359712687D840083FC15 /* PBXTextBookmark */; + 6B16359812687D840083FC15 /* PBXTextBookmark */ = 6B16359812687D840083FC15 /* PBXTextBookmark */; + 6B16359D12687D980083FC15 /* PBXTextBookmark */ = 6B16359D12687D980083FC15 /* PBXTextBookmark */; + 6B16359E12687D980083FC15 /* PBXTextBookmark */ = 6B16359E12687D980083FC15 /* PBXTextBookmark */; + 6B1635A212687DAD0083FC15 /* PBXTextBookmark */ = 6B1635A212687DAD0083FC15 /* PBXTextBookmark */; + 6B1635A412687DC70083FC15 /* PBXTextBookmark */ = 6B1635A412687DC70083FC15 /* PBXTextBookmark */; + 6B1635A512687DCA0083FC15 /* PBXTextBookmark */ = 6B1635A512687DCA0083FC15 /* PBXTextBookmark */; + 6B1635A612687DDA0083FC15 /* PBXTextBookmark */ = 6B1635A612687DDA0083FC15 /* PBXTextBookmark */; + 6B1635A712687DDB0083FC15 /* PBXTextBookmark */ = 6B1635A712687DDB0083FC15 /* PBXTextBookmark */; + 6B1635A812687E3E0083FC15 /* PBXTextBookmark */ = 6B1635A812687E3E0083FC15 /* PBXTextBookmark */; 6B1C8E08121EB4FF0048697F = 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */; 6B4214D911803923006C347B = 6B4214D911803923006C347B /* PBXTextBookmark */; 6B847515122B9F4900ADF63D = 6B847515122B9F4900ADF63D /* PBXTextBookmark */; @@ -266,10 +301,9 @@ hitCount = 0; ignoreCount = 0; lineNumber = 1324; - location = Recast; - modificationTime = 307623700.115019; + modificationTime = 308826279.221625; originalNumberOfMultipleMatches = 1; - state = 0; + state = 1; }; 6B1185F41006895B0018F96F /* DetourNode.cpp */ = { uiCtxt = { @@ -343,9 +377,9 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 8606}}"; - sepNavSelRange = "{23762, 14}"; - sepNavVisRange = "{22925, 2730}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 9087}}"; + sepNavSelRange = "{12869, 0}"; + sepNavVisRange = "{12510, 812}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -389,9 +423,9 @@ }; 6B137C890F7FCC1100459200 /* RecastRegion.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 16926}}"; - sepNavSelRange = "{22090, 0}"; - sepNavVisRange = "{21330, 766}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 16380}}"; + sepNavSelRange = "{25263, 0}"; + sepNavVisRange = "{24701, 1143}"; }; }; 6B1632F2126830210083FC15 /* PBXTextBookmark */ = { @@ -409,7 +443,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 897"; rLen = 0; - rLoc = 20913; + rLoc = 21072; rType = 0; vrLen = 894; vrLoc = 20326; @@ -564,6 +598,350 @@ vrLen = 1217; vrLoc = 672; }; + 6B16331A126833820083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 37"; + rLen = 0; + rLoc = 1521; + rType = 0; + vrLen = 1171; + vrLoc = 1163; + }; + 6B16331D126833AA0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 37"; + rLen = 0; + rLoc = 1521; + rType = 0; + vrLen = 1171; + vrLoc = 1163; + }; + 6B16338112684C6F0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */; + name = "DetourNavMesh.h: 39"; + rLen = 0; + rLoc = 1578; + rType = 0; + vrLen = 1171; + vrLoc = 1163; + }; + 6B16338212684C6F0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 917"; + rLen = 0; + rLoc = 22090; + rType = 0; + vrLen = 980; + vrLoc = 21178; + }; + 6B16338312684C6F0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 1054"; + rLen = 0; + rLoc = 25263; + rType = 0; + vrLen = 1143; + vrLoc = 24701; + }; + 6B1633B6126850730083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 1054"; + rLen = 0; + rLoc = 25263; + rType = 0; + vrLen = 1143; + vrLoc = 24701; + }; + 6B1633C1126850AB0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 1054"; + rLen = 0; + rLoc = 25263; + rType = 0; + vrLen = 1143; + vrLoc = 24701; + }; + 6B16357012687A5D0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C890F7FCC1100459200 /* RecastRegion.cpp */; + name = "RecastRegion.cpp: 1054"; + rLen = 0; + rLoc = 25263; + rType = 0; + vrLen = 1143; + vrLoc = 24701; + }; + 6B16357112687A5D0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B9EFF0812281C3E00535FF1 /* DetourObstacleAvoidance.cpp */; + name = "DetourObstacleAvoidance.cpp: 529"; + rLen = 0; + rLoc = 12772; + rType = 0; + vrLen = 920; + vrLoc = 12687; + }; + 6B16357212687A5D0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 65"; + rLen = 0; + rLoc = 1985; + rType = 0; + vrLen = 1182; + vrLoc = 1406; + }; + 6B16357312687A5D0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 372"; + rLen = 0; + rLoc = 8781; + rType = 0; + vrLen = 1047; + vrLoc = 8332; + }; + 6B16357512687A700083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 381"; + rLen = 0; + rLoc = 8957; + rType = 0; + vrLen = 977; + vrLoc = 8445; + }; + 6B16357612687A750083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 381"; + rLen = 0; + rLoc = 8957; + rType = 0; + vrLen = 977; + vrLoc = 8445; + }; + 6B16357712687A7E0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 381"; + rLen = 0; + rLoc = 8957; + rType = 0; + vrLen = 358; + vrLoc = 8445; + }; + 6B16358C12687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 368"; + rLen = 0; + rLoc = 8628; + rType = 0; + vrLen = 1109; + vrLoc = 8158; + }; + 6B16358D12687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */; + name = "InputGeom.h: 67"; + rLen = 0; + rLoc = 2249; + rType = 0; + vrLen = 2148; + vrLoc = 1355; + }; + 6B16358E12687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */; + name = "ChunkyTriMesh.h: 46"; + rLen = 26; + rLoc = 1575; + rType = 0; + vrLen = 1115; + vrLoc = 133; + }; + 6B16358F12687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; + name = "ChunkyTriMesh.cpp: 213"; + rLen = 26; + rLoc = 5408; + rType = 0; + vrLen = 832; + vrLoc = 4979; + }; + 6B16359012687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 958"; + rLen = 0; + rLoc = 26529; + rType = 0; + vrLen = 958; + vrLoc = 26138; + }; + 6B16359112687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; + name = "Sample_SoloMeshTiled.cpp: 800"; + rLen = 959; + rLoc = 23991; + rType = 0; + vrLen = 1174; + vrLoc = 24082; + }; + 6B16359212687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 313"; + rLen = 0; + rLoc = 7404; + rType = 0; + vrLen = 721; + vrLoc = 7309; + }; + 6B16359312687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + rLen = 0; + rLoc = 369; + rType = 1; + }; + 6B16359412687D740083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 358"; + rLen = 0; + rLoc = 12869; + rType = 0; + vrLen = 781; + vrLoc = 12510; + }; + 6B16359512687D840083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; + name = "main.cpp: 381"; + rLen = 0; + rLoc = 8957; + rType = 0; + vrLen = 358; + vrLoc = 8445; + }; + 6B16359612687D840083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 358"; + rLen = 0; + rLoc = 12869; + rType = 0; + vrLen = 455; + vrLoc = 12510; + }; + 6B16359712687D840083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + rLen = 0; + rLoc = 311; + rType = 1; + }; + 6B16359812687D840083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7607; + rType = 0; + vrLen = 437; + vrLoc = 7651; + }; + 6B16359D12687D980083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 358"; + rLen = 0; + rLoc = 12869; + rType = 0; + vrLen = 812; + vrLoc = 12510; + }; + 6B16359E12687D980083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 326"; + rLen = 0; + rLoc = 7768; + rType = 0; + vrLen = 709; + vrLoc = 7494; + }; + 6B1635A212687DAD0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7618; + rType = 0; + vrLen = 770; + vrLoc = 7508; + }; + 6B1635A412687DC70083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7619; + rType = 0; + vrLen = 770; + vrLoc = 7508; + }; + 6B1635A512687DCA0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7619; + rType = 0; + vrLen = 770; + vrLoc = 7508; + }; + 6B1635A612687DDA0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7619; + rType = 0; + vrLen = 439; + vrLoc = 7651; + }; + 6B1635A712687DDB0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 320"; + rLen = 0; + rLoc = 7619; + rType = 0; + vrLen = 770; + vrLoc = 7508; + }; + 6B1635A812687E3E0083FC15 /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; + name = "InputGeom.cpp: 304"; + rLen = 0; + rLoc = 7438; + rType = 0; + vrLen = 766; + vrLoc = 7095; + }; 6B1C8E08121EB4FF0048697F /* PBXTextBookmark */ = { isa = PBXTextBookmark; fRef = 6B2AEC510FFB8946005BE9CC /* Sample_TileMesh.h */; @@ -590,9 +968,9 @@ }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1217, 11739}}"; - sepNavSelRange = "{1985, 0}"; - sepNavVisRange = "{1265, 437}"; + sepNavIntBoundsRect = "{{0, 0}, {1217, 12025}}"; + sepNavSelRange = "{8957, 0}"; + sepNavVisRange = "{8445, 358}"; sepNavWindowFrame = "{{15, 51}, {1214, 722}}"; }; }; @@ -606,9 +984,9 @@ }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 16068}}"; - sepNavSelRange = "{7100, 0}"; - sepNavVisRange = "{6402, 830}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 15340}}"; + sepNavSelRange = "{26529, 0}"; + sepNavVisRange = "{26138, 958}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -649,8 +1027,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 362; - location = Recast; - modificationTime = 307623703.350588; + modificationTime = 308826279.220464; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -881,9 +1258,9 @@ }; 6B8DE88B10B69E4C00DF20FB /* DetourNavMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 5135}}"; - sepNavSelRange = "{1161, 0}"; - sepNavVisRange = "{672, 1217}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 5200}}"; + sepNavSelRange = "{1578, 0}"; + sepNavVisRange = "{1163, 1171}"; }; }; 6B8DE88C10B69E4C00DF20FB /* DetourNavMeshBuilder.h */ = { @@ -917,7 +1294,7 @@ ignoreCount = 0; lineNumber = 78; location = Recast; - modificationTime = 307623700.11648; + modificationTime = 308826245.414741; originalNumberOfMultipleMatches = 0; state = 2; }; @@ -934,7 +1311,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 131; - modificationTime = 307623700.116675; + modificationTime = 308826245.41512; originalNumberOfMultipleMatches = 1; state = 0; }; @@ -977,9 +1354,9 @@ }; 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1013, 14274}}"; - sepNavSelRange = "{26519, 0}"; - sepNavVisRange = "{20368, 1429}"; + sepNavIntBoundsRect = "{{0, 0}, {992, 14391}}"; + sepNavSelRange = "{23991, 959}"; + sepNavVisRange = "{24082, 1174}"; sepNavWindowFrame = "{{38, 30}, {1214, 722}}"; }; }; @@ -1030,9 +1407,9 @@ }; 6B9EFF0812281C3E00535FF1 /* DetourObstacleAvoidance.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {931, 7319}}"; - sepNavSelRange = "{6519, 782}"; - sepNavVisRange = "{6947, 765}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 7397}}"; + sepNavSelRange = "{12772, 0}"; + sepNavVisRange = "{12687, 920}"; }; }; 6BA1E88810C7BFC9008007F6 /* Sample_SoloMeshSimple.cpp */ = { @@ -1089,8 +1466,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 137; - location = Recast; - modificationTime = 307623703.369916; + modificationTime = 308826279.220855; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1119,7 +1495,7 @@ fRef = 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */; name = "ChunkyTriMesh.cpp: 59"; rLen = 0; - rLoc = 1793; + rLoc = 1811; rType = 0; vrLen = 552; vrLoc = 1454; @@ -1129,7 +1505,7 @@ fRef = 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */; name = "InputGeom.cpp: 395"; rLen = 0; - rLoc = 10073; + rLoc = 10284; rType = 0; vrLen = 455; vrLoc = 9715; @@ -1241,8 +1617,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 45; - location = Recast; - modificationTime = 307623703.424199; + modificationTime = 308826279.219005; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1472,7 +1847,7 @@ fRef = 6B25B6180FFA62BE004F1BC4 /* main.cpp */; name = "main.cpp: 897"; rLen = 0; - rLoc = 20913; + rLoc = 21072; rType = 0; vrLen = 601; vrLoc = 20575; @@ -1552,7 +1927,7 @@ fRef = 6B98463211E6144400FA177B /* Sample_SoloMeshTiled.cpp */; name = "Sample_SoloMeshTiled.cpp: 866"; rLen = 0; - rLoc = 26519; + rLoc = 26528; rType = 0; vrLen = 1429; vrLoc = 20368; @@ -1639,16 +2014,16 @@ }; 6BB788160FC0472B003C24DB /* ChunkyTriMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 3712}}"; - sepNavSelRange = "{1793, 0}"; - sepNavVisRange = "{1454, 552}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 4316}}"; + sepNavSelRange = "{5408, 26}"; + sepNavVisRange = "{4979, 832}"; }; }; 6BB788180FC04753003C24DB /* ChunkyTriMesh.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {815, 800}}"; - sepNavSelRange = "{957, 0}"; - sepNavVisRange = "{396, 785}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 689}}"; + sepNavSelRange = "{1575, 26}"; + sepNavVisRange = "{133, 1115}"; }; }; 6BB7FC0910EBB6AA006DA0A6 /* NavMeshTesterTool.h */ = { @@ -1668,16 +2043,16 @@ }; 6BB7FDA310F36EFC006DA0A6 /* InputGeom.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 1584}}"; - sepNavSelRange = "{1880, 0}"; - sepNavVisRange = "{1682, 763}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 1196}}"; + sepNavSelRange = "{2249, 0}"; + sepNavVisRange = "{1355, 2148}"; }; }; 6BB7FDA410F36F0E006DA0A6 /* InputGeom.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {933, 7152}}"; - sepNavSelRange = "{10073, 0}"; - sepNavVisRange = "{9715, 455}"; + sepNavIntBoundsRect = "{{0, 0}, {931, 6214}}"; + sepNavSelRange = "{7438, 0}"; + sepNavVisRange = "{7095, 766}"; }; }; 6BB93C7710CFE1D500F74F2B /* DebugDraw.h */ = { @@ -1822,8 +2197,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 279; - location = Recast; - modificationTime = 307623703.336449; + modificationTime = 308826279.219623; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -1948,8 +2322,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 541; - location = Recast; - modificationTime = 307623703.377993; + modificationTime = 308826279.220026; originalNumberOfMultipleMatches = 1; state = 1; }; @@ -2008,8 +2381,7 @@ hitCount = 0; ignoreCount = 0; lineNumber = 480; - location = Recast; - modificationTime = 307623703.394133; + modificationTime = 308826279.221242; originalNumberOfMultipleMatches = 1; state = 1; }; diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index d52d236..f1f2b04 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -284,14 +284,13 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 15 - 11 + 82 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 0}, {264, 660}} + {{0, 1242}, {264, 660}} PBXTopSmartGroupGIDs @@ -326,7 +325,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - DetourNavMesh.h + InputGeom.cpp PBXSplitModuleInNavigatorKey Split0 @@ -334,14 +333,13 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - DetourNavMesh.h + InputGeom.cpp _historyCapacity 0 bookmark - 6B163319126832D20083FC15 + 6B1635A812687E3E0083FC15 history - 6BBB4AA5115B4F3400CF791D 6BBB4C34115B7A3D00CF791D 6BF5F27311747CFA000502A6 6BF5F2E411748884000502A6 @@ -366,12 +364,9 @@ 6BD402811224393000995864 6BD4028C1224399300995864 6BD4029B12243A8000995864 - 6BD402B4122441CB00995864 6B920A521225C0AC00D5B5AD 6B920A6D1225C5DD00D5B5AD 6BA7F8EC1227002300C8C47A - 6BA7F8ED1227002300C8C47A - 6BA7F8EE1227002300C8C47A 6B8476F9122D000800ADF63D 6B847779122D223D00ADF63D 6B84778B122D279700ADF63D @@ -403,7 +398,6 @@ 6BA8CF951255D97400272A3B 6BA8CFA81255DC6500272A3B 6BA8CFBE1255DE0500272A3B - 6BA8D10B125B0E8E00272A3B 6BA8D10C125B0E8E00272A3B 6BA8D10D125B0E8E00272A3B 6BB2EDF91261C75400E350F8 @@ -414,23 +408,28 @@ 6BB2EE351261CEB800E350F8 6BB2EE361261CEB800E350F8 6BB2EE3F1261D02000E350F8 - 6BB2EE641261D48100E350F8 - 6BB2EE651261D48100E350F8 6BB2EE661261D48100E350F8 6BB2EE671261D48100E350F8 - 6BB2EE681261D48100E350F8 6BB2EE691261D48100E350F8 6BB2EE731261DA0400E350F8 6BB2EE7A1264CD7900E350F8 6BB2EE7B1264CD7900E350F8 - 6B1632F2126830210083FC15 - 6B16330F1268326F0083FC15 6B1633101268326F0083FC15 6B1633111268326F0083FC15 6B1633121268326F0083FC15 6B1633141268326F0083FC15 6B163317126832D20083FC15 - 6B163318126832D20083FC15 + 6B16338112684C6F0083FC15 + 6B16357012687A5D0083FC15 + 6B16357112687A5D0083FC15 + 6B16358C12687D740083FC15 + 6B16358D12687D740083FC15 + 6B16358E12687D740083FC15 + 6B16358F12687D740083FC15 + 6B16359012687D740083FC15 + 6B16359112687D740083FC15 + 6B16359D12687D980083FC15 + 6B1635A612687DDA0083FC15 SplitCount @@ -444,18 +443,18 @@ GeometryConfiguration Frame - {{0, 0}, {992, 533}} + {{0, 0}, {992, 528}} RubberWindowFrame 0 59 1278 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 533pt + 528pt Proportion - 140pt + 145pt Tabs @@ -485,9 +484,7 @@ GeometryConfiguration Frame - {{10, 27}, {992, 113}} - RubberWindowFrame - 0 59 1278 719 0 0 1280 778 + {{10, 27}, {992, -27}} Module PBXProjectFindModule @@ -525,7 +522,9 @@ GeometryConfiguration Frame - {{10, 27}, {992, 88}} + {{10, 27}, {992, 118}} + RubberWindowFrame + 0 59 1278 719 0 0 1280 778 Module PBXBuildResultsModule diff --git a/RecastDemo/Include/ChunkyTriMesh.h b/RecastDemo/Include/ChunkyTriMesh.h index c4d0fc8..9be7788 100644 --- a/RecastDemo/Include/ChunkyTriMesh.h +++ b/RecastDemo/Include/ChunkyTriMesh.h @@ -42,8 +42,11 @@ struct rcChunkyTriMesh bool rcCreateChunkyTriMesh(const float* verts, const int* tris, int ntris, int trisPerChunk, rcChunkyTriMesh* cm); -// Returns the chunk indices which touch the input rectable. -int rcGetChunksInRect(const rcChunkyTriMesh* cm, float bmin[2], float bmax[2], int* ids, const int maxIds); +// Returns the chunk indices which overlap the input rectable. +int rcGetChunksOverlappingRect(const rcChunkyTriMesh* cm, float bmin[2], float bmax[2], int* ids, const int maxIds); + +// Returns the chunk indices which overlap the input segment. +int rcGetChunksOverlappingSegment(const rcChunkyTriMesh* cm, float p[2], float q[2], int* ids, const int maxIds); #endif // CHUNKYTRIMESH_H diff --git a/RecastDemo/Source/ChunkyTriMesh.cpp b/RecastDemo/Source/ChunkyTriMesh.cpp index 86460ec..47e8778 100644 --- a/RecastDemo/Source/ChunkyTriMesh.cpp +++ b/RecastDemo/Source/ChunkyTriMesh.cpp @@ -19,6 +19,7 @@ #include "ChunkyTriMesh.h" #include #include +#include struct BoundsItem { @@ -209,9 +210,9 @@ inline bool checkOverlapRect(const float amin[2], const float amax[2], return overlap; } -int rcGetChunksInRect(const rcChunkyTriMesh* cm, - float bmin[2], float bmax[2], - int* ids, const int maxIds) +int rcGetChunksOverlappingRect(const rcChunkyTriMesh* cm, + float bmin[2], float bmax[2], + int* ids, const int maxIds) { // Traverse tree int i = 0; @@ -243,3 +244,72 @@ int rcGetChunksInRect(const rcChunkyTriMesh* cm, return n; } + + +static bool checkOverlapSegment(const float p[2], const float q[2], + const float bmin[2], const float bmax[2]) +{ + static const float EPSILON = 1e-6f; + + float tmin = 0; + float tmax = 1; + float d[2]; + d[0] = q[0] - p[0]; + d[1] = q[1] - p[1]; + + for (int i = 0; i < 2; i++) + { + if (fabsf(d[i]) < EPSILON) + { + // Ray is parallel to slab. No hit if origin not within slab + if (p[i] < bmin[i] || p[i] > bmax[i]) + return false; + } + else + { + // Compute intersection t value of ray with near and far plane of slab + float ood = 1.0f / d[i]; + float t1 = (bmin[i] - p[i]) * ood; + float t2 = (bmax[i] - p[i]) * ood; + if (t1 > t2) { float tmp = t1; t1 = t2; t2 = tmp; } + if (t1 > tmin) tmin = t1; + if (t2 < tmax) tmax = t2; + if (tmin > tmax) return false; + } + } + return true; +} + +int rcGetChunksOverlappingSegment(const rcChunkyTriMesh* cm, + float p[2], float q[2], + int* ids, const int maxIds) +{ + // Traverse tree + int i = 0; + int n = 0; + while (i < cm->nnodes) + { + const rcChunkyTriMeshNode* node = &cm->nodes[i]; + const bool overlap = checkOverlapSegment(p, q, node->bmin, node->bmax); + const bool isLeafNode = node->i >= 0; + + if (isLeafNode && overlap) + { + if (n < maxIds) + { + ids[n] = i; + n++; + } + } + + if (overlap || isLeafNode) + i++; + else + { + const int escapeIndex = -node->i; + i += escapeIndex; + } + } + + return n; +} diff --git a/RecastDemo/Source/InputGeom.cpp b/RecastDemo/Source/InputGeom.cpp index 16dcca3..a2e96c0 100644 --- a/RecastDemo/Source/InputGeom.cpp +++ b/RecastDemo/Source/InputGeom.cpp @@ -285,29 +285,39 @@ bool InputGeom::raycastMesh(float* src, float* dst, float& tmin) { float dir[3]; rcVsub(dir, dst, src); + + float p[2], q[2]; + p[0] = src[0]; + p[1] = src[2]; + q[0] = dst[0]; + q[1] = dst[2]; + int cid[512]; + const int ncid = rcGetChunksOverlappingSegment(m_chunkyMesh, p, q, cid, 512); + if (!ncid) + return false; - int nt = m_mesh->getTriCount(); - const float* verts = m_mesh->getVerts(); - const float* normals = m_mesh->getNormals(); - const int* tris = m_mesh->getTris(); tmin = 1.0f; bool hit = false; + const float* verts = m_mesh->getVerts(); - for (int i = 0; i < nt*3; i += 3) + for (int i = 0; i < ncid; ++i) { - const float* n = &normals[i]; - if (rcVdot(dir, n) > 0) - continue; - - float t = 1; - if (intersectSegmentTriangle(src, dst, - &verts[tris[i]*3], - &verts[tris[i+1]*3], - &verts[tris[i+2]*3], t)) + const rcChunkyTriMeshNode& node = m_chunkyMesh->nodes[cid[i]]; + const int* tris = &m_chunkyMesh->tris[node.i*3]; + const int ntris = node.n; + + for (int j = 0; j < ntris*3; ++j) { - if (t < tmin) - tmin = t; - hit = true; + float t = 1; + if (intersectSegmentTriangle(src, dst, + &verts[tris[j]*3], + &verts[tris[j+1]*3], + &verts[tris[j+2]*3], t)) + { + if (t < tmin) + tmin = t; + hit = true; + } } } diff --git a/RecastDemo/Source/Sample_SoloMeshTiled.cpp b/RecastDemo/Source/Sample_SoloMeshTiled.cpp index 9e30c2d..0b992b6 100644 --- a/RecastDemo/Source/Sample_SoloMeshTiled.cpp +++ b/RecastDemo/Source/Sample_SoloMeshTiled.cpp @@ -803,7 +803,7 @@ bool Sample_SoloMeshTiled::handleBuild() tbmax[0] = tileCfg.bmax[0]; tbmax[1] = tileCfg.bmax[2]; int cid[512];// TODO: Make grow when returning too many items. - const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 512); + const int ncid = rcGetChunksOverlappingRect(chunkyMesh, tbmin, tbmax, cid, 512); if (!ncid) continue; diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index d3d6167..627786f 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -955,7 +955,7 @@ unsigned char* Sample_TileMesh::buildTileMesh(const int tx, const int ty, const tbmax[0] = m_cfg.bmax[0]; tbmax[1] = m_cfg.bmax[2]; int cid[512];// TODO: Make grow when returning too many items. - const int ncid = rcGetChunksInRect(chunkyMesh, tbmin, tbmax, cid, 512); + const int ncid = rcGetChunksOverlappingRect(chunkyMesh, tbmin, tbmax, cid, 512); if (!ncid) return 0; diff --git a/RecastDemo/Source/main.cpp b/RecastDemo/Source/main.cpp index 8d9c453..e529d43 100644 --- a/RecastDemo/Source/main.cpp +++ b/RecastDemo/Source/main.cpp @@ -365,7 +365,13 @@ int main(int /*argc*/, char** /*argv*/) if (processHitTest && geom && sample) { float t; - if (geom->raycastMesh(rays, raye, t)) + TimeVal t0 = getPerfTime(); + bool hit = geom->raycastMesh(rays, raye, t); + TimeVal t1 = getPerfTime(); + + printf("raycast() %.4fms\n", getPerfDeltaTimeUsec(t0,t1)/1000.0f); + + if (hit) { if (SDL_GetModState() & KMOD_CTRL) {