diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-05-02 17:39:29 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-05-02 17:39:29 -0300 |
commit | 5f2aac4bbe14d1256feebd4bb12d8b61e5b55f3d (patch) | |
tree | 0c4f364a0445dabb8e0516499f9cb95bec630a9a /scene/3d | |
parent | 2296b0508e0e2d2ed51bc6cb892fa8a8abb55ff7 (diff) |
same fixes to 3D navmesh..
Diffstat (limited to 'scene/3d')
-rw-r--r-- | scene/3d/navigation.cpp | 15 | ||||
-rw-r--r-- | scene/3d/navigation.h | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/scene/3d/navigation.cpp b/scene/3d/navigation.cpp index 8866a65801..48820706dd 100644 --- a/scene/3d/navigation.cpp +++ b/scene/3d/navigation.cpp @@ -30,6 +30,7 @@ void Navigation::_navmesh_link(int p_id) { p.edges.resize(plen); Vector3 center; + float sum=0; for(int j=0;j<plen;j++) { @@ -44,8 +45,19 @@ void Navigation::_navmesh_link(int p_id) { center+=ep; e.point=_get_point(ep); p.edges[j]=e; + + if (j>=2) { + Vector3 epa = nm.xform.xform(r[indices[j-2]]); + Vector3 epb = nm.xform.xform(r[indices[j-1]]); + + sum+=up.dot((epb-epa).cross(ep-epa)); + + } + } + p.clockwise=sum>0; + if (!valid) { nm.polygons.pop_back(); ERR_CONTINUE(!valid); @@ -399,7 +411,8 @@ Vector<Vector3> Navigation::get_simple_path(const Vector3& p_start, const Vector left = _get_vertex(p->edges[prev].point); right = _get_vertex(p->edges[prev_n].point); - if (CLOCK_TANGENT(apex_point,left,(left+right)*0.5).dot(up) < 0){ + //if (CLOCK_TANGENT(apex_point,left,(left+right)*0.5).dot(up) < 0){ + if (p->clockwise) { SWAP(left,right); } } diff --git a/scene/3d/navigation.h b/scene/3d/navigation.h index 54cec8f1f7..0f7f67571f 100644 --- a/scene/3d/navigation.h +++ b/scene/3d/navigation.h @@ -59,6 +59,8 @@ class Navigation : public Spatial { float distance; int prev_edge; + bool clockwise; + NavMesh *owner; }; |