Platform SDK: DirectX |
DICONDITION 構造体は、DIEFT_CONDITION としてマークされているエフェクトのタイプ固有の情報を格納する。
あるエフェクトに関する DICONDITION 構造体の配列へのポインタは、DIEFFECT 構造体の lpvTypeSpecificParams メンバに渡される。配列の要素数は、エフェクトに関係付けられた軸の数に等しくなければならない。
typedef struct DICONDITION { LONG lOffset; LONG lPositiveCoefficient; LONG lNegativeCoefficient; DWORD dwPositiveSaturation; DWORD dwNegativeSaturation; LONG lDeadBand; } DICONDITION, *LPDICONDITION; typedef const DICONDITION *LPCDICONDITION;
デバイスが正と負に分かれた係数をサポートしていない場合、lNegativeCoefficient 値は無視され、lPositiveCoefficient 値が正負両方の係数として使用される。
デバイスがフォースの飽和をサポートしない場合、このメンバ値は無視される。
デバイスがフォースの飽和値をサポートしない場合、このメンバ値は無視される。
デバイスが正と負に分かれた飽和値をサポートしていない場合、dwNegativeSaturation 値は無視され、dwPositiveSaturation 値が正負両方の飽和値として使用される。
条件のタイプが異なれば、パラメータの意味も異なるが、基本的な考え方は、条件に起因するフォースは、A(q - q0) に等しくなるということである。ここで、A は、スケーリング係数、q はある距離であり、q0 は、その距離に対する中立値である。
上記の単純な式は、デッドバンドのゼロ以外の値が指定された場合は調整しなければならない。距離が lOffset - lDeadBand より小さければ、生成されるフォースは、次の式で示される。
force = lNegativeCoefficient * (q - (lOffset - lDeadBand))
同様に、距離が lOffset + lDeadBand より大きければ、生成されるフォースは、次の式で示される。
force = lPositiveCoefficient * (q - (lOffset + lDeadBand))
スプリング条件は、軸の位置を距離として使用する。
ダンパ条件は、軸の速度を距離として使用する。
慣性条件は、軸の加速度を距離として使用する。
配列に含まれる DICONDITION 構造体の数が、エフェクトに対する軸の数と等しい場合、第 1 の構造体は第 1 の軸に適用され、第 2 の構造体は第 2 の軸に適用される。それ以降も同様の対応関係を保つ。たとえば、2 軸のスプリング条件で、両方の DICONDITION 構造体で lOffset がゼロに設定されていれば、ジョイスティックの自動センタリング スプリングと同じエフェクトが得られる。このように、1 つの条件がそれぞれの軸に対して定義されている場合、エフェクトは回転しない。
2 つ以上の軸を持つエフェクトに対して DICONDITION 構造体 が 1 つの場合、DICONDITION 構造体のパラメータが有効となる方向は、DIEFFECT 構造体の rglDirection フィールドに渡される方向パラメータによって決定される。たとえば、45 度 (極座標で) 回転する摩擦条件は、北東から南西への方向のジョイスティックの動きには抵抗するだろうが、北西から南東への方向のジョイスティックの動きにはなんら作用を及ぼさないだろう。
Windows NT/2000 :Windows 2000 が必要。
Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
ヘッダー : dinput.h で宣言。