GrafickΘ aplikace ve Visual C++ (1.) 1.1. ┌vod do problematikySnad ka₧d² programßtor-hrßΦ jednou zatou₧il v∞d∞t, jak se programujφ hry. Jß vßm nevysv∞tlφm p°esn² postup, ale pomohu vßm pochopit zßkladnφ principy programovßnφ 2D grafiky ve Windows pomocφ DirectX. Myslφm, ₧e pokud to s programovßnφm tohoto typu myslφte vß₧n∞, dß vßm tento kurz dobr² zaΦßtek a kdo vφ t°eba jednou budete psßt opravdovΘ hry. Co musφte znßt abyste mohli zaΦφt programovat?Abyste mohli ihned zaΦφt psßt k≤d musφte znßt objektovΘ programovßnφ ve Visual C++ tzn. vΦetn∞ zßkladnφch t°φd MFC (Microsft Foundation Class) jako CString, CPoint nebo CRect. Programy se sice dajφ psßt pouze ve Win32, ale k≤d psan² v MFC je sna₧Üφ prßv∞ o v²Üe uvedenΘ t°φdy. Programovat grafiku lze samoz°ejm∞ i v jin²ch jazycφch (nap°. Visual Basic Φi Java), ale myslφm si, ₧e C++ je na programovßnφ grafiky nejlepÜφ, jak kv∙li v²konu, tak kv∙li programßtorskΘ volnosti, kterß t°eba ve Visual Basicu nenφ. Dßle musφte mφt na svΘm poΦφtaΦi nainstalovanΘ Visual C++, minimßln∞ verzi 4.0. NejlepÜφ bude, kdy₧ si koupφte verzi 6.0. Pokud vlastnφte verzi ni₧Üφ m∙₧e se stßt, ₧e k≤d nep∙jde zkompilovat. OΦekßvßm, ₧e mßte alespo≥ zßkladnφ znalosti v²vojovΘho prost°edφ Visual C++, nicmΘn∞ soub∞₧n∞ s tφmto kurzem b∞₧φ i kurz prßv∞ o IDE VC++, kter² vßm m∙₧e pomoci. Samoz°ejm∞ musφte mφt nainstalovanΘ DirectX minimßln∞ verzi 8.0. Zkontrolujte si zda-li mßte na disku tyto soubory : ddraw.dll, dxguid.dll, dxerr8.dll. Jako dalÜφ nadstandardnφ Φßst je pot°eba tzv. DirectX SDK 8.0 (Standard Development Kit). Ve vaÜem prßv∞ naistalovanΘm VC++ je pravd∞podobn∞ verze SDK 1.0 nebo 2.0 (zßle₧φ na verzi VC++). To by nßm sice staΦilo, ale proΦ psßt program pro starou verzi, kdy₧ mßme k dispozici verzi novou! SDK si bu∩ m∙₧ete stßhnout p°φmo od Microsoftu nebo poΦkßte na p°φÜtφ ChipCD, kde (snad) bude k dispozici. Pokud mßte vytßΦenΘ p°ipojenφ p°es modem, m∙₧e tu nastat problΘm, proto₧e SDK mß p°es 40MB (stßhnout se to z vlastnφ zkuÜenosti dß asi za 3 a p∙l hodiny). Po instalaci SDK vßm na poΦφtaΦφ p°ibydou knihovny import∙ pot°ebnΘ pro kompilaci k≤du s DirectX 8.0. Jsou nap°φklad tyto knihovny: ddraw.lib, dxerr8.lib, dxguid.lib a nebo hlaviΦkov² soubor ddraw.h. Uvedl jsem vßm jen ty, kterΘ zatφm budeme pot°ebovat. SDK takΘ obsahuje p°φklady vΦetn∞ zdrojov²ch k≤d∙ a r∙znΘ pom∙cky pro vytvß°enφ multimedißlnφch aplikacφ. Poznßmka ke kurzu
V kurzu jsou barevn∞ odd∞leny n∞ktrerß klφΦovß slova nap°. t°φda (class) 1.2. ZaΦφnßme1.2.1. GDI versus DirectXSna₧ili jste se n∞kdy kreslit do standardnφho okna pomocφ grafickΘho rozhranφ Windows (GDI - Graphics Device Interface) ? Pokud ano, jist∞ dob°e vφte, ₧e slo₧it∞jÜφ scΘny pon∞kud problikßvajφ. Pokud ne, tak to rad∞ji ani nezkouÜejte. Jestli pot°ebujete obΦas nakreslit Φßru nebo obdΘlnφk, pak je samoz°ejm∞ zbyteΦnΘ psßt slo₧it² k≤d DirectX, ale jestli chcete, aby se n∞co opravdu h²balo pak vßm nic jinΘho nezb²vß. GDI vyu₧φvß tzv. kontext za°φzenφ (DC - device context), co₧ si m∙₧ete p°edstavit jako kousek pam∞ti na vaÜφ grafickΘ kart∞ p°φpadn∞ v RAM. Ka₧dΘ okno ve Windows mß sv∙j kontext za°φzenφ a krom∞ toho m∙₧ete vytvo°it tΘm∞° libovolnΘ mno₧stvφ doΦasn²ch kontext∙ za°φzenφ (vytvo°en²ch podle DC vaÜeho okna v RAM). Do tΘto pam∞ti pak Windows zapisujφ data a vy vidφte nap°φklad Φßru nebo obdΘlnφk na monitoru. Toto opravdu jednoduchΘ °eÜenφ mß, ale jednu zßkladnφ nev²hodu. Jak jist∞ vφte vßÜ monitor se obnovuje mnohokrßt za vte°inu a prßv∞ to je kßmen ·razu, proto₧e Windows mohou zapisovat do DC prßv∞ v okam₧iku, kdy grafickß karta obnovuje obraz a proto monitor zachytφ vykreslovßnφ, kterΘ se projevuje jako problikßvßnφ. Nenφ to v₧dy pravidlem, proto₧e se vykreslovßnφ m∙₧e trefit do kratiΦkΘ doby, kdy se paprsek monitoru p°esouvß z pravΘho dolnφho rohu do levΘho hornφho, ale pravd∞podobnost je velice malß a tak navφc vaÜe aplikace nab²vß dojmu nahodilosti, co₧ nenφ dobrß vlastnost dob°e napsanΘho softwaru. A Φφm je vetÜφ vykreslovanß Φßst, tφm je v∞tÜφ pravd∞podobnost problikßvßnφ. Podrobn∞ji si o GDI povφme v p°φÜtφ lekci, jeliko₧ je dobrΘ znßt, co pou₧φvajφ Windows. 1.2.2. DirectX
Samoz°ejm∞ tohoto jevu jsi byli v²vojß°i Microsoftu dob°e v∞domi a proto
vytvo°ili standard DirectX (nebo lΘpe DirectDraw), aby bylo mo₧no programovat nßroΦnΘ
grafickΘ aplikace
zejmΘna pak hry. DirectX obsahuje mno₧stvφ mocn²ch nßstroj∙ pro tvorbu multimedißlnφch
aplikacφ ve Visual C++ p°φpadn∞ Visual Basicu nebo Jav∞.
StruΦn² popis jednotliv²ch komponent
Jak jste si jist∞ vÜimli vÜechny komponenty obsahujφ sl∙vko Direct neboli P°φmo, co₧ je p°esn∞ to, co DirectX d∞lß. DirectX toti₧ zapisuje p°φmo do grafickΘ pam∞ti a p°φmo do zvukovΘ pam∞ti atd. DirectX opravdu pracuje na nejni₧Üφ ·rovni tzn. na ·rovni hardwaru a prßv∞ proto je o tolik rychlejÜφ ne₧ GDI. Samoz°ejm∞ DirectDraw mß spoustu dalÜφch fint (nap°φklad double buffering nebo je libo tripple buffering?), jak nejlΘpe vyu₧φt vßÜ hardware.
|
|
© 2001 Vogel Publishing, design by ET NETERA