Microsoft DirectX 8.0 (C++) |
周期的エフェクトは波形エフェクトである。Microsoft® DirectInput® では、以下の波形を定義している。
周期的エフェクトにはエンベロープを適用することができる。「フォース フィードバックの基本概念」の例を参照すること。
周期的エフェクトのフェーズとは、エフェクトが始まる波形上のポイントである。フェーズは 0 から 35,999 までの範囲で、実角度の 100 倍で計測される。次の表は、選択したフェーズ値 (度単位) がさまざまな波形上のどこにあるかを示している。Max は波の最上部 (+) または最底部 (-) であり、Mid は波の中間ポイントである。これらの位置では、どちらの方向にもフォースは適用されていない。
波形 | 0 | 90 | 180 | 270 |
---|---|---|---|---|
正方形 | +Max | +Max | -Max | -Max |
サイン カーブ | Mid | +Max | Mid | -Max |
三角形 | +Max | Mid | -Max | Mid |
アップ鋸歯 | -Max | -Max/2 | Mid | +Max/2 (サイクルの反復の直前に +Max に達する) |
ダウン鋸歯 | +Max | +Max/2 | Mid | -Max/2 (サイクルの反復の直前に -Max に達する) |
ドライバにより、フェーズ値が直近のサポート値に丸められることがある。たとえば、ドライバによっては、サインエフェクトで 0 と 9,000 (コサインを生成するために) しかサポートせず、その他のエフェクトで 0 と 18,000 しかサポートしていないこともある。
周期的フォースを生成するには、IDirectInputDevice8::CreateEffect メソッドの rguid パラメータに次に挙げる値のどれか 1 つを渡す。
DIEFFECTINFO 構造体のメンバ dwEffType (DIEFT_GETTYPE(dwEfftype)) の下位バイトが DIEFT_PERIODIC に等しい場合は、IDirectInputDevice8::EnumEffects メソッドで取得したほかの任意の GUID を渡してもよい。この方法を使えば、業者が設計したハードウェア特有のフォースを使用することができる。たとえば、スティックを小さい円形に回転する周期的エフェクトをサポートしているハードウェア デバイスなどがある。
周期的エフェクトのタイプ固有構造体は DIPERIODIC である。
周期的エフェクトの "周期" (DIPERIODIC.dwPeriod) と "サンプリング間隔" (DIEFFECT.dwSamplePeriod) を混同しないように注意すること。周期は 1 つの波のサイクル全体を実行するのに要する時間である。サンプリング間隔は、すべてのエフェクトと同様に、マグニチュードを実際に調整する間隔の最小時間である。