Management, updating and computation of per-vertex, per-face, and per-wedge normals. More...
#include <vcg/complex/algorithms/update/normal.h>
Public Types | |
typedef MeshType::CoordType | CoordType |
typedef MeshType::FaceIterator | FaceIterator |
typedef MeshType::FacePointer | FacePointer |
typedef MeshType::FaceType | FaceType |
typedef ComputeMeshType | MeshType |
typedef VertexType::NormalType | NormalType |
typedef VertexType::ScalarType | ScalarType |
typedef MeshType::VertexIterator | VertexIterator |
typedef MeshType::VertexPointer | VertexPointer |
typedef MeshType::VertexType | VertexType |
Static Public Member Functions | |
static void | NormalizePerFace (ComputeMeshType &m) |
Normalize the length of the face normals. | |
static void | NormalizePerFaceByArea (ComputeMeshType &m) |
Set the length of the face normals to their area (without recomputing their directions). | |
static void | NormalizePerVertex (ComputeMeshType &m) |
Normalize the length of the vertex normals. | |
static void | PerBitPolygonFaceNormalized (ComputeMeshType &m) |
Exploit bitquads to compute a per-polygon face normal. | |
static void | PerBitQuadFaceNormalized (ComputeMeshType &m) |
Exploit bitquads to compute a per-polygon face normal. | |
static void | PerFace (ComputeMeshType &m) |
Calculates the face normal. | |
static void | PerFaceFromCurrentVertexNormal (ComputeMeshType &m) |
Calculates the face normal by averaging the current per-vertex normals. | |
static void | PerFaceMatrix (ComputeMeshType &m, const Matrix44< ScalarType > &mat, bool remove_scaling=true) |
Multiply the face normals by the matrix passed. By default, the scale component is removed. | |
static void | PerFaceNormalized (ComputeMeshType &m) |
Equivalent to PerFace() and NormalizePerFace() | |
static void | PerFacePolygonal (ComputeMeshType &m) |
static void | PerFaceRW (ComputeMeshType &m, bool normalize=false) |
static void | PerPolygonalFace (ComputeMeshType &m) |
computePerPolygonalFace computes the normal of each polygonal face. | |
static void | PerPolygonalFaceNormalized (ComputeMeshType &m) |
Equivalent to PerPolygonalFace() and NormalizePerFace() | |
static void | PerVertex (ComputeMeshType &m) |
Calculates the vertex normal as the classic area weighted average. It does not need or exploit current face normals. | |
static void | PerVertexAngleWeighted (ComputeMeshType &m) |
Calculates the vertex normal as an angle weighted average. It does not need or exploit current face normals. | |
static void | PerVertexClear (ComputeMeshType &m, bool ClearAllVertNormal=false) |
Set to zero all the PerVertex normals. | |
static void | PerVertexFromCurrentFaceNormal (ComputeMeshType &m) |
Calculates the vertex normal by averaging the current per-face normals. | |
static void | PerVertexMatrix (ComputeMeshType &m, const Matrix44< ScalarType > &mat, bool remove_scaling=true) |
Multiply the vertex normals by the matrix passed. By default, the scale component is removed. | |
static void | PerVertexNelsonMaxWeighted (ComputeMeshType &m) |
Calculates the vertex normal using the Max et al. weighting scheme. It does not need or exploit current face normals. | |
static void | PerVertexNormalized (ComputeMeshType &m) |
Equivalent to PerVertex() and NormalizePerVertex() | |
static void | PerVertexNormalizedPerFace (ComputeMeshType &m) |
Equivalent to PerVertexNormalized() and PerFace(). | |
static void | PerVertexNormalizedPerFaceNormalized (ComputeMeshType &m) |
Equivalent to PerVertexNormalizedPerFace() and NormalizePerFace(). | |
static void | PerVertexPerFace (ComputeMeshType &m) |
Equivalent to PerVertex() and PerFace(). | |
static void | PerWedgeCrease (ComputeMeshType &m, ScalarType angleRad) |
Compute per wedge normals taking into account the angle between adjacent faces. |
Management, updating and computation of per-vertex, per-face, and per-wedge normals.
This class is used to compute or to update the normals that can be stored in the various component of a mesh. A number of different algorithms for computing per vertex normals are present.
It must be included after complex.h
typedef MeshType::CoordType vcg::tri::UpdateNormal< ComputeMeshType >::CoordType |
typedef MeshType::FaceIterator vcg::tri::UpdateNormal< ComputeMeshType >::FaceIterator |
typedef MeshType::FacePointer vcg::tri::UpdateNormal< ComputeMeshType >::FacePointer |
typedef MeshType::FaceType vcg::tri::UpdateNormal< ComputeMeshType >::FaceType |
typedef ComputeMeshType vcg::tri::UpdateNormal< ComputeMeshType >::MeshType |
typedef VertexType::NormalType vcg::tri::UpdateNormal< ComputeMeshType >::NormalType |
typedef VertexType::ScalarType vcg::tri::UpdateNormal< ComputeMeshType >::ScalarType |
typedef MeshType::VertexIterator vcg::tri::UpdateNormal< ComputeMeshType >::VertexIterator |
typedef MeshType::VertexPointer vcg::tri::UpdateNormal< ComputeMeshType >::VertexPointer |
typedef MeshType::VertexType vcg::tri::UpdateNormal< ComputeMeshType >::VertexType |
static void vcg::tri::UpdateNormal< ComputeMeshType >::NormalizePerFace | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::NormalizePerFaceByArea | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::NormalizePerVertex | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerBitPolygonFaceNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerBitQuadFaceNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFace | ( | ComputeMeshType & | m | ) | [inline, static] |
Calculates the face normal.
Not normalized. Use PerFaceNormalized() or call NormalizePerVertex() if you need unit length per face normals.
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFaceFromCurrentVertexNormal | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFaceMatrix | ( | ComputeMeshType & | m, |
const Matrix44< ScalarType > & | mat, | ||
bool | remove_scaling = true |
||
) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFaceNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerFace() and NormalizePerFace()
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFacePolygonal | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerFaceRW | ( | ComputeMeshType & | m, |
bool | normalize = false |
||
) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerPolygonalFace | ( | ComputeMeshType & | m | ) | [inline, static] |
computePerPolygonalFace computes the normal of each polygonal face.
Not normalized. Use PerPolygonalFaceNormalized() or call NormalizePerFace() if you need unit length per face normals.
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerPolygonalFaceNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerPolygonalFace() and NormalizePerFace()
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertex | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexAngleWeighted | ( | ComputeMeshType & | m | ) | [inline, static] |
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. The weight is simlply the angle of the involved wedge. Described in:
G. Thurmer, C. A. Wuthrich "Computing vertex normals from polygonal facets" Journal of Graphics Tools, 1998
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexClear | ( | ComputeMeshType & | m, |
bool | ClearAllVertNormal = false |
||
) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexFromCurrentFaceNormal | ( | ComputeMeshType & | m | ) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexMatrix | ( | ComputeMeshType & | m, |
const Matrix44< ScalarType > & | mat, | ||
bool | remove_scaling = true |
||
) | [inline, static] |
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexNelsonMaxWeighted | ( | ComputeMeshType & | m | ) | [inline, static] |
Calculates the vertex normal using the Max et al. weighting scheme. It does not need or exploit current face normals.
The normal of a vertex v is computed according to the formula described by Nelson Max in Max, N., "Weights for Computing Vertex Normals from Facet Normals", Journal of Graphics Tools, 4(2) (1999)
The weight for each wedge is the cross product of the two edge over the product of the square of the two edge lengths. According to the original paper it is perfect only for spherical surface, but it should perform well...
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerVertex() and NormalizePerVertex()
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexNormalizedPerFace | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerVertexNormalized() and PerFace().
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexNormalizedPerFaceNormalized | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerVertexNormalizedPerFace() and NormalizePerFace().
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerVertexPerFace | ( | ComputeMeshType & | m | ) | [inline, static] |
Equivalent to PerVertex() and PerFace().
static void vcg::tri::UpdateNormal< ComputeMeshType >::PerWedgeCrease | ( | ComputeMeshType & | m, |
ScalarType | angleRad | ||
) | [inline, static] |