docs: state the actual quad-winding rule in SURFACE-NETS-PROVENANCE.md
The provenance doc still described the deleted geometric winding rule (diagonal cross product must have a positive dot product with the inside->outside direction) as the spec. That rule was replaced by the inside-flag times per-axis handedness table (OrientationSign: +1, -1, +1; axis 1's perpendicular pair (X, Z) is left-handed) when the geometric fallback was deleted. State that as the actual rule, with the outward-cross-product property following only on non-degenerate quads. Also record that non-finite isoValue/origin are rejected. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
396b2996a5
commit
15d172df3f
1 changed files with 12 additions and 3 deletions
|
|
@ -25,9 +25,18 @@ Deliberate behavior:
|
|||
- one quad is emitted per crossing interior grid edge, from the (up to) four
|
||||
cells that share it; an edge whose four surrounding cells do not all exist
|
||||
emits no quad, leaving the mesh open at the field boundary;
|
||||
- quad winding is oriented outward: the diagonal cross product of each quad
|
||||
must have a positive dot product with the direction from the edge's inside
|
||||
endpoint to its outside endpoint;
|
||||
- quad winding is decided by which of the crossing edge's two endpoints is
|
||||
inside, times the per-axis handedness table (`OrientationSign`: `+1, -1,
|
||||
+1`), never by a per-quad geometric test: axis 1's perpendicular pair (X,
|
||||
Z) is left-handed, so its sign is mirrored relative to axes 0 and 2. On a
|
||||
non-degenerate (non-zero-area) quad this decision has the outward-facing
|
||||
property as a corollary: the diagonal cross product of the quad has a
|
||||
positive dot product with the direction from the edge's inside endpoint to
|
||||
its outside endpoint. A degenerate quad carries no such geometric property
|
||||
to check, but still orients consistently with its neighbors because the
|
||||
rule never looks at its geometry;
|
||||
- non-finite `isoValue` or `origin` components are rejected, matching the
|
||||
existing rejection of non-finite samples and cell size;
|
||||
- vertices are welded: one vertex per active cell, shared by every quad
|
||||
touching that cell;
|
||||
- face-weighted normals sum each quad's diagonal cross product (unnormalized,
|
||||
|
|
|
|||
Loading…
Reference in a new issue