Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL Geometric Transformations. glMatrixMode(GL_MODELVIEW);

Similar presentations


Presentation on theme: "OpenGL Geometric Transformations. glMatrixMode(GL_MODELVIEW);"— Presentation transcript:

1 OpenGL Geometric Transformations

2 glMatrixMode(GL_MODELVIEW);

3 OpenGL Geometric Transformations Basic Transpormation: –glLoadIdentity(); –glTranslatef(tx, ty, tz); –glRotatef(theta, vx, vy, vz); angle-axis (vx, vy, vz) is automatically normalized –glScalef(sx, sy, sz); –glLoadMatrixf(Glfloat elems[16]); Multiplication –glMultMatrixf(Glfloat elems[16]); –The current matrix is postmultiplied by the matrix –Column major

4 OpenGL Geometric Transformations Getting the current matrix value: –glGetFloatv (GL_MODELVIEW_MATRIX, GLfloat elems[16]); Column major 04812 15913 261014 371115 GLfloat mat [16]; glGetFloatv (GL_MODELVIEW_MATRIX, mat); GLfloat mat [16]; glGetFloatv (GL_MODELVIEW_MATRIX, mat);

5 OpenGL Geometric Transformations Matrix Direct Manipulation: –glLoadMatrixf(GLfloat elems[16]); Column major –glMultMatrixf(GLfloat elems[16]); The current matrix is postmultiplied by the matrix 04812 15913 261014 371115 glLoadIdentity(); glMultMatrixf (M1); glMultMatrixf (M2); glLoadIdentity(); glMultMatrixf (M1); glMultMatrixf (M2); M = M1∙M2

