Document

advertisement
Mesh Representation, part II
based on:
Data Structures for Graphics, chapter 12 in
Fundamentals of Computer Graphics, 3rd ed.
(Shirley & Marschner)
Slides by Marc van Kreveld
1
3D objects
facets
edges
vertices
2
3D objects
• We typically represent the boundary; the interior is
implied to be the bounded subspace
• We will assume linear boundaries here, so we have
facets, edges, and vertices (and the interior)
3
Triangle meshes
• Many freeform shapes consist of (many) triangles
4
Triangle meshes
• How are triangles, edges, and vertices allowed to
connect?
• How do we represent (store) triangle meshes?
• How efficient are such schemes?
Separate triangle mesh
Indexed triangle mesh
Triangle neighbor structure
Winged-edge structure
5
Winged-edge structure
• Stores connectivity at edges instead of vertices
• For one edge, say, e1:
– Two vertices are important: v4 and v6
– Two triangles are important: T5 and T6
– Four edges are important: e2, e14, e5, and e8
e7
e3
e11
e8
e12 e14
e9
e4
v6
e2
e13
e1
e5
e6
v1
e10
v2
T2
T1 T
v5 5
T3
T4
v3
v7
T6
T7
v4
v8
6
Winged-edge structure
• Give e1 a direction, then
– v4 is the tail and v6 is the head
– T5 is to the left and T6 is to the right
– e2 is previous on the left side, e14 is next on the left side,
e5 is previous on the right side, and e8 is next on the right side
e7
e3
e11
e8
e12 e14
e9
e4
v6
e2
e13
e1
e5
e6
v1
e10
v2
T2
T1 T
v5 5
T3
T4
v3
v7
T6
T7
v4
v8
7
Winged-edge structure
• Give e1 a direction, then
– v4 is the tail and v6 is the head
– T5 is to the left and T6 is to the right
– e2 is previous on the left side, e14 is next on the left side,
e5 is previous on the right side, and e8 is next on the right side
head
v6
rnext
e8
e14
lnext
T6
right
e1
T5
left
e5
rprev
e2
lprev
v4
8
tail
Winged-edge structure
Edge {
Edge lprev, lnext, rprev, rnext;
Vertex head, tail;
Triangle left, right
}
Vertex {
double x, y, z;
Edge e; // any incident
}
Triangle {
Edge e; // any incident
}
head
lnext
rnext
right
left
rprev
lprev
tail
9
Winged-edge structure
• Also works for meshes that do not only use triangles
– There is still one head and one tail
– There is still one left face and one right face
– There are still previous and next edges in the left face and
in the right face: e13, e7, e6, and e8
e7
e3
e11
e8
e12
e4
e1
e13
e10
e6
Note: The triangle
neighbor structure
does not generalize
10
Winged-edge structure
• It also works for planar subdivisions like country maps
11
Winged-edge structure
Edge {
Edge lprev, lnext, rprev, rnext;
Vertex head, tail;
Face left, right
}
Vertex {
double x, y;
Edge e;
// any incident
}
Face {
Edge e;
}
e7
e3
e11
e8
e12
e4
e1
e13
e10
e6
// any incident
12
Winged-edge structure, storage
• A triangular mesh with nv vertices has  3nv edges
and  2nv triangles
• A vertex needs 3(4) units of storage (with z coord.)
• An edge needs 8 units of storage
• A triangle needs 1 unit of storage
 3(4) + 38 + 21 = 29(30) nv units of storage
13
Winged-edge structure
• However, the arbitrary orientation of edges makes
traversal of the boundary of a face awkward
e7
e3
e11
e12
With consistent orientations,
we could report the vertices
of a face iteratively:
e8
F5
e4
e13
e5
e1
e10
x e6
e2
while ( e  estart ) {
e = e.lnext;
report e.tail.coordinates;
}
But consistent orientations
14
usually do not exist
Winged-edge structure
while ( e  estart ) {
if (forward) {
report e.tail.coordinates;
enew = e.lnext;
if (enew.head == e.head) forward = false;
}
else {
report e.head.coordinates;
enew = e.rprev;
if (enew.tail == e.tail) forward = true;
}
e = enew;
}
enew
face
e
enew
face
e
15
Half-edge structure
• A.k.a. doubly-connected edge list, DCEL
• Allows the purely forward traversal of the boundary
of a face
• Every edge is represented as two half-edges
(split lengthwise!)
16
Half-edge structure
• A consistent orientation around every face now works!
• Every half-edge is
incident only to
the face to its left
(by convention)
 then every face
has its half-edges
oriented counterclockwise
17
Half-edge structure
HEdge {
HEdge next, pair;
Vertex head;
Face f;
}
head
next
pair
f
Vertex {
double x, y;
HEdge h; // any incident half-edge
// pointing to this vertex
}
Face {
HEdge h; // any incident half-edge in its boundary
}
18
Half-edge structure
• A half-edge h can find its
tail as h.pair.head
• A half-edge h can find
the other face incident
to the edge it is part of
as h.pair.f
head
next
pair
f
• A half-edge cannot find its prev easily (prev is the
opposite of next); it is a design choice to include an
extra prev in HEdge or not
19
Half-edge structure, storage
• A triangular mesh with nv vertices has  3nv edges
and  2nv triangles
• A vertex needs 3(4) units of storage (with z coord.)
• A half-edge needs 4 units of storage
• A triangle needs 1 unit of storage
 3(4) + 324 + 21 = 29(30) nv units of storage
20
Half-edge structure, storage
• A half-edge needs 5 units of storage when prev is
also stored
 3(4) + 325 + 21 = 35(36) nv units of storage
21
Half-edge structure, storage
• For country maps instead of triangular meshes, a map
with nv vertices has  nv edges and << nv faces
 3 + 25 + 1 = 14 nv units of storage
