Presentation is loading. Please wait.

Presentation is loading. Please wait.

Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.

Similar presentations


Presentation on theme: "Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212."— Presentation transcript:

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


Download ppt "Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212."

Similar presentations


Ads by Google