Siirry sisältöön

DirectX/Direct3D

Wikikirjastosta

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; 
   }