Expand description
Silhouettes: where a curved face turns away from the eye, the outline it shows without any edge there — the sides of a cylinder seen side on.
For a view along d, a point of a surface Scalar(u, v) is on its silhouette
when its normal is perpendicular to d: g(u, v) = (S_u x S_v) . d = 0.
That is a curve in (u, v), traced here as such:
- Seeds.
g’s sign is sampled along a grid of iso lines of the surface’s domain. Between two samples of opposite sign a silhouette crosses the line, and bisection finds where. Sampling only decides where to look: what is traced is the exact zero set. The interior grid lines sit at irrational fractions of the domain, a free choice made so they do not run along the symmetric iso lines silhouettes so often are. A closed loop crossing no grid line lies within one cell, and encloses a critical point ofg(an extremum): each cell wheregcould vanish is halved into boxes, those that could hold a critical point halved again, and through each left a line across the cell is sampled too ([loop_seats]), crossing such a loop. A trace seeded on a short line steps no further than half of it, so a small loop is traced in steps of its own size. - Tracing. From a seed, predictor-corrector steps follow the curve:
a step along the tangent
(-g_v, g_u), sized to a fixed length in 3-D, then Newton back ontog = 0. A trace ends where the curve leaves the domain, landing exactly on its boundary, or where it closes on itself. Every grid line a trace crosses marks the seed there as traced. - Trimming. The traced curve in
(u, v)is cut where it crosses the face’s trim curves, and only the pieces inside the face are kept. - Curves. Each piece becomes a 3-D curve through exact silhouette
points along it, widened to enclose the silhouette between them too
(as a traced intersection branch is,
NurbCurve3D::fit_enclosing): two silhouettes that are one line on the paper — mirror images seen along the mirror’s normal — are then seen to run along each other.
The curve encloses the silhouette, so a point of it is near the
silhouette, within its width, not on it. Whoever needs a point exactly
on it — the visibility test does: a ray grazing a face at its silhouette
tells the truth only from the exact point — asks
Silhouette::exact_point.
Structs§
- Silhouette
- A piece of a face’s silhouette.
Functions§
- edge_
crossings - Where the edge
curve, bounding the faceface_idalong the coedgecoedge_id, crosses the face’s silhouette seen alongd: the parameters where the face’s normal there turns perpendicular tod. - face_
silhouettes - The silhouette of
face_idseen along the unit vectord, as curves on the face: none for a plane, or for a face seen edge on throughout.