Atenție vă rog! Acest site nu este actualizat. Noua versiune: shatalov.su
În cele din urmă, am terminat examinarea C ++ și am creat un program pentru piesele de lucru folosind WinAPI. Începând de astăzi, trecem la a doua etapă - la studiul DirectX API (API - Application Programming Interface), care oferă SDK-ul DirectX.
În lunile următoare vom fi familiarizați cu caracteristicile de bază ale API-ului DirectX. După aceasta, puteți încerca deja să faceți un joc simplu.
Vreau să spun imediat ce vom studia nu este dificil, dar foarte dificil! Veți avea nevoie de eforturi extraordinare. Va trebui să muncești din greu pentru a învăța totul. Dar crede-mă, rezultatul merită!
DirectX se bazează pe modelul COM (modelul Omponent O bject M model - component de obiecte). În COM, toate clasele moștenesc de la o singură clasă de bază IUnknown. Această clasă are trei metode. În consecință, toate clasele derivate (inclusiv cele care fac parte din API-ul DirectX) moștenesc capacitățile IUnknown. Vom folosi o singură metodă a acestei clase de lansare până acum. Această metodă eliberează memoria pe care o ocupă obiectul dvs. De exemplu, avem un pointer la obiectul IDirect3D (aceasta este clasa de bază a Direct3D) - d3d. Pentru a elibera memoria, trebuie să apelați metoda de lansare:
Amintiți-vă: nu puteți utiliza ștergerea cu obiecte DirectX !.
Nu vom elabora, pentru moment, COM. Este destul de dificil să creați obiecte COM. Dar aici pentru a utiliza COM este ușor. Toate obiectele DirectX sunt obiecte COM.
Clasele COM sunt numite interfețe. Înainte de fiecare nume de interfață este litera I: IDirect3DDevice9, IDirect3DVertexBuffer9. La început poți să crezi că există o mulțime de interfețe. Dar nu este așa. În Direct3D există doar aproximativ douăzeci de interfețe (clase).
Rețineți că noua operație nu este utilizată la crearea obiectelor (instanțe de interfață). Faptul este că în clasa de bază IUnknown există o metodă specială care permite obținerea oricărei interfețe COM. Cum se va întâmpla acest lucru, va rămâne în afara contextului lecției de astăzi. În general, ca atare, nu vom folosi COM (cu excepția metodei de lansare) - dezvoltatorii API DirectX au ascuns tot ce este conectat la COM, oferind în schimb metode convenabile de interfață.
Altceva despre numele interfețelor: în diferite materiale de training puteți vedea acest cod:
Și pentru fiecare interfață. Toate cele trei linii fac același lucru - creați un pointer la IDirect3DVolumeTexture. Doar ultimele două linii utilizează suprascrierea IDirect3DVolumeTexture9 * cu typedef. Vom folosi întotdeauna prima opțiune.
Și un alt punct important: toate interfețele (obiectele) sunt create ca pointeri! De ce, încă mai discutăm.
DirectX 9 vs. DirectX 10 și DirectX 11
Vom studia DirectX 9. Există o mulțime de diferențe între DirectX 10 și DirectX 11. Totul este aranjat un pic diferit. Probabil că nu vom studia a zecea versiune. Poate că mergem imediat la 11. De ce studiem încă DirectX 9. În primul rând: DirectX 9 a trecut deja testul timpului - 6 ani nu este o glumă. În al doilea rând, majoritatea utilizatorilor de Windows sunt încă utilizați Windows XP, precum și cu acest sistem de operare nu este capabil să ruleze aplicații create cu DirectX 10 și DirectX 11. În schimb, în Windows Vista și Windows 7, puteți rula programul folosind DirectX 9.
Din ce, din ceea ce face Direct3D
API-ul DirectX conține mai multe părți. Acum ne interesează partea care este responsabilă pentru programare. Direct3D este responsabil pentru grafica în DirectX.
Modulul Direct3D răspunde la DirectX pentru grafica 3D. În DirectX, nu există niciun modul pentru afișarea graficelor 2D. Grafica bidimensională este transmisă prin intermediul Direct3D. Anterior, a existat un modul separat DirectDraw. Și în cea de-a unsprezecea versiune se va include reîncarnarea lui Direct2D.
Interfețe. După cum am scris mai sus, sunt aproximativ douăzeci dintre ei. Interfața este o clasă normală. Nu aveți acces la datele interfeței, dar fiecare interfață are un set de metode. Toate interacțiunile cu DirectX au loc prin utilizarea metodelor de interfață.
Interfața principală a Direct3D este IDirect3DDevice9. Pe baza acestei interfețe, se construiește întregul program. Există mai mult de o sută de metode în IDirect3DDevice9. În alte metode interfețele sunt mult mai puțin. Există trei metode.
Încă o dată: interfețele sunt clase obișnuite cu un set de metode.
Următoarea componentă a Direct3D este o funcție. Asta este, aceste funcții nu sunt legate de nici o interfață. Funcționează puțin - exact patru bucăți.
Cea mai importantă funcție este Direct3DCreate9. Această funcție vă permite să creați un obiect IDirect3D9 (interfața de bază care pornește programul). Această funcție vă permite să nu intrați în interiorul COM. Dacă nu, atunci ar trebui să folosim instrumentele COM pentru a obține interfața IDirect3D9.
Următoarea parte este macrocomenzile. Macro-urile sunt funcții definite cu definire. De exemplu:
Arkanoid
aparat foto
celulele
sprite