Direct3D, lyhyesti D3D, on Microsoftin kehittämä ohjelmointirajapinta kolmiulotteiseen ohjelmointiin. Kirjan tässä osassa opastetaan D3D:n käyttöön. Kaikissa esimerkeissä käytetään C++:aa.
Laitteen luominen
muokkaaTässä pieni esimerkki, jolla hankitaan osoitin Direct3D-rajapintaan, jonka jälkeen funktiolla GetAdapterDisplayMode() otetaan oletusnäytönohjaimelta (D3DADAPTER_DEFAULT) tiedot käytössä olevasta näyttötilasta Direct3D-näyttötilamuuttujaan D3DDM. Kun tiedot on hankittu, niitä käytetään D3DPP-muuttujassa (Direct3D Present Parameters) kertomaan Direct3D-rajapinnalle millaisessa näyttötilassa Direct3D-laite tulee toimimaan. Ohjelmat voivat asettaa nämä tiedot myös itse, mutta koska esimerkki toimii ikkunoituna ruudulla on tiedot siis hankittava erikseen.
// // Globaaleja muuttujia. // LPDIRECT3D8 g_pD3D; // Globaali osoitin Direct3D-objektiin LPDIRECT3DDEVICE8 g_pD3DLaite; // Globaali osoitin D3D-laitteeseen. // // Nimi : LuoD3D() // Kuvaus: Luo liittymän Direct3D-laitteeseen. // Olettaa että g_hWnd sisältää // kahvan ohjelman ikkunaan. // HRESULT LuoD3D( void ) { HRESULT hr = S_OK; // palautusarvot // // Nollataan Direct3D:n käyttämät osoittimet. // g_pD3D = NULL; g_pD3DLaite = NULL; // // Luodaan Direct3D-objekti, joka toimii liittymänä // Direct3D-rajapintaan. // g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ); // // Jos liittymää ei saatu on g_pD3D-osoitin nolla. // if( g_pD3D == NULL ) return S_FAIL; // // Hankitaan Direct3D-rajapinnalta tiedot nykyisestä // näyttötilasta ja luodaan niiden avulla Direct3D- // laite. // D3DDISPLAYMODE D3DDM; g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &D3DDM ); // // Asetetaan laitteelle tiedot siitä kuinka kuva // tulee piirtää ruudulle. // D3DPRESENT_PARAMETERS D3DPP; ZeroMemory( &D3DPP, sizeof( D3DPP ) ); // muistin nollaus D3DPP.Windowed = TRUE; D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD; D3DPP.BackBufferFormat = D3DDM.Format; D3DPP.EnableAutoDepthStencil = TRUE; D3DPP.AutoDepthStencilFormat = D3DFMT_D16; // // Luodaan Direct3D-laite yllä annettujen tietojen // mukaan. // hr = g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &D3DPP, &g_pD3DLaite ); // // Palautetaan CreateDevice()-funktion palautusarvo. // Se kertoo suoraan onnistuiko laitteen hankkiminen. // return hr; }