+ All Categories
Transcript
Page 1: Large Mesh Simplification using Processing Sequences

Large Mesh Simplificationusing Processing Sequences

Martin IsenburgUNC

Chapel Hill

Peter LindstromLLNL

Livermore

Stefan GumholdGRIS

Tubingen

Jack SnoeyinkUNC

Chapel Hill

Page 2: Large Mesh Simplification using Processing Sequences

Overview

• Motivation

• Background

• Processing Sequences

• Adapted Simplification Schemes– OOCS

– Wu & Kobbelt

• Conclusion

Page 3: Large Mesh Simplification using Processing Sequences

Motivation

Page 4: Large Mesh Simplification using Processing Sequences

Large Meshes

3D scans isosurfaces

Page 5: Large Mesh Simplification using Processing Sequences

Large Meshes

3D scans isosurfaces

Page 6: Large Mesh Simplification using Processing Sequences

PPM isosurface

• 235 million vertices

• 469 million triangles

• 235 million rtices

• million trianglesover

8 Gigabyte !

hampers:• distributing / loading• rendering• processing

Page 7: Large Mesh Simplification using Processing Sequences

• in-core algorithms of choice:– Qslim

– Rsimp

Mesh Simplification

• alternative: processing sequence

[Garland & Heckbert ’97]

[Brodsky & Watson ’00]

require~ 200 bytesper vertex

• current out-of-core approaches:1. piece by piece

2. external memory

3. polygon soup [Lindstrom ’00]

[Hoppe ’98]

[Cignoni et al. ’03]

Page 8: Large Mesh Simplification using Processing Sequences

Background

Page 9: Large Mesh Simplification using Processing Sequences

Related Work

• Large Mesh Processing– Simplification

– Compression

– Visualization Systems

• Main Techniques 1. Mesh Cutting

2. Online Processing

3. Batch Processing

Page 10: Large Mesh Simplification using Processing Sequences

• cut mesh into small pieces

• process each separately

• special treatment for cuts

• stitch result back together

1. Mesh Cutting

figure courtesy of Hugues Hoppe

Page 11: Large Mesh Simplification using Processing Sequences

2. Online Processing

• external memory datastructures

• “random” mesh access

figure courtesy of Paolo Cignoni

Page 12: Large Mesh Simplification using Processing Sequences

3. Batch Processing (1)

• polygon soup

• single scan over stream ofde-referenced triangles

• no explicit connectivity

[Lindstrom ’00]

Page 13: Large Mesh Simplification using Processing Sequences

3. Batch Processing (2)

• polygon soup

• single scan over stream ofde-referenced triangles

• no explicit connectivity

(coherent)

reconstruct

figure courtesy of Jianhua Wu and Leif Kobbelt

[Wu & Kobbelt ’03]

Page 14: Large Mesh Simplification using Processing Sequences

Sequenced Processing

• coherent triangle orderinginterleaved with vertices

• small footprint streaming

• finalization of vertices

[Isenburg & Gumhold ’03]

Page 15: Large Mesh Simplification using Processing Sequences

Quadric Error Matrices

• accumulate error

• vertex placement

• sum of squareddistances of point to set of planes

• quadric error:

figure courtesy of Michael Garland

[Garland & Heckbert ’97]

Q =q00 q01 q02 q03

q10 q11 q12 q13

q20 q21 q22 q23

q30 q31 q32 q33

vTQv

Page 16: Large Mesh Simplification using Processing Sequences

Processing Sequences

Page 17: Large Mesh Simplification using Processing Sequences

A little history …

• Compressor– region growing

Page 18: Large Mesh Simplification using Processing Sequences

A little history …

• Compressor– region growing

• Out-of-Core Mesh– transparent

– caching clusters

Page 19: Large Mesh Simplification using Processing Sequences

A little history …

• Compressor– region growing

• Out-of-Core Mesh– transparent

– caching clusters

• Compact Format– small footprint

– streaming

