Point-normal triangle

From HandWiki

The curved point-normal triangle, in short PN triangle, is an interpolation algorithm to retrieve a cubic Bézier triangle from the vertex coordinates of a regular flat triangle and normal vectors. The PN triangle retains the vertices of the flat triangle as well as the corresponding normals. For computer graphics applications, additionally a linear or quadratic interpolant of the normals is created to represent an incorrect but plausible normal when rendering and so giving the impression of smooth transitions between adjacent PN triangles.[1] The usage of the PN triangle enables the visualization of triangle based surfaces in a smoother shape at low cost in terms of rendering complexity and time.

Mathematical formulation

With information of the given vertex positions [math]\displaystyle{ \mathbf{P}_{1},\mathbf{P}_{2},\mathbf{P}_{3} \in \mathbb{R}^{3} }[/math] of a flat triangle and the according normal vectors [math]\displaystyle{ \mathbf{N}_{1}, \mathbf{N}_{2}, \mathbf{N}_{3} }[/math] at the vertices a cubic Bézier triangle is constructed. In contrast to the notation of the Bézier triangle page the nomenclature follows G. Farin (2002),[2] therefore we denote the 10 control points as [math]\displaystyle{ \mathbf{b}_{ijk} }[/math] with the positive indices holding the condition [math]\displaystyle{ i+j+k = 3 }[/math].

The first three control points are equal to the given vertices.[math]\displaystyle{ \begin{align}\mathbf{b}_{300} &= \mathbf{P}_{1}, & \mathbf{b}_{030} &= \mathbf{P}_{2}, & \mathbf{b}_{003} &= \mathbf{P}_{3}\end{align} }[/math] Six control points related to the triangle edges, i.e. [math]\displaystyle{ i,j,k = \left\{0,1,2\right\} }[/math] are computed as[math]\displaystyle{ \begin{align} \mathbf{b}_{012} &= \frac{1}{3} \left( 2 \mathbf{P}_{3} + \mathbf{P}_{2} - \omega_{32}\mathbf{N}_{3}\right), & \mathbf{b}_{021} &= \frac{1}{3} \left( 2 \mathbf{P}_{2} + \mathbf{P}_{3} - \omega_{23}\mathbf{N}_{2}\right), &&\\ \mathbf{b}_{102} &= \frac{1}{3} \left( 2 \mathbf{P}_{3} + \mathbf{P}_{1} - \omega_{31}\mathbf{N}_{3}\right), & \mathbf{b}_{201} &= \frac{1}{3} \left( 2 \mathbf{P}_{1} + \mathbf{P}_{3} - \omega_{13}\mathbf{N}_{1}\right), &&\\ \mathbf{b}_{120} &= \frac{1}{3} \left( 2 \mathbf{P}_{2} + \mathbf{P}_{1} - \omega_{21}\mathbf{N}_{2}\right), & \mathbf{b}_{210} &= \frac{1}{3} \left( 2 \mathbf{P}_{1} + \mathbf{P}_{2} - \omega_{12}\mathbf{N}_{1}\right) & \qquad \text{with} \quad \omega_{ij} &= \left( \mathbf{P}_{j} - \mathbf{P}_{i} \right) \cdot \mathbf{N}_{i}.\\ \end{align} }[/math]This definition ensures that the original vertex normals are reproduced in the interpolated triangle.

Finally the internal control point [math]\displaystyle{ (i=j=k=1) }[/math]is derived from the previously calculated control points as [math]\displaystyle{ \begin{align} \mathbf{b}_{111} &= \mathbf{E} + \frac{1}{2} \left(\mathbf{E} - \mathbf{V}\right)\\ \text{with}&\quad \mathbf{E} = \frac{1}{6} \left(\mathbf{b}_{012} + \mathbf{b}_{021} + \mathbf{b}_{102} + \mathbf{b}_{201} + \mathbf{b}_{120} + \mathbf{b}_{210}\right)\\ \text{and}&\quad \mathbf{V} = \frac{1}{3} \left(\mathbf{P}_{1} + \mathbf{P}_{2}+ \mathbf{P}_{3}\right). \end{align} }[/math]

An alternative interior control point [math]\displaystyle{ \begin{align} \mathbf{b}_{111} &= \mathbf{E} + 5 \left(\mathbf{E} - \mathbf{V}\right) \end{align} }[/math] was suggested in.[3]

References

  1. Vlachos, Alex; Peters, Jörg; Boyd, Chas; Mitchell, Jason L. (2001-03-01). Curved PN triangles. ACM. pp. 159–166. doi:10.1145/364338.364387. ISBN 978-1581132922. https://archive.org/details/siggraph2001conf00fium/page/159. 
  2. Farin, Gerald E. (2002). Curves and surfaces for CAGD : a practical guide (5th ed.). San Francisco, CA: Morgan Kaufmann. ISBN 9780080503547. OCLC 181100270. 
  3. Kato, Saul S., "Curved Surface Reconstruction", USA patent 6,462,738, published oct. 08, 2002