「DirectInput」の版間の差分
m ロボットによる: 文字置き換え (アプリケーションプログラミングインタフェース) |
WM_INPUTに関して追記。 |
||
(8人の利用者による、間の13版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2015年7月}} |
|||
⚫ | '''DirectInput'''は[[マウス (コンピュータ)|マウス]]、[[キーボード (コンピュータ)|キーボード]]、[[ジョイスティック]]、[[ゲームコントローラ]]等を介してユーザーからの入力情報を収集するための[[アプリケーションプログラミングインタフェース|API]]である。DirectInputはまたゲーム中の入力 |
||
⚫ | '''DirectInput'''は[[マイクロソフト]]によって開発された[[ソフトウェアコンポーネント]]「[[Microsoft DirectX]]」のうちのひとつであり、[[マウス (コンピュータ)|マウス]]、[[キーボード (コンピュータ)|キーボード]]、[[ジョイスティック]]、[[ゲームコントローラ]]等を介してユーザーからの入力情報を収集するための[[アプリケーションプログラミングインタフェース|API]]である。DirectInputはまたゲーム中の[[入力機器]]のボタンや座標を特定のアクションに割り当てる「アクションマッピング」のシステムを提供する。さらに「[[フォースフィードバック]]」デバイスの入出力を扱う。 |
||
⚫ | |||
⚫ | |||
マイクロソフトはDirectX 9で[[Xbox 360]]用コントローラーのための[[XInput]]という新しい入力ライブラリを導入した。 |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* '''アクションマッピング'''機能によりアプリケーションはデータ生成にどのような種類の装置が必要であるかを知ることなく入力データを入手できる。 |
* '''アクションマッピング'''機能によりアプリケーションはデータ生成にどのような種類の装置が必要であるかを知ることなく入力データを入手できる。 |
||
DirectInputは |
DirectInputはDirectXライブラリの一部であるが、DirectX 8から大きな変更がない。2005年のMeltdownでのプレゼンテーション[http://go.microsoft.com/fwlink/?linkid=50758&clcid=0x409]{{リンク切れ|date=2019-12}}で[[マイクロソフト]]は、新しいアプリケーションはキーボードとマウスを制御するのにDirectInputではなく[[Microsoft Windows|Windows]]のメッセージループを活用して、Xbox 360のコントローラーでもDirectInputではなくXInputを使うように推奨した。 |
||
== 歴史 == |
== 歴史 == |
||
DirectInputはDirectXの一部であった。当初は実際はジョイスティックだけをサポートしており、マウスとキーボードの部分は標準Win32 APIの単なるラッパーであった。DirectXバージョン3.0よりキーボードとマウスがサポートされるようになり、ジョイスティックのサポートも改善した。DirectX 5.0ではジョイスティックのサポートを大幅に強化し、フォースフィードバックに対応し、ボタン数が増え、基盤となるデバイスドライバモデルが変更された。マウスでもボタン数が4から8に増えた。DirectX 7.0では長い間待望だった複数のマウスの接続が可能になり、ジョイスティックのように個別に操作できるようになったが、後にリリースされたWindows XPではこの機能が動作しなくなった |
DirectInputはDirectXの一部であった。当初は実際はジョイスティックだけをサポートしており、マウスとキーボードの部分は標準Win32 APIの単なるラッパーであった。DirectXバージョン3.0よりキーボードとマウスがサポートされるようになり、ジョイスティックのサポートも改善した。DirectX 5.0ではジョイスティックのサポートを大幅に強化し、フォースフィードバックに対応し、ボタン数が増え、基盤となる[[デバイスドライバ]]モデルが変更された。マウスでもボタン数が4から8に増えた。DirectX 7.0では長い間待望だった複数のマウスの接続が可能になり、ジョイスティックのように個別に操作できるようになったが、後にリリースされた[[Microsoft Windows XP|Windows XP]]ではこの機能が動作しなくなった([[Microsoft Windows 98|Windows 98]]/[[Microsoft Windows Millennium Edition|ME]]とDirectX 9の組み合わせでは引き続き動作していた)。DirectX 8.0はアクションマッピングや様々な異なる種類の装置を広くサポートする最後のメジャーバージョンアップとなった。 |
||
マイクロソフトは元々DirectInputを全ての入力機器を取り扱う方法として売り込んだが、のちにこの方針は撤回された。以後、マイクロソフトはDirectInputを使ってキーボードとマウスを制御することを推奨しておらず、Xbox 360コントローラーの利用にも新しいXInputを推奨している。というのも、Windows XPではRaw Input API<ref>[https://learn.microsoft.com/en-us/windows/win32/inputdev/about-raw-input Raw Input Overview - Win32 apps | Microsoft Learn]</ref>のサポートが追加され、<code>WM_INPUT</code><ref>[https://learn.microsoft.com/en-us/windows/win32/inputdev/wm-input WM_INPUT message (Winuser.h) - Win32 apps | Microsoft Learn]</ref>というウィンドウメッセージが追加されたが、DirectInputは<code>WM_INPUT</code>のデータを読み取る2つ目のスレッドを内部的に作成するため、DirectInput APIを使用することによって、単に<code>WM_INPUT</code>を直接読み取る場合よりもオーバーヘッドが増加してしまうからである<ref>[https://learn.microsoft.com/en-us/windows/win32/dxtecharts/taking-advantage-of-high-dpi-mouse-movement Taking Advantage of High-Definition Mouse Movement - Win32 apps | Microsoft Learn]</ref><ref>[https://learn.microsoft.com/ja-jp/previous-versions/direct-x/bb206183(v=vs.85) 高解像度マウス動作の使用 | Microsoft Learn]</ref>。マウスまたはキーボードのデバイスからデータを読み取る場合は、DirectInputを使用する利点はない。高解像度マウスの移動データが必要ない場合は<code>WM_MOUSEMOVE</code>を、高精度の制御が必要な[[ファーストパーソン・シューティングゲーム|FPSゲーム]]でのエイミング操作のようにパフォーマンス最適化の観点から高解像度マウスのサポートが求められる場合は<code>WM_INPUT</code>を用いることが推奨されている。 |
|||
マイクロソフトは元々DirectInputを全ての入力装置を取り扱う方法として売り込んだが、現在ではこの方針は撤回されている。今ではマイクロソフトはDirectInputを使ってキーボードとマウスを制御することを推奨しておらず、Xbox 360コントローラー用の新しいXInputを推奨している。 |
|||
== XInput == |
== XInput == |
||
XInputは |
XInputは「次世代」コントローラーのための[[アプリケーションプログラミングインタフェース|API]]であり、Xbox 360の発売と共に導入され、Xbox 360コントローラーの全ての機能がWindows XP SP1以上で利用できるようになった。XInputはDirectInputよりもプログラムが劇的に簡単になる利点がある。XInputはDirectX 9以上から利用できる。 |
||
== DirectInputとXInputの比較 == |
== DirectInputとXInputの比較 == |
||
DirectInputはDirectX 8から大きな変更が無く、XInputは後のDirectX 9で導入され、2つのAPIの現状と将来には若干の混乱がある。現在はお互いにない特徴があり、そしていずれもDirectX 10で大きな変更はない。 |
DirectInputはDirectX 8から大きな変更が無く、XInputは後のDirectX 9で導入され、2つのAPIの現状と将来には若干の混乱がある。現在はお互いにない特徴があり、そしていずれもDirectX 10で大きな変更はない。 |
||
Xbox 360用コントローラーとマイクロソフトのデフォルトのWindowsドライバの組み合わせにおいてDirectInputを使う場合、XInputと比較して以下の制約がある。 |
|||
*左右のトリガーは単一のデジタルな方向として動作し、独立したアナログの軸としては動作しない。 |
*左右のトリガーは単一のデジタルな方向として動作し、独立したアナログの軸としては動作しない。 |
||
25行目: | 29行目: | ||
*ヘッドセットデバイスの確認ができない。 |
*ヘッドセットデバイスの確認ができない。 |
||
[[Microsoft Developer Network|MSDN]]によると、以下のような説明および解決策が記載されている<ref>[https://docs.microsoft.com/ja-jp/previous-versions/direct-x/bb173051(v=vs.85) XInput と DirectInput | Microsoft Docs]</ref><ref>[https://docs.microsoft.com/en-us/windows/win32/xinput/xinput-and-directinput XInput and DirectInput - Win32 apps | Microsoft Docs]</ref>。 |
|||
[[Microsoft Developer Network|MSDN]]によると「DirectInputの左右のトリガーの組み合わせは仕様である。ユーザーがデバイスを操作していないときはDirectInputのゲームはデバイスの軸が中心にあるものと常に想定する。しかしながらXbox 360用コントローラーは、トリガーが保持されていないときは、中心ではなく最低値が登録されるように設計している。」MSDNの『解決策』は、片方のトリガーをプラス方向に設定し、もう片方のトリガーをマイナス方向に設定するようにトリガーを組み合わせるというものであり、ユーザーは『コントロール』が中央にあることをDirectInputに示すような操作をしない。[http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/dx9_xinput_xinput_dinput.asp] |
|||
{{Quotation|DirectInput の左右のトリガーの組み合わせは、意図的なもの<ref>英語版の原文では「by design」(仕様)となっている。</ref>です。ゲームでは、DirectInput デバイスとユーザーとの対話操作がない場合、このデバイスの軸は常に中央に配置されると想定しています。ただし、トリガーが保持されない場合、Xbox 360 コントローラーは中心ではなく最小値を登録するように設計されていました。したがって、以前のゲームはユーザーの対話操作を想定しています。 |
|||
⚫ | これはしかしながら、デュアルアナログスティックのあるゲームパッドやハンドルコントローラーなどのような様々なDirectInputコントローラーが既にトリガーやペダルに個々に割り当て済みであるという事実を無視していた。しかも多くのDirectInputデバイスには振動機能も搭載されていた。Xbox 360用コントローラーで振動機能をサポートし、デッドゾーンの検知や、(オプションとして)独立したトリガーをDirectInput経由で利用できる、[http://matt-land.com/xbcd/ XBCD]というドライバが存在している。これはDirectInputとXInputのAPIの違いによるものというよりはむしろ、マイクロソフトが提供するXbox 360用コントローラーのドライバは |
||
この解決策とは、トリガーを組み合わせて、あるトリガーを正の方向に設定し、もう 1 つのトリガーを負の方向に設定するというものでした。それによって、DirectInput に"制御"が中央にあることをユーザーの対話操作で示すことがなくなります。}} |
|||
⚫ | これはしかしながら、デュアルアナログスティックのあるゲームパッドやハンドルコントローラーなどのような様々なDirectInputコントローラーが既にトリガーやペダルに個々に割り当て済みであるという事実を無視していた。しかも多くのDirectInputデバイスには振動機能も搭載されていた。Xbox 360用コントローラーで振動機能をサポートし、デッドゾーンの検知や、(オプションとして)独立したトリガーをDirectInput経由で利用できる、[http://matt-land.com/xbcd/ XBCD]というドライバが存在している。これはDirectInputとXInputのAPIの違いによるものというよりはむしろ、マイクロソフトが提供するXbox 360用コントローラーのドライバは「意図的に」DirectInputでの機能を制限していることを示している。 |
||
現在XInputのAPIはDirectInputにはない制約もある。 |
現在XInputのAPIはDirectInputにはない制約もある。 |
||
* ''次世代''のコントローラーのみをサポートする。基本的に |
* '''次世代'''のコントローラーのみをサポートする。基本的にWindows用のドライバがあるXbox 360用のコントローラーに制限される。旧式のWindows用のコントローラーはサポートしていない。 |
||
* 最大同時接続数4台。これはXboxから |
* 最大同時接続数4台。これはXboxからWindowsに持ち込まれた制約である。今のところ4つのコントローラーを必要とするPC用ゲームはまずないが、DirectInputにはこのような制限が無く、不合理な制限と考えられる。 |
||
* キーボード、マウス及びマウス型デバイスの非サポート。これらのデバイス |
* キーボード、マウス及びマウス型デバイスの非サポート。DirectInputはこれらのデバイスに対しては推奨されないものとするマイクロソフトの意向を反映しているが、DirectInputでこれらのデバイスを利用すること自体は可能である。 |
||
* 1コントローラーあたり、アナログ4軸、10ボタン、デジタル8方向のみをサポートする。対してDirectInputはアナログ8軸、128ボタン、フルレンジのPOV(ハットスイッチ)をサポートする |
* 1コントローラーあたり、アナログ4軸、10ボタン、デジタル8方向のみをサポートする。XInputがサポートする軸とボタンの数はXbox 360用コントローラーと直接対応しているためである。対してDirectInputはアナログ8軸、128ボタン、フルレンジのPOV (ハットスイッチ) をサポートする。 |
||
DirectInputは従来から存在する規格のため、対応するドライバーが用意されているデバイスも豊富だが、XInputは後発のため、主要な対応デバイスとしてはXbox 360用の純正コントローラーおよび[[Xbox One]]用の純正コントローラー<ref>[https://walbourn.github.io/xinput-and-windows-8/ XINPUT and Windows 8 | Games for Windows and the DirectX SDK blog]</ref>のみである。ただし、[[サードパーティー]]製の各種コントローラーもDirectInput/XInput両対応の製品がいくつか発売されている<ref>[http://www2.elecom.co.jp/peripheral/gamepad/jc-u3613m/ 幅広いゲームが楽しめる、USBゲームパッド - JC-U3613Mシリーズ]</ref> <ref>[http://gaming.logicool.co.jp/ja-jp/product/f310-gamepad F310 Gamepad - Logicool]</ref>。 |
|||
DirectInputがあらゆるコントローラーに対応しているのと比べ、XInputは現在のところXbox 360用のコントローラーしか対応していない。 |
|||
[[Microsoft Windows 8|Windows 8]]で導入された[[Windowsストア]]アプリでは、XInput 1.4のみが使用可能であり、デスクトップアプリ向けのXInput (1.1/1.2/1.3, 9.1.0) およびDirectInputは使用できない<ref>[https://docs.microsoft.com/en-us/windows/win32/xinput/xinput-versions XInput Versions - Win32 apps | Microsoft Docs]</ref>。XInput 1.4ではオーディオヘッドセットの問い合わせ機能が追加されている<ref>[https://docs.microsoft.com/en-us/windows/win32/api/xinput/nf-xinput-xinputgetaudiodeviceids XInputGetAudioDeviceIds function (xinput.h) - Win32 apps | Microsoft Docs]</ref>。 |
|||
⚫ | |||
== 継続使用の試み == |
|||
[[en:DirectInput]] |
|||
[[es:DirectInput]] |
|||
2022年現在、DirectInputは過去の技術とみなされているが、コミュニティベースでの試みとして、フライトシミュレーターをForce feedback API対応ジョイスティックで使用可能にする、[[XPForce]] プロジェクトが存在する<ref>[https://forums.flightsimulator.com/t/psa-xpforce-force-feedback-will-be-coming-to-fs2020/231168 XPForce] force-feedback will be coming to FS2020!</ref>。 |
|||
[[fr:DirectInput]] |
|||
[[nl:XInput]] |
|||
== 脚注 == |
|||
[[pl:DirectInput]] |
|||
{{脚注ヘルプ}} |
|||
[[zh:DirectInput]] |
|||
{{reflist}} |
|||
== 関連項目 == |
|||
[[Microsoft DirectX]] |
|||
{{Microsoft APIs}} |
|||
⚫ |
2024年5月26日 (日) 17:39時点における最新版
DirectInputはマイクロソフトによって開発されたソフトウェアコンポーネント「Microsoft DirectX」のうちのひとつであり、マウス、キーボード、ジョイスティック、ゲームコントローラ等を介してユーザーからの入力情報を収集するためのAPIである。DirectInputはまたゲーム中の入力機器のボタンや座標を特定のアクションに割り当てる「アクションマッピング」のシステムを提供する。さらに「フォースフィードバック」デバイスの入出力を扱う。
マイクロソフトはDirectX 9でXbox 360用コントローラーのためのXInputという新しい入力ライブラリを導入した。
DirectInputとXInputは通常のWin32アプリケーションにも利点がある。
- アプリケーションはバックグラウンドでの動作中でも入力機器から情報を入手できる。
- フォースフィードバックのような様々なタイプの入力機器を完全にサポートできる。
- アクションマッピング機能によりアプリケーションはデータ生成にどのような種類の装置が必要であるかを知ることなく入力データを入手できる。
DirectInputはDirectXライブラリの一部であるが、DirectX 8から大きな変更がない。2005年のMeltdownでのプレゼンテーション[1][リンク切れ]でマイクロソフトは、新しいアプリケーションはキーボードとマウスを制御するのにDirectInputではなくWindowsのメッセージループを活用して、Xbox 360のコントローラーでもDirectInputではなくXInputを使うように推奨した。
歴史
[編集]DirectInputはDirectXの一部であった。当初は実際はジョイスティックだけをサポートしており、マウスとキーボードの部分は標準Win32 APIの単なるラッパーであった。DirectXバージョン3.0よりキーボードとマウスがサポートされるようになり、ジョイスティックのサポートも改善した。DirectX 5.0ではジョイスティックのサポートを大幅に強化し、フォースフィードバックに対応し、ボタン数が増え、基盤となるデバイスドライバモデルが変更された。マウスでもボタン数が4から8に増えた。DirectX 7.0では長い間待望だった複数のマウスの接続が可能になり、ジョイスティックのように個別に操作できるようになったが、後にリリースされたWindows XPではこの機能が動作しなくなった(Windows 98/MEとDirectX 9の組み合わせでは引き続き動作していた)。DirectX 8.0はアクションマッピングや様々な異なる種類の装置を広くサポートする最後のメジャーバージョンアップとなった。
マイクロソフトは元々DirectInputを全ての入力機器を取り扱う方法として売り込んだが、のちにこの方針は撤回された。以後、マイクロソフトはDirectInputを使ってキーボードとマウスを制御することを推奨しておらず、Xbox 360コントローラーの利用にも新しいXInputを推奨している。というのも、Windows XPではRaw Input API[1]のサポートが追加され、WM_INPUT
[2]というウィンドウメッセージが追加されたが、DirectInputはWM_INPUT
のデータを読み取る2つ目のスレッドを内部的に作成するため、DirectInput APIを使用することによって、単にWM_INPUT
を直接読み取る場合よりもオーバーヘッドが増加してしまうからである[3][4]。マウスまたはキーボードのデバイスからデータを読み取る場合は、DirectInputを使用する利点はない。高解像度マウスの移動データが必要ない場合はWM_MOUSEMOVE
を、高精度の制御が必要なFPSゲームでのエイミング操作のようにパフォーマンス最適化の観点から高解像度マウスのサポートが求められる場合はWM_INPUT
を用いることが推奨されている。
XInput
[編集]XInputは「次世代」コントローラーのためのAPIであり、Xbox 360の発売と共に導入され、Xbox 360コントローラーの全ての機能がWindows XP SP1以上で利用できるようになった。XInputはDirectInputよりもプログラムが劇的に簡単になる利点がある。XInputはDirectX 9以上から利用できる。
DirectInputとXInputの比較
[編集]DirectInputはDirectX 8から大きな変更が無く、XInputは後のDirectX 9で導入され、2つのAPIの現状と将来には若干の混乱がある。現在はお互いにない特徴があり、そしていずれもDirectX 10で大きな変更はない。
Xbox 360用コントローラーとマイクロソフトのデフォルトのWindowsドライバの組み合わせにおいてDirectInputを使う場合、XInputと比較して以下の制約がある。
- 左右のトリガーは単一のデジタルな方向として動作し、独立したアナログの軸としては動作しない。
- 振動機能は利用できない。
- ヘッドセットデバイスの確認ができない。
MSDNによると、以下のような説明および解決策が記載されている[5][6]。
DirectInput の左右のトリガーの組み合わせは、意図的なもの[7]です。ゲームでは、DirectInput デバイスとユーザーとの対話操作がない場合、このデバイスの軸は常に中央に配置されると想定しています。ただし、トリガーが保持されない場合、Xbox 360 コントローラーは中心ではなく最小値を登録するように設計されていました。したがって、以前のゲームはユーザーの対話操作を想定しています。 この解決策とは、トリガーを組み合わせて、あるトリガーを正の方向に設定し、もう 1 つのトリガーを負の方向に設定するというものでした。それによって、DirectInput に"制御"が中央にあることをユーザーの対話操作で示すことがなくなります。
これはしかしながら、デュアルアナログスティックのあるゲームパッドやハンドルコントローラーなどのような様々なDirectInputコントローラーが既にトリガーやペダルに個々に割り当て済みであるという事実を無視していた。しかも多くのDirectInputデバイスには振動機能も搭載されていた。Xbox 360用コントローラーで振動機能をサポートし、デッドゾーンの検知や、(オプションとして)独立したトリガーをDirectInput経由で利用できる、XBCDというドライバが存在している。これはDirectInputとXInputのAPIの違いによるものというよりはむしろ、マイクロソフトが提供するXbox 360用コントローラーのドライバは「意図的に」DirectInputでの機能を制限していることを示している。
現在XInputのAPIはDirectInputにはない制約もある。
- 次世代のコントローラーのみをサポートする。基本的にWindows用のドライバがあるXbox 360用のコントローラーに制限される。旧式のWindows用のコントローラーはサポートしていない。
- 最大同時接続数4台。これはXboxからWindowsに持ち込まれた制約である。今のところ4つのコントローラーを必要とするPC用ゲームはまずないが、DirectInputにはこのような制限が無く、不合理な制限と考えられる。
- キーボード、マウス及びマウス型デバイスの非サポート。DirectInputはこれらのデバイスに対しては推奨されないものとするマイクロソフトの意向を反映しているが、DirectInputでこれらのデバイスを利用すること自体は可能である。
- 1コントローラーあたり、アナログ4軸、10ボタン、デジタル8方向のみをサポートする。XInputがサポートする軸とボタンの数はXbox 360用コントローラーと直接対応しているためである。対してDirectInputはアナログ8軸、128ボタン、フルレンジのPOV (ハットスイッチ) をサポートする。
DirectInputは従来から存在する規格のため、対応するドライバーが用意されているデバイスも豊富だが、XInputは後発のため、主要な対応デバイスとしてはXbox 360用の純正コントローラーおよびXbox One用の純正コントローラー[8]のみである。ただし、サードパーティー製の各種コントローラーもDirectInput/XInput両対応の製品がいくつか発売されている[9] [10]。
Windows 8で導入されたWindowsストアアプリでは、XInput 1.4のみが使用可能であり、デスクトップアプリ向けのXInput (1.1/1.2/1.3, 9.1.0) およびDirectInputは使用できない[11]。XInput 1.4ではオーディオヘッドセットの問い合わせ機能が追加されている[12]。
継続使用の試み
[編集]2022年現在、DirectInputは過去の技術とみなされているが、コミュニティベースでの試みとして、フライトシミュレーターをForce feedback API対応ジョイスティックで使用可能にする、XPForce プロジェクトが存在する[13]。
脚注
[編集]- ^ Raw Input Overview - Win32 apps | Microsoft Learn
- ^ WM_INPUT message (Winuser.h) - Win32 apps | Microsoft Learn
- ^ Taking Advantage of High-Definition Mouse Movement - Win32 apps | Microsoft Learn
- ^ 高解像度マウス動作の使用 | Microsoft Learn
- ^ XInput と DirectInput | Microsoft Docs
- ^ XInput and DirectInput - Win32 apps | Microsoft Docs
- ^ 英語版の原文では「by design」(仕様)となっている。
- ^ XINPUT and Windows 8 | Games for Windows and the DirectX SDK blog
- ^ 幅広いゲームが楽しめる、USBゲームパッド - JC-U3613Mシリーズ
- ^ F310 Gamepad - Logicool
- ^ XInput Versions - Win32 apps | Microsoft Docs
- ^ XInputGetAudioDeviceIds function (xinput.h) - Win32 apps | Microsoft Docs
- ^ XPForce force-feedback will be coming to FS2020!