Platform SDK: DirectX

ステップ 5.2 : シーンをレンダリングする

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

目的の動きを反映するようにジオメトリの更新を終了すると、シーンのレンダリングを行うことができる。サンプル Triangle では、典型的な方法を採用している。サンプルの Render3DEnvironment 関数から呼び出されるアプリケーション定義関数 App_Render は、まず、ビューポートをクリアする。

HRESULT App_Render( LPDIRECT3DDEVICE7 pd3dDevice, D3DRECT* prcViewRect )
{
    // ビューポートを青色にクリアする。
    pd3dDevice->Clear( 1UL, prcViewRect, D3DCLEAR_TARGET, 0x000000ff,
                       0L, 0L );

上記のコードでは、IDirect3DDevice7::Clear メソッドを呼び出してビューポートをクリアしている。Clear メソッドが受け取る最初の 2 つの引数は、レンダリング ターゲット サーフェス上のクリア対象領域を記述する矩形の配列のアドレス、およびその配列からクリアする矩形の個数をメソッドに知らせる値である。通常、レンダリング ターゲット全体を覆う 1 つの矩形を使用する。3 番目のパラメータは、メソッドの動作を決定する。レンダリング ターゲット サーフェス、関連深度バッファ、ステンシル バッファ、またはこの 3 つの任意の組み合わせをクリアすることができる。このチュートリアルでは、深度バッファを使用しないので、D3DCLEAR_TARGET 以外のフラグは使用しない。最後の 3 つのパラメータは、レンダリング ターゲット、深度バッファ、ステンシル バッファのクリア値を反映するように設定する。サンプル Triangle では、レンダリング ターゲット サーフェスのクリアカラーを青に設定している。残りのパラメータは、このチュートリアルでは使用しないため、コードではゼロを設定している。Clear メソッドは、対応するフラグが存在しない場合はパラメータを無視する。

ビューポートをクリアした後、サンプル Triangle は次に示すように、レンダリングの開始を Direct3D に知らせ、シーンをレンダリングし、レンダリングの終了を知らせる。

    // シーンを開始する。
    if( FAILED( pd3dDevice->BeginScene() ) )
        return E_FAIL;
 
    // DrawPrimitive() コールを使用して、三角形を描画する。
    // チュートリアルでは、以降ポリゴンを描画するさまざまな呼び出しを
    // 詳しく紹介していく。
    pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
                               g_pvTriangleVertices, 6, NULL );
 
    // シーンを終了する。
    pd3dDevice->EndScene();
 
    return S_OK;
}

IDirect3DDevice7::BeginScene および IDirect3DDevice7::EndScene メソッドは、レンダリングの開始時および終了時をそれぞれシステムに知らせる。レンダリング メソッドは、この 2 つのメソッドの呼び出しの間でしか呼び出すことができない。レンダリング メソッドが正常に終了しなかった場合でも、BeginScene を再度呼び出す前に、EndScene を呼び出す必要がある。

シーンをオフスクリーン レンダリング ターゲットにレンダリングすると、ユーザーのディスプレイを更新することが可能になる。チュートリアルのサンプルでは、この処理を「ステップ 5.3 : ディスプレイを更新する」で行う。