Page 20: Large Mesh Simplification using Processing Sequences

A little history …

• Compressor– region growing

• Out-of-Core Mesh– transparent

– caching clusters

• Compact Format– small footprint

– streaming

Page 21: Large Mesh Simplification using Processing Sequences

A little history …

• Compressor– region growing

• Out-of-Core Mesh– transparent

– caching clusters

• Compact Format– small footprint

– streaming

Page 22: Large Mesh Simplification using Processing Sequences

• interleaved ordering of triangles and vertices that “grows regions”

processingboundary

Processing Sequences

border edges

Q7

Q1

Q4

• available information:– first & last use of edges & vertices

– surface border

• maintaindata alongboundary

Page 23: Large Mesh Simplification using Processing Sequences

unprocessed region

Abstractions

• boundary-based– one boundary

– process immediately

processed region

waiting area

processingboundary

Page 24: Large Mesh Simplification using Processing Sequences

processed region

unprocessed region

Abstractions

• boundary-based– one boundary

– process immediately

• buffer-based– two boundaries

– process in buffer

– read to fill

– write to empty

in-corebuffer

output boundary

input boundary

processed region

unprocessed region

processingboundary

waiting area

Page 25: Large Mesh Simplification using Processing Sequences

OOCS

Page 26: Large Mesh Simplification using Processing Sequences

OOCS

• stream in polygon soup– triangle after triangle

• vertex clustering– one quadric per grid cell

• output sensitive– store all quadrics

• no border info – tangential

term added

Page 27: Large Mesh Simplification using Processing Sequences

OOCS

Q

Q

input output

Page 28: Large Mesh Simplification using Processing Sequences

OOCS

Q

Q

Q

Q

input output

Page 29: Large Mesh Simplification using Processing Sequences

OOCS

Q

Q

Q

Q

input output

Page 30: Large Mesh Simplification using Processing Sequences

OOCS

Q

Q

QQ

Q Q

Q

input output

Page 31: Large Mesh Simplification using Processing Sequences

OOCS

QQ

Q Q

QQ

QQ

Q Q Q

Q

QQ

Q

input output

Q

Page 32: Large Mesh Simplification using Processing Sequences

OOCS

QQ

Q Q

QQ

QQ

QQ

QQ Q Q Q

Q Q

Q

Q Q Q

Q

Q

Q

QQ

Q

QQ

Q

Q

input output

Page 33: Large Mesh Simplification using Processing Sequences

OOCS

QQ

Q Q

QQ

Q

Q

Q

QQ

QQ Q Q Q

Q Q

Q

Q

Q Q

Q Q

Q

Q

Q

QQQ

Q Q Q

QQQQ

Q

QQQ

Q Q

Q

input output

Page 34: Large Mesh Simplification using Processing Sequences

OOCS

QQ

Q Q

QQ

Q

Q

Q

QQ

QQ Q Q Q

Q Q

Q

Q

Q Q

Q Q

Q

Q

Q

QQQ

Q Q Q

QQQQ

Q

QQ

QQ

QQQ

Q Q

Q

input output

Page 35: Large Mesh Simplification using Processing Sequences

OOCS

QQ

Q Q

QQ

Q

Q

Q

QQ

QQ Q Q Q

Q Q

Q

Q

Q Q

Q Q

Q

Q

Q

QQQ

Q Q Q

QQQQ

Q

QQ

QQ

QQQ

Q Q

Q

input output

Page 36: Large Mesh Simplification using Processing Sequences

OOCS using PS

Page 37: Large Mesh Simplification using Processing Sequences

• fewer artifacts– do not collapse multiple

layers into single vertex

– improved surface boundaries

• streaming output

OOCS using PS

• memory insensitive– maintain much fewer quadrics

Page 38: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q7

7

Q55

55

OOCS using PS (detail)

Q33

Q4

4

4

Page 39: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q4

Q7

7

4

4

Q3

5

3

OOCS using PS (detail)

Page 40: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q4

