




























Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Various techniques for processing and representing 3d meshes, including surface representations, data structures, mesh subdivision, and simplification. Topics covered include unstructured point sets, implicit surfaces, parametric splines, and parametric surfaces. The document also discusses the use of doubly-connected edge lists (dcel) for efficiently navigating meshes and computing properties such as vertex normals and curvature.
Typology: Study notes
1 / 36
This page cannot be seen from the preview
Don't miss anything!





























๎
๎
๎ (^) Piecewise polynomial (Splines) ๎ (^) Piecewise planar (triangle meshes)
๎ (^) Constructive Solid Geometry (CSG) ๎ (^) L-systems ๎ (^) Shape grammars
๎ (^) Sphere : x^2 + y^2 + z^2 โ r^2 = 0 ๎ In general ฮจ(x,y,z) = const. defines an isosurface. ๎
๎ (^) Extract mesh ๎ (^) Marching cubes ๎ (^) Marching tetrahedra ๎ (^) Define cells of adjacent voxels (8 voxels per cell for marching cubes) ๎ (^) Determine surface intersection with each cell by linear interpolation ๎ (^) Join intersection points with triangles (cases shown above) ๎ (^) Volume rendering ๎ (^) Design transfer function to visually extract isosurfaces.
๎
๎
๎
๎ (^) OpenMesh ๎ (^) Computational Geometry Algorithms Library (CGAL)
๎ (^) Faces (not necessarily triangles) ๎ (^) Half-edges ๎ (^) Form counter-clockwise paths about faces ๎ (^) Split each edge into an oppositely directed pair ๎ (^) Vertices
๎ (^) List edges around a face ๎ (^) Trivial since the edges form a linked-list ๎ (^) firstedge = f1.halfedge; ๎ (^) edge = firstedge; ๎ (^) do ๎ (^) list.append(edge); ๎ (^) edge = edge.next; ๎ (^) while (edge != firstedge) f1 f f3 f v1 v2 v v4 v5 v v7 v8 v
๎ (^) List vertices around face (f1) ๎ (^) firstedge = f1.halfedge; ๎ (^) edge = firstedge; ๎ (^) do ๎ (^) list.append(edge.head); ๎ (^) edge = edge.next; ๎ (^) while (edge != firstedge) ๎ (^) List faces around face ๎ (^) firstedge = f1.halfedge; ๎ (^) edge = firstedge; ๎ (^) do ๎ (^) if (edge.opposite != NULL) ๎ (^) list.append(edge.opposite.face); ๎ (^) edge = edge.next; ๎ (^) while (edge != firstedge) f1 f f3 f v1 v2 v v4 v5 v v7 v8 v
๎ (^) Traverse adjacent faces and accumulate face normals ๎ (^) Recall : face normal can be computed using cross product. ๎ (^) Normalize to get unit vector. n v n 1 n 2 n 3 n 4 n 5 nv =
i = 1 m n i
i = 1 m n i
๎ (^) For parametric surfaces it is the rate of change of the normal vector ๎ (^) A discrete approximation a point is given by
ฮธ 1
i = 1 m ๎พ i ฮธ ฮธ^2 3 ฮธ 4 ฮธ 5 ฮธ 1 ฮธ 2 ฮธ 3 ฮธ 4
1
2
3
4
As ๎พ n ๎ 0 ๎ ๎ 2 ๎
๎
๎
๎
๎ (^) variables : A B ๎ (^) constants : + โ ๎ (^) start : A ๎ (^) rules : (A โ BโAโB), (B โ A+B+A) ๎ (^) angle : 60ยฐ ๎ (^) A,B are straight lines ๎ (^) +,- are rotations by +/- angle