|
| | TAttrBasedQuadricError (const TVector< RealType > &P0, const TVector< RealType > &P1, const TVector< RealType > &P2, const TVector< RealType > &N0, const TVector< RealType > &N1, const TVector< RealType > &N2, const TVector< RealType > &NFace, const TVector< RealType > &CenterPoint, RealType AttrWeight) |
| |
| | TAttrBasedQuadricError () |
| |
| | TAttrBasedQuadricError (const TAttrBasedQuadricError &Aother, const TAttrBasedQuadricError &Bother) |
| |
| void | Add (RealType w, const TAttrBasedQuadricError &other) |
| |
| bool | OptimalPoint (UE::Math::TVector< RealType > &OptPoint, RealType minThresh=1000.0 *TMathUtil< RealType >::Epsilon) const |
| |
| RealType | Evaluate (const TVector< RealType > &point, const TVector< RealType > &InAttr) const |
| |
| void | ComputeAttributes (const TVector< RealType > &point, TVector< RealType > &attr) const |
| |
| RealType | Evaluate (const TVector< RealType > &point) const |
| |
| | TVolPresQuadricError () |
| |
| | TVolPresQuadricError (const TVector< RealType > &Normal, const TVector< RealType > &Point) |
| |
| | TVolPresQuadricError (const TVolPresQuadricError &a, const TVolPresQuadricError &b) |
| |
| | TVolPresQuadricError (const TVolPresQuadricError &a, const TVolPresQuadricError &b, const FPlaneData &DuplicatePlaneData) |
| |
| void | Add (RealType w, const TVolPresQuadricError &b) |
| |
| bool | OptimalPoint (UE::Math::TVector< RealType > &OutResult, RealType minThresh=1000.0 *TMathUtil< RealType >::Epsilon) const |
| |
| | TQuadricError () |
| |
| | TQuadricError (const TVector< RealType > &Normal, const TVector< RealType > &Point) |
| |
| | TQuadricError (const TQuadricError &a, const TQuadricError &b) |
| |
| void | Add (RealType w, const TQuadricError &b) |
| |
| void | Add (const TQuadricError &b) |
| |
| void | Subtract (const TQuadricError &b) |
| |
| void | AddSeamQuadric (const TQuadricError &b) |
| |
| void | SubtractSeamQuadric (const TQuadricError &b) |
| |
| void | Scale (RealType w) |
| |
| RealType | Evaluate (const UE::Math::TVector< RealType > &pt) const |
| |
| TVector< RealType > | MultiplyA (const UE::Math::TVector< RealType > &pt) const |
| |
| bool | SolveAxEqualsb (UE::Math::TVector< RealType > &OutResult, const RealType bvecx, const RealType bvecy, const RealType bvecz, const RealType minThresh=1000.0 *TMathUtil< RealType >::Epsilon) const |
| |
| bool | OptimalPoint (UE::Math::TVector< RealType > &OutResult, RealType minThresh=1000.0 *TMathUtil< RealType >::Epsilon) const |
| |
template<
typename RealType>
class UE::Geometry::TAttrBasedQuadricError< RealType >
Quadric Error type for use in volume memory-less simplification with volume preservation constraints. using the normal as three additional attributes to contribute to the quadric error. See: http://hhoppe.com/newqem.pdf
Given a scalar attribute 'a' defined at the vertices e.g. a0, a1, a2 (in this case the attribute is a single component of the vertex normal)
solve 4x4 system: (p0^t 1) (g[0]) = (a0) (p1^t 1) (g[1]) (a1) (p2^t 1) (g[2]) (a2) (n^t 0) ( d ) (0 )
for the interpolating gradient 'g' – note this is really p.dot(g) + d = a0 and n.dot(g) = 0
this system can be re-written as < e_20 | g > = (a2-a0) < e_10 | g > = (a1-a0) < n | g > = 0 and
< p0 | g > + d = a0. where e_20 is the edge vector p2 - p0 e_10 is the edge vector p1 - p0.
the first 3 equations can be solved for the vector 'g' either as a 3x3 matrix system or one could solve a 2x2 system since 'g' must be in the plane spanned by {e20, e10}
( give 'n' is orthogonal to the triangle face).
For this quadric, each component of the normal is treated as separate attribute.