Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland...

63
University of British Columbia University of British Columbia CPSC 414 Computer Graphics CPSC 414 Computer Graphics © Tamara Munzner 1 Texturing, Clipping Week 9, Mon 27 Oct 2003

Transcript of Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland...

Page 1: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

University of British ColumbiaUniversity of British Columbia

CPSC 414 Computer GraphicsCPSC 414 Computer Graphics

© Tamara Munzner 1

Texturing, ClippingWeek 9, Mon 27 Oct 2003

Page 2: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 2

Reading• Chapter 7.1-7.10: texturing• Chapter 8.3-8.7: clipping

• bump mapping extra readinghttp://www.cs.wpi.edu/~matt/courses/cs563/talks/bump/bumpmap.html

Page 3: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 3

Texture Mapping• texture map is an image, two-dimensional array of

color values (texels)• texels are specified by texture’s (u,v) space• at each screen pixel, texel can be used to

substitute a polygon’s surface property (color)• we must map (u,v) space to polygon’s (s, t) space

U

V

S

T

Page 4: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 4

Example Texture Map

glVertex3d (s, s, s)glTexCoord2d(1,1);

glVertex3d (-s, -s, -s)glTexCoord2d(1,1);

Page 5: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 5

Texture Coordinate Transforms

glVertex3d (s, s, s)glTexCoord2d(5, 5);

glVertex3d (s, s, s)glTexCoord2d(1, 1);

Page 6: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 6

Texture Mapping

(s(s00,t,t00))

(s(s11,t,t11))

(s(s22,t,t22))

Page 7: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 7

Texture Mapping and Filtering• ideal algorithm:– given texture map as regular grid of texels,

reconstruct continuous texture function using low pass filtering

– map this continuous texture onto 3D surface– project surface onto image plane using model/view

and perspective transformation– low-pass filter resulting continuous function

according to desired image resolution (avoidaliasing)

– sample filtered continuous image at pixel positions

Page 8: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 8

Texture Mapping and Filtering• in practice: 2 cases

TexelTexel

PixelPixel

texturetexture minificationminification

averagingaveraging

texturetexture magnificationmagnification

interpolationinterpolation

Page 9: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 9

Texture Magnification• synopsis– texture appears magnified on screen– only need to low-pass filter in texture space

• that already removes frequencies higher than the Nyquist limit for the final image resolution

– what filter to use?• nearest neighbor: just choose color of closest texel

for every pixel– worst of all possible choices!

• linear interpolation: interpolate from the closest samples (2 in 1D texture, 4 for 2D, 8 for 3D)

Page 10: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 10

Texture Minification• synopsis– texture appears reduced in size on screen– only need to low-pass filter in image space

• will also remove all the high frequencies in texture space

– same filter as magnification case?• problem: a lot of texels could fall within the support of

the low-pass filter for a single image– e.g. when an object is very far away so that it maps to a

single pixel in the final image– too expensive: have to evaluate filter function at an

unbounded number of places and average results!

Page 11: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 11

Texture Minification Filters• solution: precomputation– MIP-Mapping (Multum In Parvo)

• “many things in a small place”• store not one texture image, but whole pyramid• resolution from level to level varies by factor of two

(original resolution … 1x1)• every level is correctly filtered for its resolution

Page 12: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 12

Environment Mapping• used to model a object that reflects surrounding

textures to the eye– polished sphere reflects walls and ceiling textures– cyborg in Terminator 2 reflects flaming destruction

• texture is distorted fish-eye view of environment• spherical texture mapping creates texture

coordinates that correctly index into this texture map

Page 13: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 13

Sphere Mapping

Page 14: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 14

Blinn/Newell Latitude Mapping

Page 15: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 15

Cube Mapping

Page 16: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 16

Cube Mapping – Greene ‘86

A

BC

E

F

D

Page 17: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 17

Cube Mapping – Greene ‘86

• direction of reflection vector r selects the face of the cube to be indexed– co-ordinate with largest magnitude

• e.g., the vector (-0.2, 0.5, -0.84) selects the –Z face!

– remaining two coordinates (normalized by the 3rd

coordinate) selects the pixel from the face.• e.g., (-0.2, 0.5) gets mapped to (0.38, 0.80).

• difficulty in interpolating across faces!• OpenGL support GL_CUBE_MAP

Page 18: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 18

Bump Mapping• image encodes normal change

– see book, extra reading for full derivation

