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

Đồ 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