DirectX/Direct3D
Ulkoasu
< DirectX
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
[muokkaa | muokkaa wikitekstiä]Tä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;
}