2

3D (立体視ではない) DirectX ゲームまたはプログラムがあるとします。2 番目のプログラム (またはドライバー) がゲーム内のカメラの位置を変更する方法はありますか?

DirectX ゲーム/プログラムに使用できるヘッド トラッキング プラグインまたはドライバーを構築しようとしています。慣性モーションセンサーは頭の位置を教えてくれますが、私の問題は、頭の追跡のハードウェア/数学の問題ではなく、その位置データを使用してカメラの位置を変更することです。

これまでのところ、これを行う方法については何も見つけることができませんでしたが、iZ3D は元のカメラの近くに 2 つのカメラを作成し、それを立体視用に使用することができたので、DirectX へのフック/リンク/接続が存在することがわかっています。 2 番目のプログラムによるカメラ操作が可能になります。

これを機能させることができれば、コードをリリースします。

-シェーン

4

1 に答える 1

1

Direct3D 呼び出しのフックは、その性質上、DLL 呼び出しをフックするだけです。つまり、これは D3D にとって特別なものではなく、単なる一般的な手法です。「フック dll」をグーグルで検索するか、[C++] Direct3D hooking sampleから始めてください。フックでは常に発生するため、多くの注意事項があり、フックされたアプリケーションのすべてのニーズを満たすには、かなり巨大なボイラープレートを作成する必要があります。

ただし、ゲームでカメラを操作すると、通常、良い結果が得られません。最新の PC ゲームには少なくとも 2 つの重要な機能があり、それによってアイデアが大幅に制限されます。

  1. プリクリッピング。ほとんどのゲーム エンジンは、ビュー プレーンの背後にあるオブジェクトを除外します。そのため、カメラを横に回転させると、実際の世界で表示されると予想されるオブジェクトが表示されません。ゲームはビュー プレーンが変更されたことを認識していないため、オブジェクトは D3D に送信されませんでした。
  2. 複数パスのレンダリング。多くのポピュラーなポスト プロセス エフェクトは、エクストラ パスで実行されます (シーン全体またはシーンの一部のみ)。ミラーと「スクリーン」は、そのような効果として最もよく知られています。操作しているカメラを知らなければ、ほとんどの場合、シーンを中断するだけです。

ところで、#2 は、立体視モードがすべてのゲームと 100% 互換性がない理由です。たとえば、ソース エンジンでは、HDR シーンは 3 つのパスでレンダリングされます。それらを区別する方法を知らなければ、ゲームを中断するだけです。nVidia がどのように立体視モードを実装しているかを見てみましょう。nVidia は人気のあるゲームごとに個別のフックを作成しますが、このアプローチでさえ、常に期待どおりの結果が得られるとは限りません。

于 2013-02-13T19:03:25.127 に答える