22
Half-edge structure, storage
• For country maps instead of triangular meshes, a map
with nv vertices has  nv edges and << nv faces
• In GIS, the long sequences of degree-2 vertices
(chains) defining the shape of a border are stored
differently, with the vertices in an array, so no next and
prev are needed
• We can define half-chains
• The whole half-chain has the same left face
• Each half-chain has a next half-chain, a prev half-chain,
and a pair half-chain
23
Half-edge structure
• Planar subdivisions have much fewer faces and halfchains than the total number of vertices and edges
24
Half-edge structure
25
Half-edge structure
• Planar subdivisions may have “islands/holes” in faces:
faces from which pieces are excluded
• In this case the graph of vertices and edges is not a
connected graph
f
26
Half-edge structure
• Faces with holes are common
in 3D CAD/CAM models too
27
Half-edge structure for
subdivisions with holes
HEdge {
HEdge next, pair;
Vertex head;
Face f;
}
Vertex {
double x, y, x;
HEdge h; // any incident half-edge
// pointing to this vertex
}
Face {
HEdge h;
// any incident half-edge in its boundary
HEdge inner[k]; // for each hole, any incident half-edge;
// allows up to k holes in the face
}
28
Half-edge structure for
subdivisions with holes
f.inner[0]
f
f.inner[1]
f.h
29
Half-edge structure for
subdivisions with holes
• Every bounded face has exactly one counterclockwise
cycle of half-edges bounding it from the outside, and
zero or more clockwise cycles of half-edges bounding
that face from the inside (holes)
• The structure also works for any planar straight-line
graph (PSLG), with possibly:
– dangling edges or other dangling structures
– loose edges
30
Planar versus non-planar
• None of the structures allow edge-crossings, as faces
would not be well-defined, and points can lie in
multiple faces at once
31
3D meshes
• So far, we can represent 2D subdivisions
and boundaries of 3D solids, but not 3D
subdivisions
32
3D tetrahedral meshes
• The 3D version of a triangle is a tetrahedron
• The 3D version of a triangular mesh is a tetrahedral
mesh (and triangulation vs. tetrahedralization)
33
3D tetrahedral meshes
• A 3D tetrahedral mesh has the following features:
–
–
–
–
vertices
edges
triangles
tetrahedra
(0-dimensional)
(1-dimensional)
(2-dimensional)
(3-dimensional)
34
3D tetrahedral meshes
• In a proper 3D tetrahedral mesh:
–
–
–
–
–
–
Every vertex is endpoint of some edge
For every edge, both endpoints are vertices of the mesh
Every edge is a side of some triangle
For every triangle, its three sides are edges of the mesh
Every triangle is a facet of some tetrahedron
For every tetrahedron, its four facets are triangles of the
mesh
– If edges, vertices, and tetrahedra are considered to be
open, then no two features of the mesh intersect
35
3D tetrahedral meshes
• Every polygon can be converted into a triangular
mesh without needing extra vertices, but polyhedra
exist that cannot be converted into a tetrahedral
mesh without extra edges and vertices
Schönhardt polyhedron
36
3D tetrahedral meshes
• Representation of 3D tetrahedral meshes:
– Indexed tetrahedron mesh: classes for vertex and
tetrahedron; a tetrahedron can access its four vertices
– Tetrahedron neighbor structure: classes for vertex and
tetrahedron; a tetrahedron can access its four vertices
and its (up to) four neighbor tetrahedra
– Simplices structure: classes for vertex, edge, triangle,
and tetrahedron
37
Simplices structure
• A k-simplex is the convex hull defined by k+1 points
that do not lie in any single (k-1)-dim. linear variety
• Equivalent: the k+1 points p0, ..., pk are such that the
vectors p0p1, p0p2, ..., p0pk are linearly independent
–
–
–
–
–
0-simplex: point / vertex
1-simplex: line segment / edge
2-simplex: triangle
3-simplex: tetrahedron
4-simplex: convex hull of 5 non-co-hyperplanar
points in 4-space
38
Simplices structure
• A vertex has access to one incident edge
• An edge has access to its vertices and one
incident triangle
vertex
• A triangle has access to
both
some
its three edges and both
edge
incident tetrahedra
some
all 3
• A tetrahedron has access
triangle
to its four triangles
both
all 4
tetrahedron
39
Simplices structure
• Can also be used for 4D and even higher-D
• 4D can be space-time for changing objects
• Higher-D can be the space of location and orientation
of a rigid 3D object (6D)
40
Simplices structure
• Always: k-simplices have
access to (k-1)-simplices
and (k+1)-simplices
0-dim
both
some
1-dim
some
all 3
some
all d
(d-1)-dim
both
all d+1
d-dim
41
Quadrilateral meshes
42
Quadrilateral meshes
43
Not every subdivision with triangular
faces is a triangular mesh
44
Meshes have multi-resolution
possibilities
45
Representation of 3D models:
summary
• Boundary or solid model representation
• Triangle mesh, quadrilateral mesh, general faces
• Meshes that store incidence/adjacency of features
allow traversal on the mesh
 faster (local) operations
• Triangle strips may be useful for transmitting meshes
• Higher-dimensional mesh representations exist as
well
46
Questions
1. Write code to report all vertices adjacent to a given vertex v
in a half-edge structure for a triangular mesh. Is your solution
clockwise or counter-clockwise?
Now do it the other way around
2. Do the same for general subdivisions, clockwise and counterclockwise
3. Write code to report all vertices in the boundary of a face
that may have holes and is given in a half-edge structure
4. How do you access the four 3-simplices adjacent to a given
3-simplex in a simplices structure in 3D?
5. How many units of storage are needed in the different
structures for tetrahedrilization?
47
Download