HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

DirectX programozása Delphi-ből


DirectX 1. rész

Példaprogram letöltése

7614 bájt


Most induló cikksorozatunkban egy igen nagy témát veszünk szemügyre közelebbről, mely nem más, mint a DirectX használata, lehetőségei. Cikkeink az alapoktól, az első kezdeti lépésektől indulnak, így megértésükhöz elegendő csupán a Delphi ismerete, így bárki nyugodtan nekifoghat a DirectX-szel való ismerkedésnek.

Mielőtt belevágnánk, egy fontos lépést meg kell tennünk: ahhoz, hogy a DirectX-et tudjuk Delphi-ből programozni szükségünk lesz a DirectX DLL-jeiben lévő függvények, interfészek deklarációjára, méghozzá Delphi-ben, vagyis Pascal nyelven. Ha rendelkezünk a Microsoft DirectX SDK-val, akkor ugyan rendelkezésünkre állnak ezek a deklarációk, de csak C nyelven. A probléma leküzdésében nagy segítséget kapunk a http://www.delphi-jedi.org/DelphiGraphics/ web címen (a cikk írásakor a cím még létezett!). Itt találunk egy olyan ingyenesen letölthető ZIP-et, melyben rendelkezésre állnak a DirectX-hez szükséges Delphi-s Pascal állományok. Cikksorozatunk mellékelt példáihoz is ezeket használjuk, de nem mellékeljük őket minden cikkünkhöz, így ezek kipróbálásához is szükséges lesz ezen állományok letöltése.

Szükség van persze még egy fontos előkészítő lépésre: a gépünkre legyen feltelepítve a DirectX.

A cikkek készítésekor a DirectX 8.1-es verziója volt a legfrissebb, így ezt használtuk. A cikkek jellegénél fogva viszont bármely más DirectX verzióval is használhatók a példák, szükség esetén igen kis változtatásokra van csak szükség, például TD3DAdapter_Identifier8 struktúra nevében lévő 8-as szám nyilván más verzióban változik.

A DirectX-ről nagyon sok és hosszú elméleti cikket készíthetnénk, mesélhetnék róla, hogy mi is az, mire jó. Ezt a részt viszont hagyjuk ki és álljunk neki rögtön a gyakorlati példák készítésének. Későbbiek folyamán, amikor szükséges elméleti anyag ismerete az adott probléma megoldásához, akkor ott majd teszünk egy kis kitérőt, most viszont nézzük a gyakorlatot.

A delphi-jedi.org letöltött unit-okat célszerű elhelyezni egy olyan könyvtárba, ahonnan minden projektből elérhetjük azokat. Másoljuk be például a Delphi Lib könyvtárába (C:\Program Files\Borland\Delphi6\Lib).

Amire szükségünk lesz még az az, hogy a saját unit-unkban a DirectXGraphics unit-ra hivatkozzunk.

Ahhoz, hogy saját alkalmazásunk kapcsolatot létesítsen a DirectX-szel, szükségünk lesz egy IDirect3D8 interfészre.
    FD3D: IDirect3D8;
Első példánkban csupán annyit teszünk, hogy a kapcsolat létrehozása után lekérdezzük az aktuális képernyő felbontást és még egy-két jellemző adatot. Ehhez szükségünk lesz egy TD3DDisplayMode típusú struktúrára.
    FDisplayMode: TD3DDisplayMode;
A lekérdezést a Button1 OnClick-nél végezzük el.
procedure TForm1.Button1Click(Sender: TObject);
begin
Kapcsolatot a Direct3DCreate8 függvény meghívásával tudunk létrehozni. Ez elvégzi helyettünk a szükséges műveleteket, majd visszatérési értékként egy IDirect3D8 interfészt ad, amennyiben az inicializálás sikeres volt.
  FD3D:=Direct3DCreate8(D3D_SDK_VERSION);
Ezt célszerű is ellenőriznünk, mivel hiba esetén amúgy sem tudjuk a DirectX-et programozni. Ha a Direct3DCreate8 függvény null értéket ad vissza, akkor hiba történt a DirectX inicializálása közben, így nem tudjuk azt használni.
  if Assigned(FD3D) then begin