Q7

7

4

4

5

Q3

turns into vertex quadric

OOCS using PS (detail)

Page 41: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q4

Q7

7

4

4

5

Q8

8

OOCS using PS (detail)

Page 42: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q4

Q7

7

4

5

Q8

8

OOCS using PS (detail)

Page 43: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q4

Q7

7

5

Q8

8

quadric turns into vertex

8

OOCS using PS (detail)

Page 44: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q7

7

5

Q8

88

Q9

9

OOCS using PS (detail)

Page 45: Large Mesh Simplification using Processing Sequences

processedregion

unprocessedregion

Q55

Q7

7

Q8

88

Q9

9quadricmerge

OOCS using PS (detail)

Page 46: Large Mesh Simplification using Processing Sequences

OOCS using PSinput output

QQ

Page 47: Large Mesh Simplification using Processing Sequences

OOCS using PS

Q

Q

Q

Q

outputinput

Page 48: Large Mesh Simplification using Processing Sequences

OOCS using PS

Q

Q Q

Q Q

Q

outputinput

Q Q

Page 49: Large Mesh Simplification using Processing Sequences

OOCS using PS

Q

Q

Q

Q

QQ

QQ

Q Q

Q

Q

Q

outputinput

QQ

Q Q

Page 50: Large Mesh Simplification using Processing Sequences

OOCS using PS

QQ

Q

QQ

Q

QQ

Q

Q

Q

outputinput

QQ

Q

QQ

Q Q

Q Q

Q

QQ Q

Q

Page 51: Large Mesh Simplification using Processing Sequences

OOCS using PS

QQ

Q

Q

Q

Q

outputinput

QQ

Q

Q

Q

QQ

Q

Q

QQ

Q

QQ

Q Q

Q Q

Q

Q Q

Q

Q

Q

Q

Page 52: Large Mesh Simplification using Processing Sequences

OOCS using PS

Q

QQ

Q

Q

outputinput

QQ

Q

Q

Q

Q

QQ

Q

Q

Q

QQ

Q

Q

QQ

Q

QQ

Q Q

Q Q

Q

Q Q

Q

Q

Q

QQ

Page 53: Large Mesh Simplification using Processing Sequences

OOCS using PS

QQQ

Q

Q

Q

outputinput

Q

Q

Q

QQ

Q

Q

Q

Q

QQ

Q

Q

Q

QQ

Q

Q

QQ

Q

QQ

Q Q

Q Q

Q

Q Q

Q

Q

Q

QQ

Q

Page 54: Large Mesh Simplification using Processing Sequences

OOCS using PS

Q

QQ

Q

Q

outputinput

QQQ

Q

Q

Q

Q

Q

Q

QQ

Q

Q

Q

Q

QQ

Q

Q

Q

QQ

Q

Q

QQ

Q

QQ

Q Q

Q Q

Q

Q Q

Q

Q

Q

QQ

Q

Q

Page 55: Large Mesh Simplification using Processing Sequences

OOCS using PSoutputinput

QQQ

Q

Q

Q

Q

Q

Q

QQ

Q

Q

Q

Q

QQ

Q

Q

Q

QQ

Q

Q

QQ

Q

QQ

Q Q

Q Q

Q

Q Q

Q

Q

Q

QQ

Q

Q

QQ

Q

Q

Q

Page 56: Large Mesh Simplification using Processing Sequences

Improved Mesh QualityOOCS-PS

OOCS

vertices: 33,053

non-manifoldvertices: 3,366

vertices: 35,134

non-manifoldvertices: 897

Page 57: Large Mesh Simplification using Processing Sequences

Lower Memory Requirements

373 million vertices

OOCSmemory:

3,282 MBtime:

67 minOOCS-PSmemory:

121 MBtime:

83 min23 million vertices

Page 58: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

Page 59: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

• stream coherent soup into buffer• reconstruct connectivity

– hash on vertex data– finalize complete stars

inputboundary

