+ All Categories
Home > Documents > Strips: Triangle and Quad

Strips: Triangle and Quad

Date post: 14-Jan-2016
Category:
Upload: irisa
View: 22 times
Download: 0 times
Share this document with a friend
Description:
Strips: Triangle and Quad. Jyun-Ming Chen Reference: 1 , 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 - PowerPoint PPT Presentation
32
Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 2
Transcript
Page 1: Strips: Triangle and Quad

Strips: Triangle and Quad

Jyun-Ming ChenReference: 1, 2

Page 2: Strips: Triangle and Quad

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

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

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

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

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

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

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

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

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

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

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

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

Stripification

New word for “strip generation”

Page 15: Strips: Triangle and Quad

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

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

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

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

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

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

CGTopics, Spring 2010 21

Weight assignment

References: 1, 2

Page 22: Strips: Triangle and Quad

CGTopics, Spring 2010 22

Strip for a Cube

Page 23: Strips: Triangle and Quad

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

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

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

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

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

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

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

[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

Stripifier by OpenMesh

OpenMesh/Tools/UtilsThe strips generated are not as good

CGTopics, Spring 2010 31

Page 32: Strips: Triangle and Quad

Stripifier

CGTopics, Spring 2010 32


Recommended