3D Computer Graphics: Mesh Processing and Surface Representations - Prof. Timothy E. Mcgra, Study notes of Computer Science

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

Pre 2010

Uploaded on 07/30/2009

koofers-user-j5y
koofers-user-j5y ๐Ÿ‡บ๐Ÿ‡ธ

9 documents

1 / 36

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Mesh processing
๎€ŠSurface representations
๎€ŠData structures for triangle meshes
๎€ŠMesh subdivision
๎€ŠMesh simplification
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Partial preview of the text

Download 3D Computer Graphics: Mesh Processing and Surface Representations - Prof. Timothy E. Mcgra and more Study notes Computer Science in PDF only on Docsity!

Mesh processing

๎€Š Surface representations

๎€Š

Data structures for triangle meshes

๎€Š Mesh subdivision

๎€Š Mesh simplification

Surface representations

๎€Š Unstructured point sets

๎€Š

Implicit

๎€Š Parametric

๎€Š (^) Piecewise polynomial (Splines) ๎€Š (^) Piecewise planar (triangle meshes)

๎€Š Procedural

๎€Š (^) Constructive Solid Geometry (CSG) ๎€Š (^) L-systems ๎€Š (^) Shape grammars

Implicit surfaces

๎€Š Represented analytically

๎€Š (^) Sphere : x^2 + y^2 + z^2 โ€“ r^2 = 0 ๎€Š In general ฮจ(x,y,z) = const. defines an isosurface. ๎€Š

Or, represent as discretized samples

๎€Š Useful for morphing and blending surfaces

๎€Š Easy intersection tests.

Implicit surface rendering

Two options

๎€Š (^) 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.

Parametric splines

๎€Š Most surfaces are too complex to be modelled with a

single patch.

๎€Š

Patches can be joined smoothly by constraining the

derivatives to match at patch boundaries.

Parametric surfaces

๎€Š Can be compactly represented in terms of control points,

coefficients.

๎€Š

โ€œInfinite zoomโ€ : You can evaluate at more points to get a

smooth surface at any level of detail

๎€Š Easy to compute derivatives (tangent, bitangent, normal)

๎€Š Difficult intersection tests.

๎€Š Need multiple patches or high order equation for complex

models.

Structured meshes

๎€Š Doubly connected edge list (DCEL)

๎€Š

Half-edge data structure

๎€Š Supplied by external libraries

๎€Š (^) OpenMesh ๎€Š (^) Computational Geometry Algorithms Library (CGAL)

Doubly-connected edge list (DCEL)

๎€Š Entities

๎€Š (^) Faces (not necessarily triangles) ๎€Š (^) Half-edges ๎€Š (^) Form counter-clockwise paths about faces ๎€Š (^) Split each edge into an oppositely directed pair ๎€Š (^) Vertices

๎€Š In a DCEL the half-edge is the

most important entity.

Doubly-connected edge list (DCEL)

๎€Š Now we can easily traverse a mesh...

๎€Š (^) 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

Doubly-connected edge list (DCEL)

๎€Š Now we can easily traverse a mesh...

๎€Š (^) 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

Computing Properties using the DCEL

๎€Š The DCEL simplifies computation of several differential

properties

๎€Š Vertex normals

๎€Š (^) 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

Computing Properties using the DCEL

๎€Š Curvature

๎€Š (^) For parametric surfaces it is the rate of change of the normal vector ๎€Š (^) A discrete approximation a point is given by

๎€Š What happens in these 2 extreme cases?

ฮธ 1

i = 1 m ๎‚พ i ฮธ ฮธ^2 3 ฮธ 4 ฮธ 5 ฮธ 1 ฮธ 2 ฮธ 3 ฮธ 4

1

2

3

4

As ๎‚พ n ๎‚Œ 0 ๎ƒ€ ๎‚Œ 2 ๎ƒ†

CSG

๎€Š Boolean operations applied to simple primitives

๎€Š

Commonly stored as a tree

      • =

L-systems

๎€Š

Generate shapes by string rewriting

๎€Š

Example : Sierpinski triangle

๎€Š (^) 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