Platform SDK: DirectX

エフェクト方向設定の実例

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。

[C++]

単一軸エフェクト

単一軸エフェクトの方向の設定は、実際に指定するものが何もないので、極めて単純である。DIEFF_CARTESIAN フラグを DIEFFECT 構造体の dwFlags メンバに設定し、値がゼロの単一の LONG を指す rglDirection を設定する。

次のコードは、x 軸エフェクトの方向と軸パラメータを設定する例である。

DIEFFECT eff;
LONG   lZero = 0;            // 方向なし。
DWORD  dwAxis = DIJOFS_X;        // x 軸エフェクト。
 
ZeroMemory(&eff, sizeof(DIEFFECT));
eff.cAxes = 1;               // 1 つの軸。
eff.dwFlags =
DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;   // フラグ
eff.rglDirection = &lZero;         // 方向。
eff.rgdwAxes = &dwAxis;          // エフェクトの軸。

極座標での 2 軸エフェクト

極座標 2 軸エフェクトの方向の設定は少し複雑である。DIEFF_POLAR フラグを dwFlags に設定し、2 つの LONG からなる 1 つの配列を指すように rglDirection を設定する。こうすると、この配列の第 1 の要素が、エフェクトが来る方向になる。この配列の第 2 の要素はゼロでなくてはならない。

次のコードは、東から来る 2 軸エフェクトの方向と軸パラメータを設定する例である

DIEFFECT eff;
LONG   rglDirection = { 90 * DI_DEGREES, 0 }; // 北から 90 度、
// すなわち東。
DWORD  rgdwAxes[2] = { DIJOFS_X, DIJOFS_Y }; // x 軸と y 軸
 
ZeroMemory(&eff, sizeof(DIEFFECT));
eff.cAxes = 2;                 // 2 つの軸
eff.dwFlags =
DIEFF_POLAR | DIEFF_OBJECTOFFSETS;     // フラグ。
eff.rglDirection = rglDirection;        // 方向
eff.rgdwAxes = rgdwAxes;            // エフェクトの軸

デカルト座標での 2 軸エフェクト

デカルト座標 2 軸エフェクトの方向の設定は少し複雑である。DIEFF_CARTESIAN フラグを dwFlags に設定し、ここでも、2 つの LONG からなる 1 つの配列を指すように rglDirection を設定する。このときの配列の第 1 要素は方向ベクトルの x 座標で、第 2 要素は y 座標である。

次のコードは、東から来る 2 軸エフェクトの方向と軸パラメータを設定する例である

DIEFFECT eff;
LONG   rglDirection = { 1, 0 };        // 正値 x = 東
DWORD  rgdwAxes[2] = { DIJOFS_X, DIJOFS_Y }; // x 軸と y 軸
 
ZeroMemory(&eff, sizeof(DIEFFECT));
eff.cAxes = 2;                 // 2 つの軸
eff.dwFlags =
DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;   // フラグ
eff.rglDirection = rglDirection;        // 方向
eff.rgdwAxes = rgdwAxes;            // エフェクトの軸