Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Tài liệu đang bị lỗi
File tài liệu này hiện đang bị hỏng, chúng tôi đang cố gắng khắc phục.
Đồ họa máy tính pptx
Nội dung xem thử
Mô tả chi tiết
Ch¬ng 8
®å häa
Trong ch¬ng nµy sÏ giíi thiÖu c¸c hµm ®Ó vÏ c¸c ®êng vµ h×nh
c¬ b¶n nh ®êng trßn, cung elip, h×nh qu¹t, ®êng gÉy khóc, h×nh
®a gi¸c, ®êng th¼ng, ®êng ch÷ nhËt, h×nh ch÷ nhËt, h×nh hép ch÷
nhËt, ... Ngoµi ra cßn ®Ò cËp tíi c¸c vÊn ®Ò rÊt lý thó kh¸c nh: xö lý
v¨n b¶n trªn mµn h×nh ®å häa, cöa sæ vµ kü thuËt t¹o ¶nh di ®éng.
C¸c hµm ®å häa ®îc khai b¸o trong tÖp graphics.h.
§ 1. Kh¸i niÖm ®å häa
§Ó hiÓu kü thuËt lËp tr×nh ®å häa, ®Çu tiªn ph¶i hiÓu c¸c yÕu tè c¬
b¶n cña ®å häa. Tõ tríc ®Õn nay chóng ta chñ yÕu lµm viÖc víi kiÓu
v¨n b¶n. NghÜa lµ mµn h×nh ®îc thiÕt lËp ®Ó hiÓn thÞ 25 dßng, mçi
dßng cã thÓ chøa 80 ký tù. Trong kiÓu v¨n b¶n, c¸c ký tù hiÓn thÞ
trªn mµn h×nh ®· ®îc phÇn cøng cña m¸y PC Ên ®Þnh tríc vµ ta
kh«ng thÓ nµo thay ®æi ®îc kÝch thíc, kiÓu ch÷.
ë mµn h×nh ®å häa, ta cã thÓ xö lý ®Õn tõng chÊm ®iÓm (pixel)
trªn mµn h×nh vµ do vËy muèn vÏ bÊt kú thø g× còng ®îc. Sù bµi trÝ
vµ sè pixel trªn mµn h×nh ®îc gäi lµ ®é ph©n gi¶i (resolution). Do
mçi kiÓu mµn h×nh ®å häa cã mét c¸ch xö lý ®å häa riªng nªn
TURBO C cung cÊp mét tÖp tin ®iÒu khiÓn riªng cho tõng kiÓu ®å
häa. B¶ng 8-1 cho thÊy c¸c kiÓu ®å häa vµ c¸c tÖp tin ®iÒu khiÓn
chóng.
Ngoµi c¸c tÖp cã ®u«i BGI chøa ch¬ng tr×nh ®iÒu khiÓn ®å häa,
TURBO C cßn cung cÊp c¸c tÖp tin ®u«i CHR chøa c¸c Font ch÷ ®Ó
vÏ c¸c kiÓu ch÷ kh¸c nhau trªn mµn h×nh ®å häa. §ã lµ c¸c tÖp:
GOTH.CHR
LITT.CHR
SANS.CHR
TRIP.CHR
B¶ng 8-1. C¸c tÖp tin ®iÒu khiÓn ®å häa cña TURBO C++
Tªn tÖp tin KiÓu mµn h×nh ®å häa
ATT.BGI ATT & T6300 (400 dßng)
CGA.BGI IBMCGA, MCGA vµ c¸c m¸y t¬ng thÝch
EGAVGA.BGI IBM EGA, VGA vµ c¸c m¸y t¬ng thÝch
HERC.BGI Hercules monochrome vµ c¸c m¸y t¬ng thÝch
IBM8514.BGI IBM 8514 vµ c¸c m¸y t¬ng thÝch
PC3270.BGI IBM 3270 PC
Mµn h×nh ®å häa gåm nhiÒu ®iÓm ¶nh ®îc s¾p xÕp trªn c¸c
®êng th¼ng ngang vµ däc. §iÒu nµy ®óng cho tÊt c¶ c¸c kiÓu mµn
h×nh ®å häa cña m¸y tÝnh. Kh¸c biÖt chñ yÕu gi÷a chóng lµ kÝch
thíc vµ sè c¸c ®iÓm ¶nh. Trong kiÓu CGA (®é ph©n gi¶i thÊp), ®iÓm
¶nh cã kÝch thíc lín, chiÒu ngang cã 320 ®iÓm ¶nh, cßn theo chiÒu
däc cã 200 ®iÓm ¶nh. Mµn h×nh VGA cã ®é ph©n gi¶i cao h¬n: ®iÓm
¶nh nhá h¬n, trªn mçi hµng cã 640 ®iÓm ¶nh vµ trªn mçi cét cã 480
®iÓm ¶nh. §iÓm ¶nh cµng nhá th× sè ®iÓm ¶nh trªn mµn h×nh cµng
nhiÒu vµ chÊt lîng ®å häa cµng cao.
Mçi kiÓu ®å häa dïng mét hÖ täa ®é riªng. HÖ täa ®é cho mµn
h×nh VGA lµ 640 x 480 nh sau :
(0,0) (639,0)
(0,479) (639,479)
H×nh 8.1. HÖ täa ®é VGA
446 447
Nhê hÖ täa ®é nµy, ta cã thÓ t¸c ®éng hay tham chiÕu ®Õn bÊt kú
®iÓm ¶nh nµo trªn mµn h×nh ®å häa.
NÕu dïng mµn h×nh CGA th× gãc díi ph¶i cã täa ®é (319, 199).
§éc lËp víi kiÓu ®å häa ®ang sö dông, c¸c hµm getmaxx vµ getmaxy
bao giê còng cho täa ®é x vµ y lín nhÊt trong kiÓu ®å häa ®ang dïng.
Mét ch¬ng tr×nh ®å häa thêng gåm c¸c phÇn sau:
- Khëi ®éng hÖ thèng ®å häa.
- X¸c ®Þnh mÇu nÒn (mÇu mµn h×nh), mÇu ®êng vÏ, mÇu t« vµ
kiÓu (mÉu) t«.
- VÏ, t« mÇu c¸c h×nh mµ ta mong muèn.
- C¸c thao t¸c ®å häa kh¸c nh cho hiÖn c¸c dßng ch÷...
- §ãng hÖ thèng ®å häa ®Ó trë vÒ mode v¨n b¶n.
§ 2. Khëi ®éng hÖ ®å häa
Môc ®Ých cña viÖc khëi ®éng hÖ thèng ®å häa lµ x¸c ®Þnh thiÕt bÞ
®å häa (mµn h×nh) vµ mèt ®å häa sÏ sö dông trong ch¬ng tr×nh. §Ó
lµm ®iÒu nµy ta dïng hµm:
void initgraph(int *graphdriver, int *graphmode,char *driverpath);
trong ®ã: driverpath lµ ®êng dÉn cña th môc chøa c¸c tÖp tin ®iÒu
khiÓn ®å häa, graphdriver, graphmode cho biÕt mµn h×nh vµ mèt ®å
häa sÏ sö dông trong ch¬ng tr×nh. B¶ng 8-2 cho thÊy c¸c gi¸ trÞ kh¶
dÜ cña graphdriver vµ graphmode.
VÝ dô 1. Gi¶ sö m¸y tÝnh cña ta cã mµn h×nh EGA, c¸c tÖp tin ®å
häa chøa trong th môc C: \TC, khi ®ã ta cã thÓ khëi ®éng hÖ thèng
®å häa nh sau:
#include "graphics.h"
main()
{
int mh=EGA, mode= EGALO;
initgraph(&mh, &mode, "C:\TC");
. . .
}
B¶ng 8-2. C¸c gi¸ trÞ kh¶ dÜ cña graphdriver, graphmode
graphdriver graphmode §é ph©n gi¶i
Detect (0)
CGA (1) CGAC0 (0) 320 x 200
CGAC1 (1) 320 x 200
CGAC2 (2) 320 x 200
CGAC3 (3) 320 x 200
CGAHi (4) 640 x 200
MCGA (2) MCGA0 (0) 320 x 200
MCGA1 (1) 320 x 200
MCGA2 (2) 320 x 200
MCGA3 (3) 320 x 200
MCGAMed (4) 640 x 200
MCGAHi (5) 640 x 480
EGA (3) EGALO (0) 640 x 200
EGAHi (1) 640 x 350
EGA64 (4) EGA64LO (0) 640 x 200
EGA64Hi (1) 640 x 350
EGAMONO (5) EGAMONOHi (0) 640 x 350
VGA (9) VGALO (0) 640 x 200
VGAMED (1) 640 x 350
VGAHI (2) 640 x 480
HERCMONO (7) HERCMONOHI 720 x 348
ATT400 (8) ATT400C0 (0) 320 x 200
ATT400C1 (1) 320 x 200
ATT400C2 (2) 320 x 200
ATT400C3 (3) 320 x 200
ATT400MED (4) 640 x 400
ATT400HI (5) 640 x 400
PC3270 (10) PC3270HI (0) 720 x 350
IBM8514 (6) IBM8514LO (0) 640 x 480, 256 mÇu
IBM8514HI (1) 1024 x 768, 256 mÇu
448 449