Bigyan Ankur Mukherjee University of Utah
Given a set of Points P sampled from a surface Σ, Find a Surface Σ * that “approximates” Σ Σ * is generally given as a polygon mesh
P+ : Farthest Vertex in Voronoi Cell V p (adjusted for unbounded case) P- : Farthest vertex in V x ∃ < 0 The vector P + P - (Pole Vector) approximates the normal at p P+P+ P-P- P+ P-
Draw two cones at p with angle 3 π/8 around the pole vector The region complementary to these two cones and clipped by the Voronoi Cell is the co-cone at point p
1. Compute Delaunay Triangulation D 2. Consider only those Triangles in D that intersects all the three co-cones at the three vertices [FILTER] 3. Delete all Triangles incident on “Sharp Edges”[PRUNE] 4. Extract a manifold out of the remaining Triangles[WALK]
Compute Voronoi Diagram For each point p Store the pole vector (p)= P + P - with p For each triangle t in D For each vertex v of t If (v) or - (v) makes an angle greater than π/8 with the normal to t, Remove t from D
Pending = Ф For each edge e in D Pending.push(e) While Pending ≠Ф e = Pending.pop() If e is sharp For each triangle t incident on e Remove t from D An edge is sharp if there is only one triangle incident on it
For each triangle t in D Orient the edges of t w.r.t. a global orientation Surface = Ф Choose one triangle t from D that is on the convex hull Surface.insert (t) Grow the surface starting from t by walking along the edges and choosing the neighboring triangle that best fits the orientation of current triangle at each step
1. Voronoi-based: For each point p, the pole vector (v) gives the estimated normal 2. Principal Component Analysis Fit a linear least square plane to all points inside a ball of predefined radius and return the normal The normals obtained in both cases are not oriented For orienting normals, we use the algorithm presented in Hoppe et.al. ‘92
From a point set with oriented normals, computes a scalar field which is zero inside the surface and >0 outside (by solving a PDE) Extracts the zero level set of the surface