University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2005 Tamara Munzner Prog 2, Kangaroo Hall of Fame, Midterm Review, (Interpolation if time) Week 6, Wed Feb 9 http://www.ugrad.cs.ubc.ca/~cs314/Vjan2005
Program 2 Corrections/Clarifications handin 314 proj2 (not 414) ‘f’ not ‘s’ to toggle flat/smooth shading ‘s’ already in use for camera add: ‘t’ to toggle between randomly colored and grey terrain makes it easier to check if lighting correct add: ‘u’ to replace terrain with new randomly generated geometry consider adding for a bit of extra credit: ‘+/-’ toggle to increment/decrement abs cam speed 2
Program 2 Corrections/Clarifications roll/yaw confusion first para. correct, second para. wrong left horiz drag = yaw, right horiz drag = roll image + flying expertise courtesy of Matt Baumann 3
Program 2 Quick Demo 4
Review: Midpoint Algorithm moving incrementally along x direction draw at current y value, or move up to y+1? check if midpoint between two possible pixel centers above or below line candidates top pixel: (x+1,y+1), bottom pixel: (x+1, y) midpoint: (x+1, y+.5) check if midpoint above or below line below: top pixel above: bottom pixel 0 < dy assume , slope x < x dx < 1 1 2 5
Review: Bresenham Algorithm y=y0; e=0; for (x=x0; x <= x1; x++) { draw(x,y); all integer arithmetic if (2(e+dy) < dx) { cumulative error function e = e+dy; } else { y=y+1; e=e+dy-dx; y=y0; eps=0 }} for ( int x = x0; x <= x1; x++ ){ draw(x,y); eps += dy; if ( (eps << 1) >= dx ){ y++; eps -= dx; } } 6
Review: Flood Fill draw polygon edges, seed point, recursively set all neighbors until boundary is hit to fill interior drawbacks: visit pixels up to 4x, per-pixel memory storage needed P 7
Review: Scanline Algorithms set pixels inside polygon boundary along horizontal lines one pixel apart use bounding box to speed up 3 1 5=0 2 P 4
Review: Edge Walking basic idea: draw edges vertically interpolate colors down edges fill in horizontal spans for each scanline at each scanline, interpolate edge colors across span 9
Review: General Polygon Rasterization idea: use a parity test for each scanline edgeCnt = 0; for each pixel on scanline (l to r) if (oldpixel->newpixel crosses edge) edgeCnt ++; // draw the pixel if edgeCnt odd if (edgeCnt % 2) setPixel(pixel); 10
Hall of Fame 11
But Wait, There’s More! nice comment :) “this project is fun, only one of the very few that I actually enjoyed. Too bad there's only one CG course in UBC =( two fourth year CG courses await you! 424 Geometric Modelling 426 Animation 12
Midterm Review 13
Midterm Exam Friday Feb 11 10am-10:50am you may use one handwritten 8.5”x11” sheet one side of page no other notes, no books nonprogrammable calculators OK arrive on time! sit every other seat, ID out in front of you coats and bags in front of room 14
What’s Covered transformations viewing and projections coordinate systems of rendering pipeline lighting and shading not scan conversion 15
Reading FCS book, Red book see web page for details you can be tested on material in book but not covered in lecture you can be tested on material covered in lecture but not covered in book 16
Old Exams Posted see course web page 17
The Rendering Pipeline pros and cons of pipeline approach Model/View Model/View Perspective Geometry Model/View Perspective Geometry Perspective Geometry Lighting Lighting Clipping Clipping Lighting Clipping Transform. Transform. Transform. Database Database Transform. Transform. Transform. Database Frame- Frame- Frame- Scan Scan Depth Scan Depth Depth Texturing Texturing Texturing Blending Blending Blending buffer buffer Conversion buffer Conversion Conversion Test Test Test 18
Transformations translate(a,b,c) translate(a,b,c) scale(a,b,c) scale(a,b,c) x ' 1 a x x ' a x y ' 1 b y y ' b y = = z ' c z z ' 1 c z 1 1 1 1 1 1 Rotate ( x , ) Rotate ( z , ) Rotate ( y , ) θ θ θ cos sin x ' 1 x cos sin θ − θ θ θ sin cos y ' cos sin y 1 θ − θ θ θ = z ' sin cos z 1 sin cos θ θ − θ θ 1 1 1 1 1 19
Homogeneous Coordinates x w x w ⋅ ⋅ y w y w w ⋅ w ⋅ w w x x w= 1 1 w= y y 1 1 y y x x 20
Composing Transformations Ta Tb = Tb Ta, but Ra Rb Rb != != Rb Rb Ra and Ta Ra and Ta Rb Rb != != Rb Rb Ta Ta Ta Tb = Tb Ta, but Ra 21
Composing Transformations example: rotation around arbitrary center 22
Composing Transformations example: rotation around arbitrary center step 1: translate coordinate system to rotation center 23
Composing Transformations example: rotation around arbitrary center step 2: perform rotation 24
Composing Transformations example: rotation around arbitrary center step 3: back to original coordinate system 25
Composing Transformations rotation about a fixed point p’ = TRT -1 p rotation around an arbitrary axis OpenGL: considering frame vs. object D p’ = DCBAp C frame B A draw p object 26
Transformation Hierarchies hierarchies don’t fall apart when changed transforms apply to graph nodes beneath 27
Matrix Stacks push and pop matrix stack avoid computing inverses or incremental xforms avoid numerical error T 2 (x) T 2 (x) T 1 (x) T 1 (x) T 3 (x) T 3 (x) World coordinates World coordinates 28
Matrix Stacks D = C scale(2,2,2) trans(1,0,0) D = C scale(2,2,2) trans(1,0,0) glPushMatrix() () glPushMatrix glPopMatrix() () glPopMatrix C D C D DrawSquare() () DrawSquare C C C C C glPushMatrix() () C C glPushMatrix C glScale3f(2,2,2) glScale3f(2,2,2) B B B B B B B B glTranslate3f(1,0,0) glTranslate3f(1,0,0) A A A A A A A A DrawSquare() () DrawSquare glPopMatrix() () glPopMatrix 29
Transformation Hierarchies example glTranslate3f(x,y,0); glTranslate3f(x,y,0); glRotatef( ,0,0,1); ( ,0,0,1); glRotatef θ 1 DrawBody(); (); DrawBody glPushMatrix(); (); glPushMatrix θ glTranslate3f(0,7,0); glTranslate3f(0,7,0); 2 DrawHead(); (); θ DrawHead 4 glPopMatrix(); (); glPopMatrix glPushMatrix(); (); glPushMatrix glTranslate(2.5,5.5,0); (2.5,5.5,0); glTranslate θ θ glRotatef( ,0,0,1); ( ,0,0,1); glRotatef θ θ 3 5 2 1 DrawUArm(); (); DrawUArm glTranslate(0,-3.5,0); (0,-3.5,0); glTranslate y y glRotatef( ,0,0,1); ( ,0,0,1); glRotatef θ 3 DrawLArm(); (); DrawLArm x x glPopMatrix(); (); glPopMatrix ... (draw other arm) ... (draw other arm) 30
Display Lists reuse block of OpenGL code more efficient than immediate mode code reuse, driver optimization good for static objects redrawn often can’t change contents not just for multiple instances interactive graphics: objects redrawn every frame nest when possible for efficiency 31
Double Buffering two buffers, front and back while front is on display, draw into back when drawing finished, swap the two avoid flicker 32
Projective Rendering Pipeline glVertex3f(x,y,z) glVertex3f(x,y,z) viewing/ object world camera alter w alter w WCS VCS WCS VCS OCS OCS glFrustum(...) (...) glFrustum projection projection modeling modeling viewing viewing transformation transformation transformation transformation transformation transformation clipping glTranslatef(x,y,z) (x,y,z) gluLookAt(...) (...) glTranslatef gluLookAt / w / w CCS CCS glRotatef( (th th,x,y,z) ,x,y,z) glRotatef perspective perspective .... .... normalized division division OCS - object coordinate system device glutInitWindowSize(w,h) (w,h) glutInitWindowSize WCS - world coordinate system glViewport(x,y,a,b) (x,y,a,b) glViewport NDCS NDCS viewport viewport VCS - viewing coordinate system transformation transformation CCS - clipping coordinate system device DCS DCS NDCS - normalized device coordinate system 33 DCS - device coordinate system
Projection theoretical pinhole camera eye eye point point image image plane plane – image inverted, more convenient equivalent eye eye point point image image plane plane 34
Recommend
More recommend