a aa a

a

aaa

a

accumulating

c c

collapsible

• randomized edge collapse – one quadric per vertex– accumulating collapsible

• randomized streaming output

Page 60: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

ca

a

a

a

a

a

a

input output

Page 61: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

cc

c

c

c

cc

c

a

a

a

aa

aa

a

a

a

a

a

aa

a

a aa

aa

a

a

a

a

a

a

a

input output

Page 62: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

cc

cc

aa

a a

c

a

a

a

aa

a

c

c

c

a

a

a

aa

a

a

aa

a

a

a

c

c

ca

a

a

a

a

a

aa

a

aa

a

a

a

a

a

a

c

c

c

outputinput

Page 63: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

c

c

c

c

aaaa

a

a

a

aa

a c

c

c

a

a

a

aa

a a

aa

a

a

a

cc

ca

a

a

a

a

a

a

a

a

a a

a

a

a

a

a

a

c

ca

aa

a

a

c

c

c

c

cc

cc

c

aa

a

a

c

cc

c

a

a

outputinput

Page 64: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

c

c

c

c

aaaa

a

a

a

a

a

a

c

c

a

a

a

a a

a a

aa

a

aa

c

ca

a

a

aa

a

a

a a

a

a

a

a

a

c

c

aa

a

a

a

c

c

c

cc

aa

a

a

c

c

c

c

a

a

aa

aa

aa

c

c

c

c

c c

c

c

c

c

c

c

cc

c

c

c

c c

outputinput

Page 65: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

aaaa

a

aa

a

a

a

a

aa

a

a

a

a

a

a

a

aa

a

a

a a

a

a

a

a

a

c

aa a

a

a

c

aa

a

a

aa

a

a

a

a

c

c

c c

c

c

c

caa

a

a

aa

a a

a

aa

a

a a a a

a

a

a

a

a

ac

c

c

c

c c

c

c

c

c

c

c c

outputinput

Page 66: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

aaaa

a

aa

a

a

a

a

aa

a

a

a

a

a

a

a

aa

a

aa a

a

a

a

a

a

aa a

a

a aa

a

a

a

a

a

a

a

a

c

c

a

a

a

a

aa

a

a

a

a

a

a

a a a a

a

a a

a

a

ac

c

c

aaa

aa

a

aa

aa

aa

aa

a

c

c

c c

cc

c

c

c

cc

outputinput

Page 67: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

aaaa

a

aa

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

aa a

a

a

a

a

a

a a

a

a aa

a

a

a

a

a

a

a

c

a aa

a

a

a

a

a

a

a

a

a

a a a a

a

a

a

aa

aa

a

aa a

a

a

aaa

a

a

a

a

c

c

a

a

a

a

cc c

ccc

cc

c

ac

a

outputinput

Page 68: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

aaaa

a

aa

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

aa a

a

a

a

a

a

a a

a

a aa

a

a

aa

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a

a a a a

a

a

a

aa

a

a

a

a a a

a

a

a

a

aa

a

a

a

a

aaa

a

c

cc

cc

a aa

a

c

outputinput

Page 69: Large Mesh Simplification using Processing Sequences

border

Wu & Kobbelt

aaaa

a

aa

a

a

a

a

a

a

a

a

a

a

a

a

a

a

aa a

a

a

a

a

a

a a

a

a aa

a

a

a

a

a

a

aa

a

a

a

a

a

a

a

a

a a a a

a

a

a

aa

a

aa a a

a

a

aa

a

a

a

aaa

a

aa

a

aa

a

a

aa

a

c

c

c

cc

outputinput

Page 70: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

c

c

c

c

c

c

c

c

c

c

c

cc c

c

c

c

c

c

c

c cc

c

c

c

c

cc

c

c

c

c

c

c

c

c c c c

c

c

c

c

c

ccc

cccc

cc

c

c

c

c c c

c

c

c

c

c

c

cc c

c

c

cc

c

c

cc

c

cc

