Snad 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.
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.1 (Software 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. 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í.
V kurzu jsou barevně odděleny něktrerá klíčová slova např. třída (class) CMainFrame
,
funkce (function) InitInstance()
,
proměnná (variable) m_hWnd
a soubor (file) ddraw.h
.
Toto barevné oddělení jsem zvolil pro vyšší přehlednost v
textu a aby bylo na první pohled vidět co je fuknce a co třída. Ostatní důležitá slova budou tučně
např. ClassWizard.
Některé názvy budou v kurzívě zvláště jsou-li
v textu poprvé např. MFC a za anglickým názvem bude pokud možno rozepsáno, co název
znamená v českém překladu.
U zkratek bude uveden význam jednotlivých písmen např. MFC (Microsoft Foundation Class).
Funkce poznáte podle závorek na konci názvu např. InitInstance()
.
Obecně platí, že před členské proměnné (tzn. jsou deklarovány uvnitř
třídy) se dávají znaky m_
(m jako member (člen)).
Snaž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.
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ě.
Co obsahuje DirectX ?
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.
A to je pro tentokrát vše. Těším se příště nashledanou.