From 88b8d409a7f539d5d09ed9b3de968a24d3883670 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Wed, 7 Sep 2016 10:55:35 +0200 Subject: [PATCH] Properly use detail mesh from closestPointOnPoly (#228) When a point is outside the polygon being queried in dtNavMesh::closestPointOnPoly and dtNavMeshQuery::closestPoinOnPoly, Detour will interpolate along one of the edges to find the closest point on the poly. However, Detour did not properly use the interpolated point to find the correct height according to the detail mesh. Fix #227 --- Detour/Source/DetourNavMesh.cpp | 2 +- Detour/Source/DetourNavMeshQuery.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Detour/Source/DetourNavMesh.cpp b/Detour/Source/DetourNavMesh.cpp index f70fa04..a6557f9 100644 --- a/Detour/Source/DetourNavMesh.cpp +++ b/Detour/Source/DetourNavMesh.cpp @@ -687,7 +687,7 @@ void dtNavMesh::closestPointOnPoly(dtPolyRef ref, const float* pos, float* close v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; } float h; - if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h)) + if (dtClosestHeightPointTriangle(closest, v[0], v[1], v[2], h)) { closest[1] = h; break; diff --git a/Detour/Source/DetourNavMeshQuery.cpp b/Detour/Source/DetourNavMeshQuery.cpp index 75af102..024d4a1 100644 --- a/Detour/Source/DetourNavMeshQuery.cpp +++ b/Detour/Source/DetourNavMeshQuery.cpp @@ -578,7 +578,7 @@ dtStatus dtNavMeshQuery::closestPointOnPoly(dtPolyRef ref, const float* pos, flo v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; } float h; - if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h)) + if (dtClosestHeightPointTriangle(closest, v[0], v[1], v[2], h)) { closest[1] = h; break;