Download presentation
Presentation is loading. Please wait.
Published byAshley Reynolds Modified over 9 years ago
1
Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212
2
CGTopics, Spring 20102 From Blue BookBlue 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.
3
CGTopics, Spring 20103 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) v n : (2n+2) v In general, n : (n+2) v n : (2n+2) v
4
CGTopics, Spring 20104 Syntax Sequence of vertices: follow the arrows separating the triangles ac bd 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.
5
CGTopics, Spring 20105 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
6
CGTopics, Spring 20106 Key Difference (swap) Common edges Head-tail connected: no swap Strut exists: swap! ac bd e f a b d e f c
7
CGTopics, Spring 20107 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
8
CGTopics, Spring 20108 Exercise How can this strip be made? a b d c f g h i j e Algorithmically, how does one construct a strip given a set of connected triangles?
9
CGTopics, Spring 20109 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
10
CGTopics, Spring 201010 Example ac bd e f abcdef (4 , 6v) All triangles are CW-winded abcdef (4 , 6v) All triangles are CCW-winded a c b e d f
11
CGTopics, Spring 201011 Example (Swap) abcxcdef (5 , 8v) All triangles are CCW-winded a c b e d f x ac bd e f aabcdef (4 , 7v) All triangles are CCW-winded
12
CGTopics, Spring 201012 Example (flat shading) ac bd e f Begin v(a) v(b) n(T 1 ), v(c) n(T 2 ), v(d) n(T 3 ), v(e) n(T 4 ), v(f) End T1T1 T2T2 T3T3 T4T4
13
CGTopics, Spring 201013 Remark: Flat Shading According to spec, the color/normal of flat shaded polygon depends on the last primitive-defining vertex So the code should work fine if glShadeModel(GL_FLAT) is specified However, 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!
14
Stripification New word for “ strip generation ”
15
CGTopics, Spring 201015 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 3 2 1 3 2 2 Tend to minimize leaving isolated triangles
16
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 201016
17
CGTopics, Spring 201017 1 1 3 3 2 1 3 2 2 1 1 2 3 2 1 3 2 2 1 0 2 2 2 1 3 1 2 1 0 1 2 2 1 3 1 1 1 0 1 2 2 1 2 0 1 1 0 1 2 1 0 2 0 0 1 0 1 2 1 0 1 0 0 Degree Update
18
CGTopics, Spring 201018 Supplement Strip collection is related to finding Hamliton paths in the dual graph While 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.
19
CGTopics, Spring 201019 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
20
CGTopics, Spring 201020 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)
21
CGTopics, Spring 201021 Weight assignment References: 1, 212
22
CGTopics, Spring 201022 Strip for a Cube
23
CGTopics, Spring 201023 Quad strip Syntax Winding (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.
24
CGTopics, Spring 201024 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
25
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 201025 Algorithm: Strip construction Assuming all triangles are CCW-oriented i=1 Stand-alone
26
Step 1 Stand alone vertex Find the common vertices between D1 & D2 Take the one that’s left alone CGTopics, Spring 201026
27
Step 3 Cases No Di+1 Add “other v” Di+1 (with swap) Di+1 (with no swap) CGTopics, Spring 201027 i-1 i other v i-1 i other v i+1 i-1 i other v i+1
28
CGTopics, Spring 201028 Example a b d c f g h i j e Add acb Add acbcd Add acbcdce Add acbcdcef Add acbcdcefg Add acbcdcefgh Add acbcdcefghgi Add acbcdcefghgij 1 2 3 4 5 6 7 8 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)
29
CGTopics, Spring 201029 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
30
[Tagging] CGTopics, Spring 201030 xxxx 0001 & 000x IsTagged ClearTag xxxx 1110 & xxx0 SetTag xxxx 0001 | xxx1 ToggleTag xxxx 0001 ^ xxxx A quicker way to find the intersection of two sets
31
Stripifier by OpenMesh OpenMesh/Tools/Utils The strips generated are not as good CGTopics, Spring 201031
32
Stripifier CGTopics, Spring 201032
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.