Skip to main content

Windows XP でのポインタの移動特性

最終更新日: 2002年 10月 31日


目次

移動特性パフォーマンスの概要 移動特性パフォーマンスの概要
Windows XP でのポインタの移動特性の基本理論 Windows XP でのポインタの移動特性の基本理論
正確な移動 正確な移動
Windows XP の移動特性アルゴリズムの概要 Windows XP の移動特性アルゴリズムの概要
リソース リソース


移動特性パフォーマンスの概要

このペーパーでは、ハードウェア エンジニア、ドライバ開発者、テスト マネージャ、およびハードウェア メーカー向けに、Microsoft Windows XP でのポインタ移動特性のアルゴリズムを説明します。新しいアルゴリズムは、以前のオペレーティング システムでの、移動特性アルゴリズムの制限とフォールバックの一部を解決します。この主な機能により、ポインタの速度設定にかかわらず、より滑らかなポインタの移動が得られます。

Windows XP でのポインタの移動特性の目的

Windows XP でのポインタの移動特性の目標は、以前の問題を修正することと、下記の事項です。

  • ピクセル レベルでのポインタ精度を保ちつつ、高解像度で高 dpi の画面の効率的なナビゲーションを可能にする。

  • ポインタの移動を滑らかにする。

  • 個々の X-Y 座標の代わりに、合計ベクトルに基づいて、速度入力にゲイン ファクタを適用する。

  • オブジェクトの選択中、移動を最小化し、1 ピクセル離れたオブジェクトをユーザーが選択できるようにする。

  • [詳細設定] ボタンを削除し、[マウスのプロパティ] ダイアログ ボックス内のユーザー インターフェイスを簡略化するため、加速と速度の統合スライダを設計する。

Windows XP より前の移動特性に関する問題

Windows XP より前、ポインタの移動特性には、次のような問題がありました。

  • 加速は、X 軸と Y 軸に別々に適用され、したがって、最も大きな軸にバイアスがかかります。たとえば、移動特性を有効にすると、ポインティング デバイスを完全な円形で移動しても、得られる図形は、円というより、角が丸まった正方形に見えます。

  • 高解像度で高 dpi の画面を持つユーザーは、より速いポインタ速度を必要とし、古い移動特性は、すべてのピクセルを対象にできる速いポインタ速度と細かな精度を処理するようセットアップされていません。高速ポインタ設定では、ポインタは、速度にかかわらずピクセルをスキップし、細かな精度の選択が不可能になります。

  • 大多数のユーザーは、この文脈での「加速」という用語の意味を理解していないので、加速と速度を設定するためのユーザー インターフェイスは混乱を招きます。

Windows XP でのポインタの移動特性の基本理論

Windows XP では、マウスの実際の速度と画面上のポインタの実際の速度を関連付ける、伝達関数を設計しました。次に、伝達されたポインタ データを計算するため、アルゴリズムが伝達関数に適用されました。伝達関数に物理的な意味を与えて設計を向上させるため、システムの任意の単位はまず、物理単位に変換されました。

物理単位への関連付け

マウスの任意の単位は、ミッキーと呼ばれるマウスの X または Y の値を取得し、マウス バスの更新率とポインティング デバイスの解像度を使用して拡大縮小することにより、物理単位に変換されました。

vmouseequation

USB マウスの通常のバス更新率は 125 Hz で、通常のポインタ解像度は 400 ミッキー/インチです。マウスから来るパケットごとのミッキーのサイズは通常、0 から +50 の範囲です。ただし、+127 まで、パケット構造で許可されます。たとえば、標準の USB マウスで、1 パケットごとに 3 ミッキーの一定の出力がある場合、そのデバイスの物理速度は、0.9375 または約 1 インチ/秒です。

任意の単位から物理単位に画面を変換するため、下記の関係を使用しました。

vpointerequation

たとえば、1024 x 769 で動作する通常の 17 インチ モニタは、解像度が約 80 dpi でリフレッシュ レートが約 75 Hz です。したがって、データが前の例 (3 ミッキー/パケット) から変わっていない場合 (移動特性のない既定の設定)、ポインタは、画面上を物理的に 2.8 インチ/秒で移動します。したがって、USB マウスと 17 インチの画面が上記の仕様の場合、物理から仮想へのゲインは 3 (2.8/9.375) です。言い換えると、画面上のポインタの物理速度は、マウスの物理速度より 3 倍速いことになります。

親伝達関数

物理単位が確立されると、親伝達関数が、有用性調査に基づいて構築されました。親伝達関数は、下記のグラフに示すとおりです。

gg463319.mousePointer(ja-jp,msdn.10).gif

伝達関数は、5 つのポイントから成ります。5 つのポイントのうち 4 つは、マウス速度スペクトルの最低域に存在します。4 インチの制限を越える速度は、線形補外されています。

曲線のファミリ

曲線のファミリは、下記のグラフで示すように、さまざまな速度と加速プロパティの伝達関数を生成するため、親曲線から補外されます。ユーザーは、[マウスのプロパティ] ダイアログ ボックスの [ポインタ オプション] タブでポインタ速度スライダを使用して、これらの曲線のいずれかを選択します。

