Top Banner

of 36

Lect2 Viewport Clipping

Jul 08, 2015

Download

Documents

Trang Doremon
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Ct xn viewport ng cong tham s

Cc h trc ta H trc ta gn vi mn hnh window (pixels). Min: 0 (left) n screenWidth 1 theo trc x, 0 (top) n screenHeight 1 theo trc y.

Cc h trc ta (2) phn bit cc ta , chng ta s dng mt chng trnh m t i tng hnh hc trong h trc ta v s dng kch c v b tr hin th ln mn hnh. Vic m t thng c coi l m hnh ha (modelling). Hin th cc bc nh c coi l nhim v hin th (viewing).

Cc h trc ta (3) H ta th gii: khng gian m cc i tng trong c m t. nh ngha ca s th gii (world window) l mt hnh ch nht Xc nh phn no ca th gii khung cnh s c v, phn no b ct xn. OpenGL ct xn t ng.

Cc h trc ta (4) nh ngha viewport l mt hnh ch nht trn ca s ca mn hnh hin th. S bin i gia world window v viewport do OpenGL thc hin.

V d v h trc ta Chng ta mun v sin(x ) sinc( x ) x Sinc(0) = 1 th trong min 4.0 x 4.0.

V d v h trc ta (2) Hm setWindow thit lp kch c ca s th gii: void setWindow(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(left, right, bottom, top);}

V d v h trc ta (3) Hm setViewport thit lp c viewport mn hnh: void setViewport(GLint left, GLint right, GLint bottom, GLint top) { glViewport(left, bottom, right - left, top bottom);} Gi: setWindow(-5.0, 5.0, -0.3, 1.0); setViewport(0, 640, 0, 480);

Windows v Viewport

nh x Windows Windows c m t bi tri, trn, phi, di: w.l, w.t, w.r, w.b. Viewports cng c m t bi tri, tr, phi, di: v.l, v.t, v.r, v.b, nhng trong ca s mn hnh.

nh x Chng ta nh x mt HCN c sp thnh mt HCN c sp Nu t l ca 2 HCN khng ging nhau cn thc hin vic bp moy W.t W.l W.r x W.b window V.b viewport sx Screen window V.t V.l V.r

sy

nh x ca s-viewport Chng ta mun nh x hp l. VD: nu x = of trn on t tri sang phi ca bin ca s th trn mn hnh x(sx) nn l ca on tri sang phi ca bin viewport.

nh x ca s-viewport (2) nh x tuyn tnh. sx= Ax + C, sy = B y + D We require (sx V.l)/(V.r V.l) = (x W.l)/(W.r W.l), giving sx = x*[(V.r-V.l)/(W.r-W.l)] + {V.l W.l*[(V.rV.l)/(W.r-W.l)]}, or A = (V.r-V.l)/(W.r-W.l), C = V.l A*w.l

nh x ca s-viewport (3) (sy V.b) / (V.t V.b) = (y W.b)/(W.t W.b), suy ra B = (V.t-V.b)/(W.t-W.b), D = V.b B*W.b

Tm li: sx = A x + C, sy = B y + D, vi A V . r V . l , C V . l A W . lW. r W. l V. t V. b B , D V. b B W. b W. t W. b

Hm GL thc hin nh x World window: void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); Viewport: void glViewport(GLint x, GLint y, GLint width, GLint height); Thit lp gc di bn tri, chiu di, chiu cao ca viewport.

Hm GL thc hin nh x (2) Bi v OpenGL dng cc ma trn bin i gi gluOrtho2D() cn phi thit lp trc 2 hm glMatrixMode(GL_PROJECTION); v glLoadIdentity(); setWindow() v setViewport() l to ra window v viewport.

ng dng:Tiling vi Viewports

ng dng:Tiling vi Viewports (2) Tiling AsetWindow(0, 640.0, 0, 440.0); // set a fixed window for (int i = 0; i < 5; i++) // for each column for (int j = 0; j < 5; j++){ // for each row {glViewport (i*64, j*44,64, 44); // set the next viewport drawPolylineFile("dino.dat"); // draw it again }

ng dng:Tiling vi Viewports (3) Tiling Bfor (int i = 0; i < 5; i++) // for each column for (int j = 0; j < 5; j++){ // for each row if ((i + j) % 2 == 0){ setWindow(0.0, 640.0, 0.0, 440.0); } else { setWindow(0.0, 640.0, 440.0, 0.0); // upside-down } glViewport (i*64, j*44,64, 44); // no distortion drawPolylineFile("dino.dat"); }

ng dng: Clip, Zoom and PanCt xn (Clipping): hin th nhng phn ca hnh nh nm trong ca s.

ng dng: Clip, Zoom and Pan (2)

ng dng: Clip, Zoom and Pan (3) S dng glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); //a ra 2 b m: 1 dng tra, 2 dng v. Thm glutSwapBuffers(); sau khi gi hexSwirl (); // chuyn n bn v mi

Thay i kch c ca s Ngi dng t do thay i kch c v t l ca mn hnh ca s. ng k hm: glutReshapeFunc (myReshape); Void myReshape (GLsizei W, GLsizei H); tm rng v chiu cao mi cho ca s.

Bo ton t l Chng ti mun viewport ln nht v bo qun c t l ca R so vi th gii. Gi s mn hnh ca s c rng v chiu cao H: Nu R > W/H, viewport nn l rng v chiu cao Nu R < W/H, viewport nn l H*R cho chiu rng and H cho chiu cao. Ci g xy ra nu R=W/HWhat happens if R = W/H?

ng dng bo ton din tch

Ct xn ng thng Ch v phn nm trong ca s ct xn

Ct xn ng thng (2) Cohen-Sutherland C 2 trng hp AB hon ton nm trong ca s v AB; CD hon ton nm ngoi ca s khng v CD.

Ct xn ng thng (3) M ha im kt thc ca ng thng bit v tr ca ng thng so vi ca s W:

Ct xn ng thng (4) 9 vng th hin 9 kh nng m ha ca cc im kt thc

Ct xn ng thng (5) ng thng gm 2 im kt thc (vertices), P1 v P2. Nu khng ri vo 2 trng hp c bn. Tm giao ca ng thng vi bin ca ca s v chia nh ng thng.

Ct xn ng thng (6)

V d: ct xn ng thng

V ng trn v cung V ng trn bit tm v bn knh drawCircle( IntPoint center, int radius) can

V ng cong tham s ng cong C vi dng tham s P(t) = (x(t), y(t)) t thay i t 0 n T, chng ta s dng cc mu ca P(t) ti cc khong u nhau trong khng gian.

V ng cong tham s (2) V tr Pi = P(ti) = (x(ti), y(ti)) c tnh khi c {ti} theo thi gian. Cung P(t) c xp x bi cc on thng da trn chui cc im Pi.

V ng cong tham s(3) Code: // draw the curve (x(t), y(t)) using // the array t[0],..,t[n-1] of sample times glBegin(GL_LINES); for(int i = 0; i < n; i++) glVertex2f((x(t[i]), y(t[i])); glEnd();