c

c

cc

c

c

c

c

cc

outputinput

Page 71: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c c

cc

c

cc

c

c

c

c

c c

c

c

cc

c

c

c

c

cc

c

c

c

c

c

outputinput

Page 72: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

cc

c

c

c

c

c

c

c

outputinput

Page 73: Large Mesh Simplification using Processing Sequences

Wu & Kobbeltoutputinput

Page 74: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

Page 75: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

• less fragmentation of buffer– processing sequence input / output

– more collapsible edges

• immediate boundary simplification– mesh borders known early

– truly “streaming” output

• faster connectivity reconstruction– indexed input / API support

Page 76: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

a

a

a

a

a

a

a

accumulating

c

cc

c

c

c

c

collapsible

Page 77: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

c

cc

c

c

c

c

collapsible

a

a

a

a

a

a

a

accumulating

c

Page 78: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

c

cc

c

c

c

c

collapsible

a

a

a

a

a

a

a

a

accumulating

c

c

Page 79: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

cc

c

c

c

collapsible

a

a

a

a

a

a

a

a

accumulating

c

c

c

Page 80: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

cc

c

c

c

collapsible

a

a

a

a

a

a

a

a

accumulating

c

c

c

Page 81: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS (detail)

unprocessedregion

processedregion

inputboundary

outputboundary

in-coretrianglebuffer

cc

c

c

c

collapsible

a

a

a

a

a

a

a

a

accumulating

c

c

Page 82: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PSinput output

Page 83: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

a

c

aaa

a

aaaa

a

a

c

cc

outputinput

Page 84: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

a

a a aaaa

a

a

aaaaaa

a

a

a

c c

cc

c

cc

c

c

c c c

c

outputinput

Page 85: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

aa a

a a

a

aa

a

a

a

aa

aa

aaa

a

aaa

a

a

a

aa

c

cc

c

c

c

cc

c

c

c

cc

cc

c

c

cc

ccc

c

c

cc

outputinput

Page 86: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

aa

a

aaa

a a

aa

a a

aa

a

a

a

a

a

aa aa

a

c

c

c

c c

c

c

c

c

c

c

ccc

ccc

c

c

c

c

c

c

c

c

c

c

c

c

cc

cc

c

c

cc

outputinput

Page 87: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

a a

a

a

a

aa

a

aa

a

a

a

a

c

c cc

ccc

c

c

c

c

cc

c

c

c

c

cc

cc

c c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

input output

Page 88: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

aa

a

aa

a

a

a

a

a

aa

c

c

c

c

c

c

c

c

c

c

c

c

c

c

c

cc

c

c

c

c

c

c

c

c

c

c

c

c

input output

Page 89: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

a

a

aa a

a

a a

a

a

aa

c

c

c

c

c

c

c

c

c

c

c

ac

c

c

c

c

c

c

c

c c

c

c

c

c

c

c

input output

Page 90: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

a

a

a

a

a

a

a

a

ac

a

c

c

c

c

c

c

c

c c

c

c

c

c

a

c

c

c

c

cc

c

cc

cc

c

c

c

c

c

c

input output

Page 91: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PS

c c

cc

c

cc

cc

c

cc

cc

c

c

c

input output

Page 92: Large Mesh Simplification using Processing Sequences

Wu & Kobbelt using PSinput output

Page 93: Large Mesh Simplification using Processing Sequences

Conclusion&

Current Work

Page 94: Large Mesh Simplification using Processing Sequences

Summary

• processing sequences– efficient large mesh access

– streaming input and output

– abstractions: • boundary-based• buffer-based

• adapted simplification algorithms:– OOCS

– Wu & Kobbelt

Page 95: Large Mesh Simplification using Processing Sequences

• length of processing boundary– possible

– traversal is optimized for lowest bit-rate change heuristic

Issues

O( n ) [Bar-Yehuda & Gotsman ‘96]

• external memory mesh to createprocessing sequences …?– expensive to build & use