gg463319.transFunc(ja-jp,msdn.10).gif

正確な移動

下図では、伝達関数グラフの重要な変曲点の、より詳細なビューを示します。

gg463319.pointer3(ja-jp,msdn.10).gif

最初の線分の傾斜は、1 ゲイン未満の physical-to-screen ゲインを表し、正確な移動と、画面上のすべてのピクセルを対象にする機能 (サブピクセレーション) を提供します。サブピクセレーションは、ポインタが画面上で移動するより物理的に遠くへ、ユーザーがマウスを移動しなければならないとき、高精度および低速での安定性を提供します。サブピクセレーションを行うには、マウス カウントを割り算した余りを保持し、次のカウントに足す必要があります。

下図は、同じクローズアップを、曲線のファミリについて示します。注意すべき最も重要な点は、速い曲線または遅い曲線のいずれを見ても、ポイントの最初のセットがサブピクセレーション側に寄っている点です。これは、マウス速度の設定にかかわらず、ユーザーが画面上のすべてのピクセルを常に対象にできることを意味します。

gg463319.pointer4(ja-jp,msdn.10).gif

加速の計算

伝達関数はルックアップ テーブルとして格納され、格納された値の間のポイントは補間されます。マウス X と Y の変換値の参照に使用される数値は、受信 X と Y のベクトルの大きさです。Windows XP より前に使用していた移動特性アルゴリズムでは、X と Y から加速乗数を独立して計算していました。したがって、ポインタの移動は、より大きな軸の方にバイアスがかかり、完全な円ではなく、角が丸まった正方形となりました。この問題を解決するため、現在、X と Y のベクトルの大きさは、加速乗数の計算に使用され、次に、X と Y のデータの変換に適用されます。

固定小数点の計算と数値の限界

Windows XP の移動特性ポインタ アルゴリズムは、ring0 と ring3 の間に存在します。 したがって、浮動小数点の計算は、容易に利用できません。また、Windows XP の移動特性では、割り算と余りを使用する必要があったので、固定小数点 (16.16) の整数計算が使用されました。これは、サブピクセレーションと、ポインタのさらに滑らかな移動のために重要です。したがって、2 つの積の結果として生じる最大の数値は、2^16 (65536) です。オーバーフローすることもあり得ますが、その可能性は低いです。将来、オーバーフローが問題となった場合、移動特性コード内の固定小数点の定数は、20.12 の固定小数点形式をサポートするよう容易に変更できます。

伝達関数を変更する

親曲線の値は、レジストリ設定に格納されています。曲線を変更したりカスタマイズしたりすることは可能で、GUI で容易に行うことができます。これらの特性は、さまざまなニーズを満たすため、プログラマやユーザーが、ポインタ移動の制御をカスタマイズできるようにする必要があります。X と Y の 5 つの組が、16.16 の固定小数点形式で格納されます。

Windows XP の移動特性アルゴリズムの概要

下記の一覧は、Windows XP で使用される移動特性アルゴリズムを順に要約したものです。

  1. システムが起動するか、マウス速度の設定が変更されると、変換テーブルは再計算されて格納されます。親の値は、物理単位でレジストリに格納されており、それらは、システム パラメータに基づいて拡大縮小することにより、仮想単位に変換されます。システム パラメータとは、画面のリフレッシュ レート、画面の解像度、マウスのリフレッシュ レート (USB 125 Hz)、および既定のマウス解像度 (400 dpi) です。(これはポインタのパラメータを実際に反映するため、将来変わる場合があります。) その後、各曲線は、[マウスのプロパティ] ダイアログ ボックスの [ポインタ オプション] タブにあるポインタ スライダの速度設定に基づいて、速度が調整されます。

  2. 受信したマウスの X と Y の値は、固定小数点 16.16 形式にまず変換されます。

  3. X と Y の値の大きさが計算され、ルックアップ テーブル内の加速値を参照するため使用されます。

  4. ルックアップ テーブルは 6 つのポイントから成り、1 つ目は [0,0] です。各ポイントは変曲点を表し、参照値は通常、変曲点間に存在します。したがって、加速乗数値は補間されます。

  5. 前の計算の余りは、X と Y の両方に足されます。次に、加速乗数が、値を変換するため適用されます。余りは、次の受信値に足すため格納されます。このようにして、サブピクセレーションは有効になります。

  6. 値が送信され、ポインタが移動します。

  7. [マウスのプロパティ] ダイアログ ボックスの [ポインタ オプション] タブのマウス速度スライダの下にある [ポインタの精度を高める] チェック ボックスをオフにして、この機能を無効にした場合、システムは、加速が行われなかったときと同様に動作します。これらの機能はすべてバイパスされ、システムは生のマウスの値を受け取り、速度スライダの設定に基づいたスカラ セットをそれらの値に乗算します。

リソース

ご質問:

  • この記事の技術情報に関するご質問については、inputdev@microsoft.com まで電子メール (英語) をお送りください。件名は「Pointer Ballistics for Microsoft Windows XP」としてください。

リソース:

評価してください: