From 18d91de047578207a653f8295e2f83f336828c99 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 12 Nov 2014 00:09:58 +0000 Subject: [PATCH] Updated to reflect the Normal() -> TriangleNormal() change And added function to compute normals per polygonal faces --- vcg/complex/algorithms/update/normal.h | 33 ++++++++++++++++---------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/vcg/complex/algorithms/update/normal.h b/vcg/complex/algorithms/update/normal.h index 73d02982..fbb02a71 100644 --- a/vcg/complex/algorithms/update/normal.h +++ b/vcg/complex/algorithms/update/normal.h @@ -86,15 +86,13 @@ static void PerVertexClear(ComputeMeshType &m, bool ClearAllVertNormal=false) /** The normal of a vertex v is the classical area-weigthed average of the normals of the faces incident on v. */ - static void PerVertex(ComputeMeshType &m) +static void PerVertex(ComputeMeshType &m) { PerVertexClear(m); - FaceIterator f; - for(f=m.face.begin();f!=m.face.end();++f) + for(FaceIterator f=m.face.begin();f!=m.face.end();++f) if( !(*f).IsD() && (*f).IsR() ) { - //typename FaceType::NormalType t = (*f).Normal(); - typename FaceType::NormalType t = vcg::Normal(*f); + typename FaceType::NormalType t = vcg::TriangleNormal(*f); for(int j=0; j<(*f).VN(); ++j) if( !(*f).V(j)->IsD() && (*f).V(j)->IsRW() ) @@ -102,6 +100,15 @@ static void PerVertexClear(ComputeMeshType &m, bool ClearAllVertNormal=false) } } +static void PerFacePolygonal(ComputeMeshType &m) +{ +for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) +{ + if( !(*fi).IsD() ) + fi->N() = PolygonNormal(*fi).Normalize(); +} +} + /// \brief Calculates the vertex normal as an angle weighted average. It does not need or exploit current face normals. /** The normal of a vertex v computed as a weighted sum f the incident face normals. @@ -118,7 +125,7 @@ Journal of Graphics Tools, 1998 for(f=m.face.begin();f!=m.face.end();++f) if( !(*f).IsD() && (*f).IsR() ) { - NormalType t = vcg::NormalizedNormal(*f); + NormalType t = TriangleNormal(*f).Normalize(); NormalType e0 = ((*f).V1(0)->cP()-(*f).V0(0)->cP()).Normalize(); NormalType e1 = ((*f).V1(1)->cP()-(*f).V0(1)->cP()).Normalize(); NormalType e2 = ((*f).V1(2)->cP()-(*f).V0(2)->cP()).Normalize(); @@ -144,7 +151,7 @@ static void PerVertexNelsonMaxWeighted(ComputeMeshType &m) for(f=m.face.begin();f!=m.face.end();++f) if( !(*f).IsD() && (*f).IsR() ) { - typename FaceType::NormalType t = vcg::Normal(*f); + typename FaceType::NormalType t = TriangleNormal(*f); ScalarType e0 = SquaredDistance((*f).V0(0)->cP(),(*f).V1(0)->cP()); ScalarType e1 = SquaredDistance((*f).V0(1)->cP(),(*f).V1(1)->cP()); ScalarType e2 = SquaredDistance((*f).V0(2)->cP(),(*f).V1(2)->cP()); @@ -162,8 +169,8 @@ static void PerFace(ComputeMeshType &m) { RequirePerFaceNormal(m); for(FaceIterator f=m.face.begin();f!=m.face.end();++f) - if( !(*f).IsD() ) - face::ComputeNormal(*f); + if( !(*f).IsD() ) + f->N() = TriangleNormal(*f).Normalize(); } @@ -398,10 +405,10 @@ static void PerWedgeCrease(ComputeMeshType &m, ScalarType angleRad) for(FaceIterator fi=m.face.begin();fi!=m.face.end();++fi) if(!(*fi).IsD()) { - NormalType nn= vcg::Normal(*fi); + NormalType nn= TriangleNormal(*fi); for(int i=0;i<3;++i) { - const NormalType &na=vcg::Normal(*(*fi).FFp(i)); + const NormalType &na=TriangleNormal(*(*fi).FFp(i)); if(nn*na > cosangle ) { fi->WN((i+0)%3) +=na; @@ -425,7 +432,7 @@ static void PerFaceRW(ComputeMeshType &m, bool normalize=false) { for(int j=0; j<3; ++j) if( !(*f).V(j)->IsR()) cn = false; - if( cn ) face::ComputeNormalizedNormal(*f); + if( cn ) f->N() = TriangleNormal(*f).Normalize(); cn = true; } } @@ -438,7 +445,7 @@ static void PerFaceRW(ComputeMeshType &m, bool normalize=false) if( !(*f).V(j)->IsR()) cn = false; if( cn ) - (*f).ComputeNormal(); + f->N() = TriangleNormal(*f).Normalize(); cn = true; } }