+ All Categories
Home > Documents > Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.

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

Date post: 17-Dec-2015
Category:
Upload: ashley-reynolds
View: 216 times
Download: 1 times
Share this document with a friend
Popular Tags:
32
Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 2
Transcript
Page 1: Strips: Triangle and Quad Jyun-Ming Chen Reference: 1, 212.

Strips: Triangle and Quad

Jyun-Ming ChenReference: 1, 2

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Stripification

New word for “strip generation”

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

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.

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.

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.

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.

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.

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.

CGTopics, Spring 2010 21

Weight assignment

References: 1, 2

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

CGTopics, Spring 2010 22

Strip for a Cube

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

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.

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.

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.

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.

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.

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.

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.

[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.

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.

Stripifier

CGTopics, Spring 2010 32


Recommended