Daubechies Wavelets A first look Ref: Walker (Ch.2) Jyun-Ming Chen, Spring 2001.
Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.
-
Upload
ashley-reynolds -
Category
Documents
-
view
216 -
download
1
Transcript of Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.
![Page 1: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/1.jpg)
Strips: Triangle and Quad
Jyun-Ming ChenReference: 1, 2
![Page 2: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/2.jpg)
CGTopics, Spring 2010 2
From Blue Book
GL_TRIANGLE_STRIP For odd n, vertices n, n+1, and n+2 define triangle n. For even n, vertices n+1, n, and n+2 define triangle n.
GL_QUAD_STRIP Vertices 2n-1, 2n, 2n+2, and 2n+1 define
quadrilateral n.
![Page 3: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/3.jpg)
CGTopics, Spring 2010 3
Using Strips
Reduce number of glVertex calls Each glVertex call send a data
through pipeline: matrix multiplication, …
4 6v instead of 12v
3: 8v instead of 12v
In general, n: (n+2) vn: (2n+2) v
In general, n: (n+2) vn: (2n+2) v
![Page 4: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/4.jpg)
CGTopics, Spring 2010 4
Syntax
Sequence of vertices: follow the arrows separating the triangles
a c
b d
e
f
abcdef[abc,bcd,cde,def] [abc,cbd,cde,edf]
alternate winding; interpret as ….
GL_TRIANGLE_STRIP
For odd n, vertices n, n+1, and n+2 define triangle n.
For even n, vertices n+1, n, and n+2 define triangle n.
![Page 5: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/5.jpg)
CGTopics, Spring 2010 5
Swap
Sometimes, additional vertices need to be added (known as swap)
a
b d
e
f
c
[abc,cbd,cdc,cde,cef]
abcdcef[abc,bcd,cdc,dce,cef]
alternate winding
A penalty: need one
more vertex for the swap
Swap is a penalty; but breaking into two strips is more costly
![Page 6: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/6.jpg)
CGTopics, Spring 2010 6
Key Difference (swap)
Common edges Head-tail connected: no swap Strut exists: swap!
a c
b d
e
f
a
b d
e
f
c
![Page 7: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/7.jpg)
CGTopics, Spring 2010 7
Fan: a strip with many swaps
b
c
d
e
a
bacadae
(bac, aca, cad, ada, dae)
The same geometry can be given by a triangle fan:
aedcb
![Page 8: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/8.jpg)
CGTopics, Spring 2010 8
Exercise
How can this strip be made?
a
b d
c
fg
h i
j
e
Algorithmically, how does one
construct a strip given a set of
connected triangles?
![Page 9: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/9.jpg)
CGTopics, Spring 2010 9
Other Topics of Triangle Strips
Winding: determined by the first triangle Related: glFrontFace, glCullFace
Shading: Smooth: specify normal vector preceding
each vertex Flat: only send (face) normal before the
face-defining vertex
![Page 10: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/10.jpg)
CGTopics, Spring 2010 10
Example
a c
b d
e
fabcdef (4, 6v)All triangles are CW-winded
abcdef (4, 6v)All triangles are CCW-winded
a c
b
e
d f
![Page 11: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/11.jpg)
CGTopics, Spring 2010 11
Example (Swap)
abcxcdef (5, 8v)All triangles are CCW-winded
a c
b
e
d fx
a c
b d
e
f
aabcdef (4, 7v)All triangles are CCW-winded
![Page 12: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/12.jpg)
CGTopics, Spring 2010 12
Example (flat shading)
a c
b d
e
f Begin v(a) v(b) n(T1), v(c) n(T2), v(d) n(T3), v(e) n(T4), v(f)End
T1
T2 T3
T4
![Page 13: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/13.jpg)
CGTopics, Spring 2010 13
Remark: Flat Shading
According to spec, the color/normal of flat shaded polygon depends on the last primitive-defining vertexSo the code should work fine if glShadeModel(GL_FLAT) is specifiedHowever, if the shade model is changed to GL_SMOOTH, the normal vectors will be assigned to either (0,0,1) or (-1,0,0) depending on the order of traversal. Be careful!
This code can be problematic!
![Page 14: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/14.jpg)
Stripification
New word for “strip generation”
![Page 15: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/15.jpg)
CGTopics, Spring 2010 15
Greedy Stripping (SGI)
Each triangle associated with an adjacency number (degree in dual graph)Start from the triangle with lowest degree, collect along the path with uncollected & fewer degree triangle
1
1
3
32 1
3
2
2
Tend to minimize leaving isolated triangles
![Page 16: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/16.jpg)
Details (OpenMesh)Assign each face with the following integer property: degree (face valence); collected
For triangular mesh, four possible values for degree: 0 (isolated), 1, 2, 3
No need to sort; just start from any triangle with degree 1. When exhausted, start with degree 2, then degree 3.
Output degree 0 triangle as GL_TRIANGLES Collect the triangle.idx into an STL vector
Degree update When a triangle is collected, decrement the degree
of its neighbors
CGTopics, Spring 2010 16
![Page 17: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/17.jpg)
CGTopics, Spring 2010 17
1
1
3
32 1
3
2
2
1
1
2
32 1
3
2
2
1
0
2
22 1
3
1
2
1
0
1
22 1
3
1
1
1
0
1
22 1
2
0
1
1
0
1
21 0
2
0
0
1
0
1
21 0
1
0
0 Degree Update
![Page 18: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/18.jpg)
CGTopics, Spring 2010 18
Supplement
Strip collection is related to finding Hamliton paths in the dual graphWhile a single Hamilton path seems impossible, longer strips are preferred (for better rendering speed)
Wikipedia: In the mathematical field of graph theory, a Hamiltonian path (or traceable path) is a path in an undirected graph which visits each vertex exactly once.
![Page 19: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/19.jpg)
CGTopics, Spring 2010 19
Stripification (Kommann)
Starting triangle: one with least number of adjacency that are not part of any strip Idea: process isolated triangles first
Step Evaluate the weight all neighboring
triangles; choose the one with minimum weight to continue the strip
![Page 20: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/20.jpg)
CGTopics, Spring 2010 20
Kommann (cont)
Weight evaluation Face Connectivity: 0,1,2 (# of
triangles not visited) – include poorly connected triangles first
Node connectivity: use connectivity of nodes of the current triangle to decide which side to add: +1 for highest connected node, -1 for all other nodes
Swap required: +1(yes), -1(no)
![Page 21: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/21.jpg)
CGTopics, Spring 2010 21
Weight assignment
References: 1, 2
![Page 22: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/22.jpg)
CGTopics, Spring 2010 22
Strip for a Cube
![Page 23: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/23.jpg)
CGTopics, Spring 2010 23
Quad strip
SyntaxWinding (consistent)Shading smooth shading: averaging vertex
colors Flat shading: the color of the last
defining vertex
GL_QUAD_STRIP
Vertices 2n-1, 2n, 2n+2, and 2n+1
define quadrilateral n.
Compare GL_QUADS
Vertices 4n-3, 4n-2, 4n-1, and 4n
define quadrilateral n.
![Page 24: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/24.jpg)
CGTopics, Spring 2010 24
Example (quadstrip)0
1
2
3
4
5
Quads are formed as (0,1,3,2) and (2,3,5,4)Using quadstrip: we give 0,1,2,3,4,5
Using quads: we need to give 0,1,3,2, 2,3,5,4
![Page 25: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/25.jpg)
1. Add the vertices of the (i=1) to the strip. From the “stand alone” vertex
2. Increment i, adding i
3. Consider the existence of i If no, add the “other v” of i If yes, find the common vertex between i & i-1
If the common vertex is the last (tail) vertex in the strip, add the “other v” of i
If not, add the common vertex to the strip (swap), then add the “other v” of i
4. Proceed to step 2, until all triangles have been added
CGTopics, Spring 2010 25
Algorithm: Strip construction
Assuming all triangles are CCW-oriented
i=1
Stand-alone
![Page 26: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/26.jpg)
Step 1
Stand alone vertex Find the common vertices between
D1 & D2 Take the one that’s left alone
CGTopics, Spring 2010 26
![Page 27: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/27.jpg)
Step 3 Cases
No Di+1 Add “other v”
Di+1 (with swap)
Di+1 (with no swap)
CGTopics, Spring 2010 27
i-1i
other v
i-1i
other v
i+1
i-1i
other v
i+1
![Page 28: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/28.jpg)
CGTopics, Spring 2010 28
Example
a
b d
c
fg
h i
j
e
Add acb
Add acbcd
Add acbcdce
Add acbcdcef
Add acbcdcefg
Add acbcdcefgh
Add acbcdcefghgi
Add acbcdcefghgij
12
3
45
67
8
If the common vertex between i & i-1 is not end of strip, swap is needed
If the common vertex between i & i-1 is not end of strip, swap is needed
Input: triangles to be put in a strip (1-8)Output: the vertices forming the strip (the 13 vertices)
![Page 29: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/29.jpg)
CGTopics, Spring 2010 29
Remark
The underlying data structure should be able to answer these queries efficiently Stand-alone vertex of triangle “other-v” of a triangle Common vertex of two triangles For Kommann stripification
Number of unvisited neighbors of a triangle Number of triangles connecting to a vertex
![Page 30: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/30.jpg)
[Tagging]
CGTopics, Spring 2010 30
xxxx
0001&
000xIsTagged ClearTag
xxxx
1110&
xxx0SetTag
xxxx
0001|
xxx1
ToggleTag
xxxx
0001^
xxxx
A quicker way to find the intersection of two sets
![Page 31: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/31.jpg)
Stripifier by OpenMesh
OpenMesh/Tools/UtilsThe strips generated are not as good
CGTopics, Spring 2010 31
![Page 32: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.](https://reader035.fdocuments.us/reader035/viewer/2022062713/56649cea5503460f949b4df3/html5/thumbnails/32.jpg)
Stripifier
CGTopics, Spring 2010 32