Browse Source

same fixes to 3D navmesh..

Juan Linietsky 10 years ago
parent
commit
5f2aac4bbe
2 changed files with 16 additions and 1 deletions
  1. 14 1
      scene/3d/navigation.cpp
  2. 2 0
      scene/3d/navigation.h

+ 14 - 1
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);
 					}
 				}

+ 2 - 0
scene/3d/navigation.h

@@ -59,6 +59,8 @@ class Navigation : public Spatial {
 
 		float distance;
 		int prev_edge;
+		bool clockwise;
+
 
 		NavMesh *owner;
 	};