texturing, clippingtmm/courses/cpsc414-03-fall/vsep2003/slides/week9.mon.slides.pdfcohen-sutherland...
TRANSCRIPT
![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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/1.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/2.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/3.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/4.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/5.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/6.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/7.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/8.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/9.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/10.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/11.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/12.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/13.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/14.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/15.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/16.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/17.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/18.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/19.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/20.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/21.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/22.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/23.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/24.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/25.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/26.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/27.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/28.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/29.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/30.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/31.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/32.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/33.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/34.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/35.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/36.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/37.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/38.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/39.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/40.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/41.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/42.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/43.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/44.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/45.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/46.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/47.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/48.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/49.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/50.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/51.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/52.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/53.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/54.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/55.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/56.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/57.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/58.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/59.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/60.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/61.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/62.jpg)
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](https://reader030.vdocuments.us/reader030/viewer/2022040307/5ecd1949be20f52d853385ed/html5/thumbnails/63.jpg)
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)