Platform SDK: DirectX

ステップ 5.1 : シーンを更新する

[Visual Basic]

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

[C++]

サンプル Triangle のアプリケーション定義関数 Render3DEnvironment は、呼び出されるとすぐに、App_FrameMove (別のアプリケーション定義関数) を呼び出す。App_FrameMove 関数は、fTimeKey パラメータにより関数に渡された内部カウント値に基づいて、y 軸を中心とする回転を反映させるため、Direct3D がジオメトリに適用するワールド行列を更新するだけである。回転は、1 フレームにつき一度だけ適用されるため、結果として、モデルが所定の位置で回転しているように見える。

HRESULT App_FrameMove( LPDIRECT3DDEVICE7 pd3dDevice, FLOAT fTimeKey )
{
    // この単純なチュートリアルでは、三角形を y 軸を中心として回転させる。
    // そのためには、新しいワールド座標トランスフォームとして、回転を決定する 4×4 行列を設定するだけである。
    D3DMATRIX matSpin;
    matSpin._11 = matSpin._22 = matSpin._33 = matSpin._44 = 1.0f;
    matSpin._12 = matSpin._13 = matSpin._14 = matSpin._41 = 0.0f;
    matSpin._21 = matSpin._23 = matSpin._24 = matSpin._42 = 0.0f;
    matSpin._31 = matSpin._32 = matSpin._34 = matSpin._43 = 0.0f;
    
    matSpin._11 = (FLOAT)cos( fTimeKey );
    matSpin._33 = (FLOAT)cos( fTimeKey );
    matSpin._13 = -(FLOAT)sin( fTimeKey );
    matSpin._31 = (FLOAT)sin( fTimeKey );
 
    pd3dDevice->SetTransform( D3DTRANSFORMSTATE_WORLD, &matSpin );
 
    return S_OK;
}

もちろん、実際のアプリケーションでは、単一のモデルに対して回転を適用する以外にも多数の処理を行う。(回転行列の詳細については、「3D トランスフォーム」の「回転」を参照すること)。

シーンのジオメトリを更新したら、次はそのジオメトリをレンダリング ターゲット サーフェスにレンダリングする。サンプル Triangle では、この処理を「ステップ 5.2 : シーンをレンダリングする」で行う。