6 OpenGL GLUT Animation Function GLUT Idle Callback fuction: –Idling: when there is nothing to do. Redraw the scene: glutIdleFunc ( MyIdle ); void MyIdle() { … // things to do … // when Idling } void MyIdle() { … // things to do … // when Idling } glutPostRedisplay ( );

7 Smooth display for animation Double Buffering: Using two buffers

8 Smooth display for animation OpenGL Double Buffering: –Enabling double buffering –Swapping buffers after drawing glutInitDisplayMode (GLUT_DOUBLE); glClear (GL_COLOR_BUFFER_BIT); … glutSwapBuffers (); glFlush(); glClear (GL_COLOR_BUFFER_BIT); … glutSwapBuffers (); glFlush();

9 바람개비 ( 풍차 ) 만들기

10 로보트 팔 만들기

11 로보트 팔 만들기 2

12 Hierarchical Modeling A hierarchical model is created by nesting the descriptions of subparts into one another to form a tree organization

13 OpenGL Matrix Stacks Stack processing –The top of the stack is the “current” matrix –glPushMatrix(); // Duplicate the current matrix at the top –glPopMatrix(); // Remove the matrix at the top

14 Homework #2 다각형을 이용하여 움직이는 2 차원 아름다운 애니 메이션 만들기 Push/Pop Matrix 를 사용하여 2 단계 이상의 계층적 인 움직임 디자인을 할 것 –Ex): 태양계 시스템 ( 태양  지구  달 ) 사람의 움직임 ( 몸  어깨  팔꿈치  손목  손 ) 숙제제출 : 이메일 제출 (Screenshot, code, report) 숙제마감 : 4 월 28 일 수요일 23 시 59 분까지

15 Viewing Part I: Two-Dimensional Viewing Sang Il Park Sejong University Lots of slides are stolen from Jehee Lee’s

16 Viewing Pipeline

17 Two-Dimensional Viewing Two dimensional viewing transformation –From world coordinate scene description to device (screen) coordinates

18 Normalization and Viewport Transformation World coordinate clipping window Normalization square: usually [-1,1]x[-1,1] Device coordinate viewport

19 OpenGL 2D Viewing Projection Mode –glMatrixMode(GL_PROJECTION); GLU clipping-window function –gluOrtho2D(xwmin,xwmax,ywmin,ywmax); –Normalized to [-1,1]x[-1,1] OpenGL viewport function –glViewport(xvmin,xvmax,yvmin,yvmax);

20 GLUT window Functions: glutInitWindowPosition glutInitWindowSize glutCreateWindow glutDestroyWindow glutSetWindow/glutGetWindow ….. And more! See the text book pp 346~354

21 Clipping Remove portion of output primitives outside clipping window Two approaches –Clip during scan conversion: Per-pixel bounds check –Clip analytically, then scan-convert the modified primitives

22 Two-Dimensional Clipping Point clipping – trivial Line clipping –Cohen-Sutherland –Cyrus-beck –Liang-Barsky Fill-area clipping –Sutherland-Hodgeman –Weiler-Atherton Curve clipping Text clipping

23 Line Clipping Basic calculations: –Is an endpoint inside or outside the clipping window? –Find the point of intersection, if any, between a line segment and an edge of the clipping window. Both endpoints inside: trivial accept One inside: find intersection and clip Both outside: either clip or reject

24 Cohen-Sutherland Line Clipping One of the earliest algorithms for fast line clipping Identify trivial accepts and rejects by bit operations above belowrightleft Bit 4 3 2 1 0000 10001001 0001 010101000110 0010 1010 Clipping window

25 Cohen-Sutherland Line Clipping Compute region codes for two endpoints If (both codes = 0000 ) trivially accepted If (bitwise AND of both codes  0000) trivially rejected Otherwise, divide line into two segments –test intersection edges in a fixed order. (e.g., top-to-bottom, right-to-left) 0000 10001001 0001 010101000110 0010 1010 Clipping window

26 Cohen-Sutherland Line Clipping Fixed order testing and clipping cause needless clipping (external intersection)

27 Cohen-Sutherland Line Clipping This algorithm can be very efficient if it can accept and reject primitives trivially –Clip window is much larger than scene data Most primitives are accepted trivially –Clip window is much smaller than scene data Most primitives are rejected trivially Good for hardware implementation

28 Cyrus-Beck Line Clipping Use a parametric line equation Reduce the number of calculating intersections by exploiting the parametric form Notations –E i : edge of the clipping window –N i : outward normal of E i –An arbitrary point P Ei on edge E i

29 Cyrus-Beck Line Clipping

30 Solve for the value of t at the intersection of P 0 P 1 with the edge –N i · [P(t) - P Ei ] = 0 and P(t) = P 0 + t(P 1 - P 0 ) –letting D = (P 1 - P 0 ), –Where N i  0 D  0 (that is, P 0  P 1 ) N i · D  0 (if not, no intersection)

31 Cyrus-Beck Line Clipping Given a line segment P 0 P 1, find intersection points against four edges –Discard an intersection point if t  [0,1] –Label each intersection point either PE (potentially entering) or PL (potentially leaving) –Choose the smallest (PE, PL) pair that defines the clipped line

32 Cyrus-Beck Line Clipping Cyrus-Beck is efficient when many line segments need to be clipped Can be extended easily to convex polygon (rather than upright rectangle) clip windows

33 Liang-Barsky Line Clipping Liang-Barsky optimized Cyrus-Beck for upright rectangular clip windows P(x 1,y 1 ) Q(x 2.y 2 ) tBtB tTtT tRtR tLtL

34 Liang-Barsky Line Clipping T B RL tTtT tBtB

35 Nicholl-Lee-Nicholl Line Clipping Divide more cases and reduce the computation. (1) (2) (3)

36 General Clipping Window Line clipping using nonrectangular polygon clip windows –Convex polygon Cyrus-Beck algorithm can be readily extended –Concave polygon Split the concave polygon into convex polygons Vector Method for Concave Splitting Calculate edge-vector cross products in a counterclockwise order If any z component turns out to be negative, the polygon is concave


Download ppt "OpenGL Geometric Transformations. glMatrixMode(GL_MODELVIEW);"

Similar presentations


Ads by Google