Microsoft DirectX 8.0 (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[2] = { 90 * DI_DEGREES, 0 }; 
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[2] = { 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;                       // エフェクトの軸。