Windows XP でのポインタの移動特性最終更新日: 2002年 10月 31日 ![]() 目次
移動特性パフォーマンスの概要このペーパーでは、ハードウェア エンジニア、ドライバ開発者、テスト マネージャ、およびハードウェア メーカー向けに、Microsoft Windows XP でのポインタ移動特性のアルゴリズムを説明します。新しいアルゴリズムは、以前のオペレーティング システムでの、移動特性アルゴリズムの制限とフォールバックの一部を解決します。この主な機能により、ポインタの速度設定にかかわらず、より滑らかなポインタの移動が得られます。 Windows XP でのポインタの移動特性の目的Windows XP でのポインタの移動特性の目標は、以前の問題を修正することと、下記の事項です。
Windows XP より前の移動特性に関する問題Windows XP より前、ポインタの移動特性には、次のような問題がありました。
Windows XP でのポインタの移動特性の基本理論Windows XP では、マウスの実際の速度と画面上のポインタの実際の速度を関連付ける、伝達関数を設計しました。次に、伝達されたポインタ データを計算するため、アルゴリズムが伝達関数に適用されました。伝達関数に物理的な意味を与えて設計を向上させるため、システムの任意の単位はまず、物理単位に変換されました。 物理単位への関連付けマウスの任意の単位は、ミッキーと呼ばれるマウスの X または Y の値を取得し、マウス バスの更新率とポインティング デバイスの解像度を使用して拡大縮小することにより、物理単位に変換されました。 ![]() USB マウスの通常のバス更新率は 125 Hz で、通常のポインタ解像度は 400 ミッキー/インチです。マウスから来るパケットごとのミッキーのサイズは通常、0 から +50 の範囲です。ただし、+127 まで、パケット構造で許可されます。たとえば、標準の USB マウスで、1 パケットごとに 3 ミッキーの一定の出力がある場合、そのデバイスの物理速度は、0.9375 または約 1 インチ/秒です。 任意の単位から物理単位に画面を変換するため、下記の関係を使用しました。 ![]() たとえば、1024 x 769 で動作する通常の 17 インチ モニタは、解像度が約 80 dpi でリフレッシュ レートが約 75 Hz です。したがって、データが前の例 (3 ミッキー/パケット) から変わっていない場合 (移動特性のない既定の設定)、ポインタは、画面上を物理的に 2.8 インチ/秒で移動します。したがって、USB マウスと 17 インチの画面が上記の仕様の場合、物理から仮想へのゲインは 3 (2.8/9.375) です。言い換えると、画面上のポインタの物理速度は、マウスの物理速度より 3 倍速いことになります。 親伝達関数物理単位が確立されると、親伝達関数が、有用性調査に基づいて構築されました。親伝達関数は、下記のグラフに示すとおりです。 ![]() 伝達関数は、5 つのポイントから成ります。5 つのポイントのうち 4 つは、マウス速度スペクトルの最低域に存在します。4 インチの制限を越える速度は、線形補外されています。 曲線のファミリ曲線のファミリは、下記のグラフで示すように、さまざまな速度と加速プロパティの伝達関数を生成するため、親曲線から補外されます。ユーザーは、[マウスのプロパティ] ダイアログ ボックスの [ポインタ オプション] タブでポインタ速度スライダを使用して、これらの曲線のいずれかを選択します。 ![]() 正確な移動下図では、伝達関数グラフの重要な変曲点の、より詳細なビューを示します。 ![]() 最初の線分の傾斜は、1 ゲイン未満の physical-to-screen ゲインを表し、正確な移動と、画面上のすべてのピクセルを対象にする機能 (サブピクセレーション) を提供します。サブピクセレーションは、ポインタが画面上で移動するより物理的に遠くへ、ユーザーがマウスを移動しなければならないとき、高精度および低速での安定性を提供します。サブピクセレーションを行うには、マウス カウントを割り算した余りを保持し、次のカウントに足す必要があります。 下図は、同じクローズアップを、曲線のファミリについて示します。注意すべき最も重要な点は、速い曲線または遅い曲線のいずれを見ても、ポイントの最初のセットがサブピクセレーション側に寄っている点です。これは、マウス速度の設定にかかわらず、ユーザーが画面上のすべてのピクセルを常に対象にできることを意味します。 ![]() 加速の計算伝達関数はルックアップ テーブルとして格納され、格納された値の間のポイントは補間されます。マウス 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 で使用される移動特性アルゴリズムを順に要約したものです。
リソースご質問:
リソース:
|