same fixes to 3D navmesh..
This commit is contained in:
parent
2296b0508e
commit
5f2aac4bbe
@ -30,6 +30,7 @@ void Navigation::_navmesh_link(int p_id) {
|
|||||||
p.edges.resize(plen);
|
p.edges.resize(plen);
|
||||||
|
|
||||||
Vector3 center;
|
Vector3 center;
|
||||||
|
float sum=0;
|
||||||
|
|
||||||
for(int j=0;j<plen;j++) {
|
for(int j=0;j<plen;j++) {
|
||||||
|
|
||||||
@ -44,8 +45,19 @@ void Navigation::_navmesh_link(int p_id) {
|
|||||||
center+=ep;
|
center+=ep;
|
||||||
e.point=_get_point(ep);
|
e.point=_get_point(ep);
|
||||||
p.edges[j]=e;
|
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) {
|
if (!valid) {
|
||||||
nm.polygons.pop_back();
|
nm.polygons.pop_back();
|
||||||
ERR_CONTINUE(!valid);
|
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);
|
left = _get_vertex(p->edges[prev].point);
|
||||||
right = _get_vertex(p->edges[prev_n].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);
|
SWAP(left,right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,8 @@ class Navigation : public Spatial {
|
|||||||
|
|
||||||
float distance;
|
float distance;
|
||||||
int prev_edge;
|
int prev_edge;
|
||||||
|
bool clockwise;
|
||||||
|
|
||||||
|
|
||||||
NavMesh *owner;
|
NavMesh *owner;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user