Platform SDK: DirectX

ファイルからのエフェクトの読み込み

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic は、エフェクト ファイルをサポートしていない。

[C++]

DirectX SDK で提供される Force Editor、または同じファイル フォーマットを使用する別のアプリケーションを使って、エフェクトをデザインし、ファイルに保存することができる。実行時にこれらのエフェクトを読み込むことで、任意のアプリケーションで使用することができる。

エフェクトを読み込むには、IDirectInputDevice7::EnumEffectsInFile メソッドを呼び出す。デフォルトでは、列挙は標準の DirectInput エフェクトに限定されるが、DIFEF_INCLUDENONSTANDARD フラグを設定することで、これ以外のエフェクトを列挙できる。また、DIFEF_MODIFYIFNEEDED フラグを設定すると、必要に応じて、エフェクトがデバイスに対して作用するように、各エフェクトのパラメータの変更を DirectInput に指示することができる(たとえば、2 つの軸に対して作成されたエフェクトを、単一軸の車のハンドルに対して作用させることができる)。

次のサンプル コードでは、最初の 3 つの標準エフェクトがファイルから読み込まれ、DirectInputEffect オブジェクトとして作成される。

// g_lpdid7 は、フォース フィードバック デバイスへの有効な 
// IDirectInputDevice7 ポインタである。

// エフェクト ポインタの配列は、グローバルに宣言される。
LPDIRECTINPUTEFFECT pEff[3];
.
.
.
g_lpdid7->EnumEffectsInFile("FEdit1.ffe", EnumEffectsInFileProc,
NULL, DIFEF_MODIFYIFNEEDED);
.
.
.

以下のコールバック プロシージャは、DIENUM_STOP が返されるまで、エフェクト ファイル内のエフェクトごとに呼び出される。

BOOL CALLBACK EnumEffectsInFileProc(LPCDIFILEEFFECT lpdife, 
        LPVOID pvRef)
 
    {
HRESULT hr;
static int  i;
 
//  DIFEF_MODIFYIFNEEDED フラグが渡されたので、
// エフェクト パラメータは lpdife->lpDiEffect に変更される。

hr = g_lpdid7->CreateEffect(lpdife->GuidEffect, 
lpdife->lpDiEffect,
&pEff[i], NULL);
if (FAILED(hr))
        {
// エラー処理
        }
if (++i > 2) return DIENUM_STOP;
else return DIENUM_CONTINUE;
    }