次の方法で共有


DICONDITION

DIEFT_CONDITION のマークが付けられたエフェクトの種類固有の情報を指定します。

エフェクトに対する DICONDITION 構造体の配列へのポインターが、DIEFFECT 構造体の lpvTypeSpecificParams メンバーによって渡されます。配列内の要素数は 1 つ、またはエフェクトに関連した軸の数と等しいことが必要です。

typedef struct DICONDITION {
    LONG lOffset;
    LONG lPositiveCoefficient;
    LONG lNegativeCoefficient;
    DWORD dwPositiveSaturation;
    DWORD dwNegativeSaturation;
    LONG lDeadBand;
} DICONDITION, *LPDICONDITION;

メンバ

  • lOffset
    条件のオフセット (- 10,000 から 10,000 の範囲内)。
  • lPositiveCoefficient
    オフセットの正の側での係数定数 (- 10,000 から 10,000 の範囲内)。
  • lNegativeCoefficient
    オフセットの負の側での係数定数 (- 10,000 から 10,000 の範囲内)。デバイスが正と負の係数を別々にサポートしていない場合、lNegativeCoefficient の値は無視され、lPositiveCoefficient の値が正と負の両方の係数として使用されます。
  • dwPositiveSaturation
    オフセットの正の側での最大フォース出力 (0 から 10,000 の範囲内)。 デバイスがフォースの飽和をサポートしていない場合、このメンバーの値は無視されます。
  • dwNegativeSaturation
    オフセットの負の側での最大フォース出力 (0 から 10,000 の範囲内)。 デバイスがフォースの飽和をサポートしていない場合、このメンバーの値は無視されます。 デバイスが正と負の飽和を別々にサポートしてない場合、dwNegativeSaturation の値は無視され、dwPositiveSaturation の値が正と負の両方の飽和として使用されます。
  • lDeadBand
    条件がアクティブでない lOffset 周辺の領域 (0 から 10,000 の範囲内)。つまり、lOffset から lDeadBand を引いた値から、lOffset に lDeadBand を加えた値までの範囲では、条件はアクティブではありません。

解説 

条件の種類によってパラメーターの解釈は異なりますが、基本的な考え方としては、条件の結果として生じるフォースは、 A(q - q0) によって求められます。ここで、 A はスケール係数、 q はいずれかのメトリック、 q0 はそのメトリックの中立値です。

ゼロ以外のデッドバンドが指定されている場合は、前述の単純な公式を調整する必要があります。メトリックが lOffset - lDeadBand より小さい場合、発生するフォースは次の公式によって求められます。

force = lNegativeCoefficient * ( q - ( lOffset - lDeadBand))

同様に、メトリックが lOffset + lDeadBand より大きい場合、発生するフォースは次の公式によって求められます。

force = lPositiveCoefficient * ( q - ( lOffset + lDeadBand))

スプリング条件は、軸の位置をメトリックとして使用します。

ダンパー条件は、軸の速度をメトリックとして使用します。

慣性条件は、軸の加速度をメトリックとして使用します。

配列内の DICONDITION 構造体の数がエフェクトの軸の数と等しい場合は、最初の構造体が最初の軸に適用され、2 番目の構造体が 2 番目の軸に適用され、以下も同様です。たとえば、 両方の DICONDITION 構造体で lOffset を 0 に設定した 2 軸スプリング条件は、ジョイスティックの自動センタリング スプリングと同じ効果があります。このようにそれぞれの軸に対して条件を定義する場合、回転するエフェクトは使用できません。

複数の軸を含むエフェクトに対して DICONDITION 構造体がただ 1 つ存在する場合、DICONDITION 構造体のパラメーターが効力を及ぼす方向は、DIEFFECT 構造体の rglDirection フィールドで渡される方向パラメーターによって決まります。たとえば、摩擦条件を 45 度回転すると (極座標内で)、北東-南西の方向ではジョイスティックの動きに抵抗が生じますが、北西-南東の方向ではジョイスティックの動きに影響がありません。