420 likes | 560 Views
Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng. Thieát bò hieån thò. Thieát bò queùt raster (refresh CRT, raster-scan display): ñaõ ñöôïc trình baøy Thieát bò hieån thò ñoaïn thaúng (line-drawing display): chæ hieån thò ñöôïc ñoaïn thaúng Pen plotter Leänh cô baûn: Pen_Up Pen_Down
E N D
Thieát bò hieån thò • Thieát bò queùt raster (refresh CRT, raster-scan display): ñaõ ñöôïc trình baøy • Thieát bò hieån thò ñoaïn thaúng (line-drawing display): chæ hieån thò ñöôïc ñoaïn thaúng • Pen plotter • Leänh cô baûn: • Pen_Up • Pen_Down • Go_To(x, y) • Get_Pen(i) • Vector-refresh display Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Pen plotter • Heä thoáng toïa ñoä y (1023, 767) caây vieát x (0, 0) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Bieåu dieãn ñoaïn thaúng trong frame buffer • Device driver Line • So saùnh vôùi giaûi thuaät cuûa Bresenham! procedure DD_Line(row1, col1, row2, col2, color : integer) {Bieåu dieãn trong frame buffer ñoaïn thaúng noái (col1, row1) vaø (col2, row2} {Tröôøng hôïp ñaëc bieät: -1 heä soá goùc 1 vaø col1 col2} var dx, dy, y, m : real; x : integer; begin dx := col2 - col1; dy := row2 - row1; m := dy/dx; y := row1; for x := col1 to col2 dobegin SetPixel(x, Round(y), color); y := y + m end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
NDC • Toïa ñoä thieát bò ñöôïc chuaån hoùa (NDC, normalized device coordinates): • Vuøng hình vuoâng vôùi goùc döôùi beân traùi (lower left corner) vaø goùc treân beân phaûi (upper right corner) coù toïa ñoä laø (0, 0) vaø (1, 1). • Duøng NDC ñeå goïi thuû tuïc veõ ñoaïn thaúng gioáng nhau cho moïi thieát bò procedure LineNDC_(x1, y1, x2, y2 : real) { Veõ ñoaïn thaúng noái (x1, y1) vaø (x2, y2) trong NDC Coù moät thuû tuïc nhö theá naøy cho moãi loaïi thieát bò Caùch goïi thuû tuïc ñeàu nhö nhau cho moïi loaïi thieát bò.} Display y 1. (x2, y2) (x1, y1) x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Ví duï veõ aûnh duøng LineNDC_( ) • Veõ hình chöõ nhaät leân thieát bò Display y 1. (x2, y2) (x1, y1) x 1. procedure Box(x1, y1, x2, y2 : real); {Veõ hình chöõ nhaät coù ñænh döôùi beân traùi (x1, y1) vaø ñænh treân beân phaûi (x2, y2) trong NDC} begin LineNDC_(x1, y1, x2, y1); LineNDC_(x2, y1, x2, y2); LineNDC_(x2, y2, x1, y2); LineNDC_(x1, y2, x1, y1) end; {Box} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
AÙnh xaï NDC vaøo moät thieát bò • Hieån thò moät ñieåm trong NDC thaønh moät ñieåm cuûa thieát bò • AÙnh xaï sao cho NDC aùnh xaï thaønh hình vuoâng ôû giöõa lôùn nhaát cuûa thieát bò hieån thò y Hình vuoâng lôùn nhaát NDC 1. Q dy P Display y dx x x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Baøi toaùn: Xaùc ñònh caùc heä soá A, B, C, D • Ví duï: ymaxxmax . Hình vuoâng lôùn nhaát ôû giöõa thieát bò coù • goùc treân traùi: ((xmax-ymax) / 2, ymax) • goùc döôùi phaûi: ((xmax + ymax) / 2, 0) • Ví duï: kích thöôùc thieát bò laø 1024 768. Hình vuoâng lôùn nhaát y dy ymax 767 1. NDC dx 1023 128 895 x xmax 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Tính ñöôïc: (128, 767) vaø (895, 0) • Töø treân tìm ñöôïc: Hình vuoâng lôùn nhaát y dy ymax 767 1. NDC dx 1023 128 895 x xmax 0. 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
AÙnh xaï NDC vaøo moät thieát bò (tieáp) • Tröôøng hôïp ymaxxmax . Ñaët offset= (xmax-ymax) / 2 thì dx = ymaxx+offset dy = ymaxy Hình vuoâng lôùn nhaát y dy 1. ymax NDC dx x xmax offset 0. 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Veõ töø NDC vaøo thieát bò • Thuû tuïc veõ töø NDC leân hình vuoâng ôû giöõa lôùn nhaát cuûa thieát bò procedure LineNDC_(x1, y1, x2, y2 : real); {aùnh xaï leân hình vuoâng lôùn nhaát. Giaû söû Maxy Maxx} const Maxx = 1023; Maxy = 767; var dx1, dy1, dx2, dy2 : integer; offset : real; begin offset := (Maxx - Maxy)/2.0; dx1 := round(Maxy*x1 + offset); {aùnh xaï leân hình vuoâng } dy1 := round(Maxy*y1); {lôùn nhaát } dx2 := round(Maxy*x2 + offset); dy2 := round(Maxy*y2); Pen_Up; Go_To(dx1, dy1); Pen_Down; Go_To(dx2, dy2) end; phuï thuoäc thieát bò phuï thuoäc thieát bò Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
R = Heä soá tyû leä (cuûa moät hình chöõ nhaät) = AÙnh xaï töø NDC leân toaøn thieát bò • Giaû söû R cuûa thieát bò < 1. • Laøm theá naøo ñeå taän duïng ñöôïc caû beà maët cuûa thieát bò? y RNDC Rdev NDC 1. R x 1. Heä soá tyû leä laø R Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
dx = xmax x dy = xmax y AÙnh xaï töø NDC leân toaøn thieát bò (tieáp) Giaûi phaùp: Chæ söû duïng moät phaàn thích hôïp cuûa NDC y RNDC Rdev NDC 1. R x 0 1. Heä soá tyû leä laø R < 1. ÖÙng duïng phaûi bieát heä soá tyû leä R Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
LineNDC_( ) vaø LineNDC( ) • Kieåu döõ lieäu cho ñieåm trong maët phaúng type point = record x, y : real end; procedure LineNDC(p1, p2 : point); {Veõ ñoaïn thaúng noái p1 vaø p2} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Polyline • polyline: chuoãi caùc ñoaïn thaúng • Kieåu döõ lieäu bieåu dieãn polyline polypoint = record num : 0..MaxVert; {number of points} pt : array [1..MaxVert] of point end; y 1. procedure PolylineNDC(poly : polypoint); {Veõ polyline poly} var i : integer; begin with poly doif num > 1 then for i := 1 to (num - 1) do LineNDC(pt[i], pt[i + 1]) end; x 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Polymarker • Ñaëc taû polymarker • ñònh nghóa tröôùc marker: , D, ,... • thuoäc tính: maøu, kích thöôùc • interface • procedure Polymarker(places : polypoint) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Text • Ñaëc taû text • font (kieåu): ví duï Courier, Helvetica,... • serif • sans serif: sans serif • tröõ font döôùi daïng • bitmap • öu ñieåm: ñònh nghóa vaø hieån thò deã daøng, khoâng qua scan • conversion • khuyeát ñieåm: khoâng deã daøng sinh ra kích thöôùc khaùc • outline: bieåu dieãn kyù töï baèng caùc ñoaïn thaúng vaø ñöôøng cong • öu ñieåm: deã daøng sinh ra kích thöôùc khaùc • khuyeát ñieåm: phaûi qua scan conversion • interface • procedure Text(x, y, String) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Duøng LineNDC_( ) ñeå veõ hình • Veõ aûnh chæ goàm caùc ñoaïn thaúng duøng thuû tuïc LineNDC_( ) • LineNDC_(x1, y1, x2, y2 : real) procedure House; begin LineNDC_(0.5, 0.7, 0.8, 0.5); {veõ daùng cuûa nhaø} LineNDC_(0.8, 0.5, 0.8, 0.1); LineNDC_(0.8, 0.1, 0.2, 0.1); LineNDC_(0.2, 0.1, 0.2, 0.5); LineNDC_(0.2, 0.5, 0.5, 0.7); LineNDC_(0.35, 0.1, 0.35, 0.3); {veõ cöûa} LineNDC_(0.35, 0.3, 0.5, 0.3); LineNDC_(0.5, 0.3, 0.5, 0.1) end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Ví duï moät chöông trình ñoà hoïa • Ví duï moät chöông trình ñoà hoïa goïi thuû tuïc House program DrawHouse; <khai baùo House, LineNDC_, StartGraphics,...> begin StartGraphics; House; ExitGraphics end. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Laäp trình ñeå söû duïng laïi: moät ví duï • Moät giôùi haïn cuûa thuû tuïc House laø khoâng tieän söû duïng laïi • Tham soá hoùa thuû tuïc House ñeå deã söû duïng laïi. procedure House2(corner : point; W, H : real); var Right, Top, Roof_Top, Door_Right, Door_Top, Door_Left : real; begin with corner do begin Right := x + W; Top := y + H; {toïa ñoä y lôùn nhaát cuûa vaùch} Roof_Top := Top + H/2.0; {toïa ñoä y cuûa ñænh cao nhaát} Door_Right := x + W/2.0; Door_Top := y + H/2.0; Door_Left := Door_Right - W/4.0; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Laäp trình ñeå söû duïng laïi: moät ví duï (tieáp) LineNDC_(x, y, x, Top); LineNDC_(x , Top, Door_right, Roof_Top); LineNDC_(Door_right, Roof_Top, Right, Top); LineNDC_(Right, Top, Right, y); LineNDC_(Right, y, x, y); LineNDC_(Door_right, y, Door_right, Door_Top); LineNDC_(Door_right, Door_Top, Door_Left, Door_Top); {veõ cöûa} LineNDC_(Door_Left, Door_Top, Door_Left, y) end; end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Thuû tuïc ñöôïc tham soá hoùa • Ví duï duøng thuû tuïc ñöôïc tham soá hoùa House2( ) Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Moâ hình vaø toïa ñoä thöïc • Cho ñeán baây giôø, taïo aûnh trong • frame buffer (duøng DD_Line( )) • NDC (duøng LineNDC( ) hay LineNDC_( )) • Laäp moâ hình • Moâ hình cho ñoái töôïng hay heä thoáng • Coâng cuï: phöông trình vi phaân,... • Moâ hình hình hoïc (geometric model) • hình daïng, kích thöôùc, thuoäc tính khaùc • Heä toïa ñoä thöïc (world coordinate system) • ñieåm trong maët phaúng coù toïa ñoä (x, y) • ñôn vò chieàu daøi: mm, m,... • Muïc ñích: töø moâ hình suy dieãn ñöôïc haønh vi cuûa ñoái töôïng hay heä thoáng. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Moâ hình vaø toïa ñoä thöïc (tieáp) • Vieäc nhìn (viewing): quaù trình veõ moät pheùp nhìn (view) cuûa moâ hình leân moät thieát bò. Ba vaán ñeà: • Phaàn naøo cuûa moâ hình/ñoái töôïng caàn ñöôïc veõ? • Veõ ôû ñaâu treân thieát bò? • Veõ lôùn côõ naøo? (Bieán ñoåi toïa ñoä thöïc sang NDC) • Tieâu chí khi ñaëc taû vieäc nhìn: ít phuï thuoäc thieát bò. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Cöûa soå Cöûa soå vaø vuøng nhìn • Pheùp nhìn (view) ñöôïc xaùc ñònh bôûi • Cöûa soå (window): phaàn cuûa moâ hình caàn ñöôïc veõ • Vuøng nhìn (viewport): phaàn trong NDC maø cöûa soå ñöôïc aùnh xaï leân. • Ñaëc taû vuøng nhìn trong NDC ñeå ít phuï thuoäc thieát bò. Heä toïa ñoä thöïc NDC 1. R Vuøng nhìn 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Cöûa soå vaø vuøng nhìn (tieáp) • Cöûa soå vaø vuøng nhìn coù caùc caïnh song song vôùi caùc truïc toïa ñoä (tröø khi ñöôïc yeâu caàu khaùc) • Kích thöôùc vaø vò trí cuûa cöûa soå laø tuøy yù • Vuøng nhìn phaûi naèm trong NDC • Heä soá tyû leä cuûa cöûa soå vaø vuøng nhìn khoâng caàn phaûi baèng nhau. Heä toïa ñoä thöïc NDC 1. R Cöûa soå Vuøng nhìn 1. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
AÙnh xaï töø cöûa soå tôùi vuøng nhìn • Pheùp aùnh xaï: thoõa bieåu thöùc tuyeán tính vaø aûnh cuûa W laø V dx = sxx + tx dy = syy + ty Heä toïa ñoä thöïc NDC dy y V Vt l: left r: right b: bottom t: top W Wt (x, y) (dx, dy) Wb Vb x dx Wl Wr Vl Vr Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Xaùc ñònh caùc heä soá cuûa aùnh xaï töø cöûa soå tôùi vuøng nhìn • Khi x = Wl thì dx = Vl , do ñoù • Vl = sxWl + tx • Khi x = Wr thì dx = Vr , do ñoù • Vr = sxWr + tx • Töông töï, coù ñöôïc heä thoáng phöông trình baäc nhaát vôùi 2 aån soá sy vaø ty Töø ñoù xaùc ñònh ñöôïc sy vaø ty . Heä thoáng phöông trình baäc nhaát vôùi 2 aån soá sx vaø tx Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Caùc heä soá cuûa aùnh xaï töø cöûa soå tôùi vuøng nhìn Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Kieåu döõ lieäu cho cöûa soå vaø vuøng nhìn • Kieåu döõ lieäu cho hình chöõ nhaät • Caøi caùc tham soá cuûa hình chöõ nhaät type rect = record {hình chöõ nhaät} l, t, r, b : real {l: left, t: top, r: right, b: bottom} end procedure SetRect(left, top, right, bott : real; var r : rect); {set boundary of rectangle} begin with r dobegin l := left; t := top; r := right; b := bott end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Hieän thöïc aùnh xaï töø cöûa soå leân vuøng nhìn • Cho cöûa soå W vaø vuøng nhìn V, thuû tuïc sau xaùc ñònh caùc heä soá cuûa aùnh xaï töø W leân V: • AÙnh xaï ñieåm trong toïa ñoä thöïc pWorld : point ñeán ñieåm NDC : point procedure MapRects(W, V : rect; var sx, tx, sy, ty : real); {tính sx, sy, tx, ty töø caùc tham soá cuûa caùc hình chöõ nhaät} ... sx := (V.r - V.l)/(W.r - W.l); tx := ... sy := ... ty := ... pNDC.x := sx*pWorld.x + tx; pNDC.y := sy*pWorld.y + ty Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Veõ ñoaïn thaúng • Veõ ñoaïn thaúng trong toïa ñoä thöïc leân thieát bò procedure Line(p1, p2 : point) {Veõ ñoaïn thaúng noái p1 vaø p2 trong toïa ñoä thöïc} var pNDC1, pNDC2 : point; {caùc ñieåm bieân cuûa ñoaïn thaúng trong NDC} begin Clip(p1, p2, vis); {remove if no clipping desired} if vis then {remove if no clipping desired} begin {Caùc bieán sx, sy, tx, ty laø toaøn cuïc} pNDC1.x := sx*p1.x + tx; pNDC1.y := sy*p1.y + ty; pNDC2.x := sx*py.x + tx; pNDC2.y := sy*py.y + ty; LineNDC(pNDC1, pNDC2) end end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Xeùn (clipping) ñoaïn thaúng • Caét ñi caùc phaàn cuûa ñoaïn thaúng naèm ngoaøi cöõa soå • Baøi toaùn: xeùn ñoaïn thaúng sao cho phí toån thôøi gian thaáp. Cöõa soå Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Xeùn (clipping) ñoaïn thaúng (tieáp) • Thuû tuïc Clip(var p1, p2 : point; var vis : boolean) • xeùn ñoaïn thaúng noái p1 vaø p2 (toïa ñoä thöïc) ñoái vôùi cöûa soå • neáu vis laø true thì giao cuûa ñoaïn p1p2 vaø cöûa soå laø , vaø caùc ñieåm bieân ñöôïc tröõ trong p1 vaø p2 • neáu vis laø false thì giao cuûa ñoaïn p1p2 vaø cöûa soå laø . • Vôùi ñoaïn thaúng caàn ñöôïc xöû lyù, Clip( ) seõ: • khoâng laøm gì caû, neáu caû ñoaïn thaúng naèm trong cöûa soå • khöû noù, neáu caû ñoaïn thaúng naèm ngoaøi cöûa soå • caét moät ñieåm bieân, neáu ñoaïn thaúng coù moät ñieåm bieân naèm trong vaø moät ñieåm bieân naèm ngoaøi cöûa soå • caét caû hai ñieåm bieân, neáu caû hai ñieåm bieân cuûa ñoaïn thaúng naèm ngoaøi cöûa soå, nhöng moät phaàn ñoaïn thaúng naèm trong cöûa soå. Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Quan heä trong/ngoaøi giöõa ñieåm vaø hình chöõ nhaät • Quan heä trong/ngoaøi giöõa ñieåm bieân vaø cöõa soå c.r true c.r false type half_space_code = record l, t, r, b : boolean end; W procedure Encode(p : point; var c : half_space_code); {build code for point p} begin c.l := (p.x < W.l); c.r := (p.x > W.r); c.b := (p.y < W.b); c.t := (p.y > W.t) end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Caét ñoaïn thaúng ñoái vôùi moät caïnh cuûa cöûa soå • Xaùc ñònh toïa ñoä cuûa A • Toïa ñoä x cuûa A: W.r • Toïa ñoä y cuûa A: p1.y - (p1.x - W.r)*m • Töông töï cho caùc caïnh khaùc cuûa cöûa soå d y W p1 W.t d A e W.b p2 x W.l W.r Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Giaûi thuaät clipping cuûa Cohen-Sutherland • Xeùn ñoaïn thaúng noái p1 vaø p2 trong toïa ñoä thöïc procedure Clip(var p1, p2 : point; var vis : boolean); {vis laø true neáu sau khi xeùn, phaàn coøn laïi } var c1, c2, tmp_cd : half_space_code; tmp_pt : point; m : real; {heä soá goùc cuûa ñoaïn thaúng} in1, in2, done : boolean; {cheùp procedure Encode( ) vaøo ñaây} begin {Clip} done := false; vis := false; repeat Encode(p1, c1); Encode(p2, c2); Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Giaûi thuaät clipping cuûa Cohen-Sutherland (2) in1 := (not c1.l) and (not c1.t) and (not c1.r) and (not c1.b) in2 := (not c2.l) and (not c2.t) and (not c2.r) and (not c2.b) if in1 and in2 thenbegin {ñoaïn thaúng naèm trong} done := true; vis := true end elseif (c1.l and c2.l) or (c1.r and c2.r) or (c1.t and c2.t) or (c1.b and c2.b) thenbegin {ñoaïn thaúng naèm ngoaøi} done := true; vis := false end elsebegin {ít nhaát moät ñieåm bieân naèm ngoaøi} if in1 thenbegin {trao ñoåi p1, p2 vaø c1, c2 : baûo ñaûm p1 naèm ngoaøi} tmp_cd := c1; c1 := c2; c2 := tmp_cd; tmp_pt := p1; p1 := p2; p2 := tmp_pt end; Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Giaûi thuaät clipping cuûa Cohen-Sutherland (3) if p2.x = p1.x thenbegin {ñoaïn thaúng ñöùng} if c1.t then p1.y := w.t {p1 naèm treân} elseif c1.b then p1.y := w.b {p1 naèm döôùi} end elsebegin {khoâng phaûi laø ñoaïn thaúng ñöùng} m := (p2.y - p1.y)/(p2.x - p1.x); {heä soá goùc} if c1.l thenbegin p1.y := p1.y + (w.l - p1.x)*m; p1.x := w.l end elseif c1.r thenbegin p1.y := p1.y + (w.r - p1.x)*m; p1.x := w.r end Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Giaûi thuaät clipping cuûa Cohen-Sutherland (4) elseif c1.b thenbegin p1.x := p1.x + (w.b - p1.y)/m; p1.y := w.b end elseif c1.t thenbegin p1.x := p1.x + (w.t - p1.y)/m; p1.y := w.t end end {khoâng phaûi laø ñoaïn thaúng ñöùng} end {ít nhaát moät ñieåm bieân naèm ngoaøi} until done end; {Clip} Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Xeùn ñoaïn thaúng trong tröôøng hôïp xaáu nhaát • Giaûi thuaät Cohen-Sutherland coù theå caàn ñeán 4 laàn caét. • Thöù töï caét trong ví duï laø A, C, B, D. p2 B D C A p1 Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng
Baøi thí nghieäm/thöïc haønh 2 • 1. Hieän thöïc caùc thuû tuïc LineNDC_( ) vaø LineNDC( ) cho maøn hình coù kích thöôùc cao = 640 vaø roäng = 480 pixel. Caùc thuû tuïc caàn taän duïng ñöôïc caû maøn hình. • 2. Hieän thöïc thuû tuïc Clip( ). Chöông 3: Caùc thieát bò ñoà hoïa vaø söï ñieàu khieån chuùng