– defeats purpose …

Page 96: Large Mesh Simplification using Processing Sequences

Generating PS

• on-the-fly

• input: “streaming mesh”

v 1.32 0.12 0.23v 1.43 0.23 0.92v 0.91 0.15 0.62f 1 2 3done 2 v 0.72 0.34 0.35f 4 1 3done 1 ⋮ ⋮ ⋮ ⋮

verticesfinalized

(not used bysubsequenttriangles)

Page 97: Large Mesh Simplification using Processing Sequences

• extend to volume meshes

• promote– provide API

• create / improve– lower processing boundary length

Current Work

• compress– encode on-the-fly

Page 98: Large Mesh Simplification using Processing Sequences

Thank You.

Page 99: Large Mesh Simplification using Processing Sequences
Page 100: Large Mesh Simplification using Processing Sequences
Page 101: Large Mesh Simplification using Processing Sequences

v0

v1

v2

fill

Growing Operations

v0 v1

v2

end

v0 v1

v2

start

v0v1

v2

join

add

v0 v1

v2

processingboundary

Page 102: Large Mesh Simplification using Processing Sequences

read nexttriangle

info aboutcurrenttriangle

optionalmaintainingof user data

Prototype of PS API int open(const char* file_name);int read_triangle();void close();

int t_idx[3];float* t_pos_f[3];int t_vflag[3];int t_eflag[3];

void set_edata( void* data, int i );void set_vdata( void* data, int i );void* get_edata( int i );void* get_vdata( int i );

Page 103: Large Mesh Simplification using Processing Sequences

Example (1)

v0 v1

v2

eflag[0] = PS_FIRST eflag[1] = PS_FIRST eflag[2] = PS_FIRST

vflag[0] = PS_FIRSTvflag[1] = PS_FIRSTvflag[2] = PS_FIRST

v0 v1

v2

eflag[0] = PS_FIRST eflag[1] = PS_FIRST | PS_LAST eflag[2] = PS_FIRST | PS_LAST

vflag[0] = PS_FIRSTvflag[1] = PS_FIRST | PS_LASTvflag[2] = PS_FIRST

borderedge

enteringedge

borderedge

e0

e1

e2

start

start

Page 104: Large Mesh Simplification using Processing Sequences

enteringedge

leavingedges

borderedge

enteringedge

leaving edge

v0 v1

v2

add

Example (2)

eflag[0] = PS_LASTeflag[1] = PS_FIRST | PS_LASTeflag[2] = PS_FIRST

vflag[0] = 0vflag[1] = 0vflag[2] = PS_FIRST

eflag[0] = PS_LAST eflag[1] = PS_FIRSTeflag[2] = PS_LAST

vflag[0] = PS_LASTvflag[1] = 0vflag[2] = 0

fill

v0

v1

v2

Page 105: Large Mesh Simplification using Processing Sequences

Example (3)

eflag[0] = PS_LASTeflag[1] = PS_LASTeflag[2] = PS_LAST

vflag[0] = PS_LASTvflag[1] = PS_LASTvflag[2] = PS_LAST

eflag[0] = PS_LAST eflag[1] = PS_LAST eflag[2] = PS_LAST

vflag[0] = PS_LASTvflag[1] = 0vflag[2] = PS_LAST

leaving

edges

v0 v1

v2

v0 v1

v2

end

end

Page 106: Large Mesh Simplification using Processing Sequences

Computing Smooth Normalsps.open ( “bunny.sma” );while ( ps.read_triangle() ) tmp = compute ( ps.t_pos[0], ps.t_pos[1], ps.t_pos[2] ); for ( i = 0; i < 3; i++ ) if ( ps.vflag[i] & PS_FIRST ) n = new Normal (); ps.set_vdata ( n, i ); else n = ps.get_vdata ( i ); add ( n, tmp ); if ( ps.vflag[i] & PS_LAST ) normalize ( n ); do something delete n;

ps.close ();


Top Related