Page 19: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 19

Embossing• at transitions

– rotate point’s surface normal by � or - �

Page 20: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 20

Displacement Mapping• bump mapped normals are

inconsistent with actual geometry.– problems: shadows,

silhouettes

• displacement mapping actually affects the surface geometry

Page 21: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 21

Next Topic: Clipping• we’ve been assuming that all primitives (lines,

triangles, polygons) lie entirely within the viewport– in general, this assumption will not hold:

Page 22: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 22

Clipping• analytically calculating the portions of

primitives within the viewport

Page 23: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 23

Why Clip?• bad idea to rasterize outside of

framebuffer bounds • also, don’t waste time scan converting

pixels outside window– could be billions of pixels for very close

objects!

Page 24: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 24

Line Clipping• 2D– determine portion of line inside an axis-aligned

rectangle (screen or window)

• 3D– determine portion of line inside axis-ligned

parallelpiped (viewing frustum in NDC)– simple extension to the 2D algorithms

Page 25: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 25

Clipping• naïve approach to clipping lines:

for each line segment

for each edge of viewportfind intersection point

pick “nearest” point

if anything is left, draw it

• what do we mean by “nearest”?• how can we optimize this?

A

B

CD

Page 26: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 26

Trivial Accepts • big optimization: trivial accept/rejects• Q: how can we quickly determine whether a line

segment is entirely inside the viewport?

• A: test both endpoints.

Page 27: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 27

Trivial Rejects• Q: how can we know a line is outside

viewport?• A: if both endpoints on wrong side of same

edge, can trivially reject line

Page 28: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 28

Clipping Lines To Viewport• combining trivial accepts/rejects

– trivially accept lines with both endpoints inside all edges of the viewport

– trivially reject lines with both endpoints outside the same edge of the viewport

– otherwise, reduce to trivial cases by splitting into two segments

Page 29: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 29

Cohen-Sutherland Line Clipping• outcodes– 4 flags encoding position of a point relative to top,

bottom, left, and right boundary

• OC(p1)=0010• OC(p2)=0000• OC(p3)=1001

x=x=xxminmin x=x=xxmaxmax

y=y=yyminmin

y=y=yymaxmax

00000000

10101010 10001000 10011001

00100010 00010001

01100110 01000100 01010101

p1p1

p2p2

p3p3

Page 30: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 30

Cohen-Sutherland Line Clipping• assign outcode to each vertex of line to test– line segment: (p1,p2)

• trivial cases– OC(p1)== 0 && OC(p2)==0

• both points inside window, thus line segment completely visible (trivial accept)

– (OC(p1) & OC(p2))!= 0• there is (at least) one boundary for which both points are

outside (same flag set in both outcodes)• thus line segment completely outside window (trivial

reject)

Page 31: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 31

Cohen-Sutherland Line Clipping

• if line cannot be trivially accepted or rejected, subdivide so that one or both segments can be discarded

• pick an edge that the line crosses (how?)• intersect line with edge (how?)• discard portion on wrong side of edge and assign

outcode to new vertex• apply trivial accept/reject tests; repeat if necessary

Page 32: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 32

Cohen-Sutherland Line Clipping• if line cannot be trivially accepted or rejected,

subdivide so that one or both segments can be discarded

• pick an edge that the line crosses– check against edges in same order each time

• for example: top, bottom, right, left

A

B

D EC

Page 33: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 33

Cohen-Sutherland Line Clipping• intersect line with edge (how?)

A

B

D EC

Page 34: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 34

• discard portion on wrong side of edge and assign outcode to new vertex

• apply trivial accept/reject tests and repeat if necessary

Cohen-Sutherland Line Clipping

A

B

DC

Page 35: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 35

Viewport Intersection Code

– (x1, y1), (x2, y2) intersect with vertical edge at xright

• yintersect = y1 + m(xright – x1), m=(y2-y1)/(x2-x1)

– (x1, y1), (x2, y2) intersect with horizontal edge at ybottom

• xintersect = x1 + (ybottom – y1)/m, m=(y2-y1)/(x2-x1)

Page 36: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 36

Cohen-Sutherland Review

– use opcodes to quickly eliminate/include lines• best algorithm when trivial accepts/rejects are

common

– must compute viewport clipping of remaining lines• non-trivial clipping cost• redundant clipping of some lines

• more efficient algorithms exist

Page 37: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 37

Line Clipping in 3D• approach:– clip against parallelpiped in NDC