Az IDirect3D8 interfész rendelkezik egy GetAdapterDisplayMode függvénnyel. Ennek segítségével kérdezhetjük le a számítógépben lévő monitorkártyák információit. Első paraméterként egy számot kell megadni, mely a monitorkártya sorszámára utal. Ha itt a D3DADAPTER_DEFAULT konstanst használjuk, akkor az elsődleges monitorkártya adatait kapjuk meg. Hogy hány monitorkártya van a gépben, azt a GetAdapterCount függvény adja meg. Második paraméterként egy TD3DDisplayMode típusú változót kell megadni, melyben az eredményt kapjuk vissza.
    if not Failed(FD3D.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, FDisplayMode)) then begin
Ha a lekérdezés sikeres volt, akkor már csak a TD3DDisplayMode struktúra adatait kell értelmeznünk. A Width és Height mezőből megtudjuk a képernyő aktuális méretét pixelben.
      ListBox1.Items.Add('DisplayMode.Width: '+IntToStr(FDisplayMode.Width));
      ListBox1.Items.Add('DisplayMode.Height: '+IntToStr(FDisplayMode.Height));
A RefreshRate a képernyő frissítési frekvenciáját adja meg Hz-ben.
      ListBox1.Items.Add('DisplayMode.RefreshRate: '+IntToStr(FDisplayMode.RefreshRate));
Végül a Format-ból megtudhatjuk a színmélységgel kapcsolatos információt. Ha például 32 bites színmélységet állítunk be, akkor a visszatérési érték 22 lesz, mely a D3DFMT_X8R8G8B8 konstansnak felel meg, amiből viszont következik, hogy egy olyan 32-bit RGB pixel forma áll rendelkezésünkre, melynél 8 bit van fenntartva minden szín csatornához. Az itt található értékekhez tartozó konstansokat az alábbi táblázat foglalja össze.
      ListBox1.Items.Add('DisplayMode.Format: '+IntToStr(FDisplayMode.Format));
    end;
  end;
end;
    D3DFMT_UNKNOWN		0
    D3DFMT_R8G8B8			20
    D3DFMT_A8R8G8B8		21
    D3DFMT_X8R8G8B8		22
    D3DFMT_R5G6B5			23
    D3DFMT_X1R5G5B5		24
    D3DFMT_A1R5G5B5		25
    D3DFMT_A4R4G4B4		26
    D3DFMT_R3G3B2			27
    D3DFMT_A8			28
    D3DFMT_A8R3G3B2		29
    D3DFMT_X4R4G4B4		30
    D3DFMT_A2B10G10R10		31
    D3DFMT_G16R16			34
    D3DFMT_A8P8			40
    D3DFMT_P8			41
    D3DFMT_L8			50
    D3DFMT_A8L8			51
    D3DFMT_A4L4			52
    D3DFMT_V8U8			60
    D3DFMT_L6V5U5			61
    D3DFMT_X8L8V8U8		62
    D3DFMT_Q8W8V8U8		63
    D3DFMT_V16U16			64
    D3DFMT_W11V11U10		65
    D3DFMT_A2W10V10U10		67
    D3DFMT_D16_LOCKABLE	70
    D3DFMT_D32			71
    D3DFMT_D15S1			73
    D3DFMT_D24S8			75
    D3DFMT_D16			80
    D3DFMT_D24X8			77
    D3DFMT_D24X4S4		79
    D3DFMT_VERTEXDATA		100
    D3DFMT_INDEX16		101
    D3DFMT_INDEX32		102
    D3DFMT_FORCE_DWORD	0xFFFFFFFF



Cikksorozat

#IDKategóriaCikk címeSorozat
3916WindowsA javascript nyelv bemutatása1. rész
3946WindowsJavascript változók és operátorok2. rész
3975WindowsKódvezérlés JScript-ben3. rész
4004WindowsFüggvények és objektumok4. rész
4036WindowsFejlett funkciók a JavaScript nyelvben5. rész
4066WindowsFejlett funkciók a JavaScript nyelvben - folytatás6. rész
4116WindowsReguláris kifejezések7. rész
4145WindowsReguláris kifejezések - folytatás8. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 547. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |