Microsoft DirectX 8.0 (C++)

ステップ 3 : ディスプレイのレンダリング

頂点バッファに頂点が格納されたので、次はディスプレイをレンダリングする。ディスプレイのレンダリングでは、まずバック バッファを青色にクリアした後、BeginScene を呼び出す。

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0L );
g_pd3dDevice->BeginScene();

頂点バッファの頂点をレンダリングするには、いくつかのステップが必要である。まず、ストリーム ソースを設定する。この場合は、ストリーム 0 を使用する。ストリームのソースは、IDirect3DDevice8::SetStreamSource を呼び出して指定する。

g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );

SetStreamSource の最初のパラメータは、Microsoft® Direct3D® にデバイス データ ストリームのソースを指示する。2 番目のパラメータは、データ ストリームにバインドする頂点バッファである。3 番目のパラメータは、コンポーネントのサイズをバイト単位で指定する。上記のサンプル コードでは、CUSTOMVERTEX のサイズがコンポーネントのサイズとして使用されている。

次のステップは、IDirect3DDevice8::SetVertexShader を呼び出して、使用する頂点シェーダを Direct3D に通知することである。完全なカスタム頂点シェーダは高度なトピックであるが、ほとんどの場合、頂点シェーダに送られるのは単なる FVF コードである。これによって、処理する頂点のタイプが Direct3D に通知される。次のサンプル コードでは、頂点シェーダを設定している。

g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );

SetVertexShader のパラメータは、使用する頂点シェーダへのハンドルだけである。このパラメータの値として、IDirect3DDevice8::CreateVertexShader から返るハンドルまたは FVF コードを使用できる。ここでは、D3DFVF_CUSTOMVERTEX によって定義された FVF コードを使用している。

頂点シェーダの詳細については、「頂点シェーダ」を参照すること。

次のステップは、次のサンプル コードのように、IDirect3DDevice8::DrawPrimitive を使って頂点バッファの頂点をレンダリングすることである。

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

DrawPrimitive が受け取る最初のパラメータは、描画するプリミティブのタイプを Direct3D に指示するフラグである。このサンプルでは、D3DPT_TRIANGLELIST フラグを使って、三角形のリストを指定している。2 番目のパラメータは、ロードする最初の頂点のインデックスである。3 番目のパラメータは、描画するプリミティブの数を指定する。このサンプルでは、三角形を 1 つだけ描画するので、この値は 1 に設定される。

さまざまなプリミティブの詳細については、「3D プリミティブ」を参照すること。

最後のステップは、シーンを終了し、バック バッファをフロント バッファに表示することである。次のサンプル コードにその処理を示す。

g_pd3dDevice->EndScene();
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

バック バッファをフロント バッファに表示すると、クライアント ウィンドウに 3 種類の色の点を持つ三角形が表示される。

このチュートリアルでは、頂点を使ってジオメトリ形状をレンダリングする方法を示した。「チュートリアル 3 : 行列の使い方」では、行列の概念とその使用方法について説明する。