• after perspective transform

– means that the clipping volume always the same• xmin=ymin= -1, xmax=ymax= 1 in OpenGL

– boundary lines become boundary planes• but outcodes still work the same way• additional front and back clipping plane

zmin = -1, zmax = 1 in OpenGL

Page 38: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 38

Polygon Clipping• objective– 2D: clip polygon against rectangular window

• or general convex polygons• extensions for non-convex or general polygons

– 3D: clip polygon against parallelpiped

Page 39: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 39

Polygon Clipping• not just clipping all boundary lines– may have to introduce new line segments

Page 40: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 40

• what happens to a triangle during clipping?• possible outcomes:

triangle � triangle

Why Is Clipping Hard?

triangle � quad triangle � 5-gon

• how many sides can a clipped triangle have?

Page 41: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 41

How Many Sides?• seven…

Page 42: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 42

• a really tough case:

Why Is Clipping Hard?

Page 43: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 43

• a really tough case:

Why Is Clipping Hard?

concave polygon � multiple polygons

Page 44: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 44

Polygon Clipping• classes of polygons– triangles– convex– concave– holes and self-intersection

Page 45: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 45

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 46: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 46

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 47: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 47

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 48: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 48

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 49: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 49

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 50: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 50

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 51: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 51

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 52: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 52

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 53: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 53

Sutherland-Hodgeman Clipping• basic idea:

– consider each edge of the viewport individually– clip the polygon against the edge equation– after doing all edges, the polygon is fully clipped

Page 54: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 54

Sutherland-Hodgeman Algorithm

• input/output for algorithm:– input: list of polygon vertices in order – output: list of clipped poygon vertices

consisting of old vertices (maybe) and new vertices (maybe)

• note: this is exactly what we expect from the clipping operation against each edge

Page 55: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 55

Sutherland-Hodgeman Clipping• Sutherland-Hodgman basic routine:

– go around polygon one vertex at a time– current vertex has position p– previous vertex had position s, and it has

been added to the output if appropriate

Page 56: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 56

Polygon Clipping• clipping against one edge:clipPolygonToEdge( p[n], edge ) {

for( i= 0 ; i< n ; i++ ) {if( p[i] inside edge ) {

if( p[i-1] inside edge ) // p[-1]= p[n-1]output p[i];

else {p= intersect( p[i-1], p[i], edge );output p, p[i];

}} else…

Page 57: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 57

Polygon Clipping• clipping against one edge (cont)– p[i] inside: 2 cases

outsideoutsideinsideinside insideinside outsideoutside

p[i]p[i]

p[ip[i--1]1]

Output: Output: p[i]p[i]

p[i]p[i]

p[ip[i--1]1]pp

Output: Output: p,p, p[i]p[i]

Page 58: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 58

Polygon Clipping• clipping against one edge (cont)

…else { // p[i] is outside edge

if( p[i-1] inside edge ) {p= intersect(p[i-1], p[I], edge );output p;

}

} // end of algorithm

Page 59: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 59

Polygon Clipping• clipping against one edge (cont)– p[i] outside: 2 cases

p[i]p[i]

p[ip[i--1]1]

Output: Output: pp

p[i]p[i]

p[ip[i--1]1]

pp

Output:nothingOutput:nothing

outsideoutsideinsideinside insideinside outsideoutside

Page 60: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 60

Polygon Clipping• example

insideinside outsideoutside

p0p0

p1p1

p2p2

p3p3 p4p4

p5p5p7p7 p6p6

Page 61: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 61

Polygon Clipping• Sutherland/Hodgeman Algorithm– inside/outside tests: outcodes– intersection of line segment with edge: window-

edge coordinates– similar to Cohen/Sutherland algorithm for line

clipping

Page 62: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 62

Sutherland/Hodgeman Discussion• clipping against individual edges independent– great for hardware (pipelining)– all vertices required in memory at the same time

• not so good, but unavoidable• another reason for using triangles only in hardware

rendering

Page 63: Texturing, Clippingtmm/courses/cpsc414-03-fall/Vsep2003/slides/week9.mon.slides.pdfCohen-Sutherland Review – use opcodes to quickly eliminate/include lines • best algorithm when

Week 9, Mon 27 Oct 03 © Tamara Munzner 63

Sutherland/Hodgeman Discussion• for rendering pipeline:– re-triangulate resulting polygon

(can be done for every individual clipping edge)