diff --git a/vcg/complex/trimesh/create/resampler.h b/vcg/complex/trimesh/create/resampler.h index 9f6a1310..f70fddd0 100644 --- a/vcg/complex/trimesh/create/resampler.h +++ b/vcg/complex/trimesh/create/resampler.h @@ -177,21 +177,31 @@ template V(0)->cN())*pip[0] + (f->V(1)->cN())*pip[1] + (f->V(2)->cN())*pip[2] ; - closestNormF = f->cN() ; - + const float InterpolationEpsilon = 0.00001f; + int zeroCnt=0; + if(pip[0] fabs(signF)) signBest = signV; - else signBest = signF; + if(zeroCnt>0) // we Not are in the middle of the face so the face normal is NOT reliable. + { + closestNormV = (f->V(0)->cN())*pip[0] + (f->V(1)->cN())*pip[1] + (f->V(2)->cN())*pip[2] ; + signBest = dir.dot(closestNormV) ; + } + else + { + closestNormF = f->cN() ; + signBest = dir.dot(closestNormF) ; + } if(signBest<0) dist=-dist; @@ -320,7 +330,8 @@ template ::PerVertexNormalizedPerFaceNormalized(old_mesh); + tri::UpdateNormals::PerFaceNormalized(old_mesh); + tri::UpdateNormals::PerVertexAngleWeighted(old_mesh); tri::UpdateFlags::FaceProjection(old_mesh); int _size=(int)old_mesh.fn*100;