5

WPF コントロールで立体 3D グラフィックを表示する必要があります。

表示する 2 つの DirectX-9 テクスチャを作成するコードが既にあります。それぞれの目に 1 つのテクスチャです。

3D Vision を使用したい (アナグリフではない)。

2 つの写真を 3D ステレオとして表示するには、次の方法を検討しました。

  1. OpenGL または DirectX 11.1 ステレオ API を使用します。
  2. ここで説明されているように NvAPI_Stereo_SetActiveEye を使用する: http://www.nvidia.com/docs/IO/40505/WP-05482-001_v01-final.pdf
  3. NV_STEREO_IMAGE_SIGNATURE および DirectX 10/11 (nVidia 3D Vision)で説明されているように、NVidia ステレオ署名を使用する
  4. 2 つの画像を 1 つずつレンダリングして、CompositionTarget.Rendering が VSync を失いすぎないようにし、単一の VSync が失われた場合は同期します。さらに、架空の立体画像をレンダリングする目に見えないコントロールによって 3D Vision エミッターをオンにします。
  5. 3D シーンをレンダリングし、NVidia ドライバーに自動的に立体視させます。
  6. 実際の Windows コントロール (Winform コントロールなど) にレンダリングし、WPF ホスト (WinFormHost など) を使用してコンテンツを表示します。

上記の方法の問題点は次のとおりです。

1-3: 最初の 3 つの方法の 1 つは簡単な解決策のように見えますが、デバイス/コンテキストを作成して画像のレンダリング方法を制御できないため、WPF では不可能です。

4: CompositionTarget.Rendering を使用すると、120Hz ではなく約 60Hz しか得られません。問題は、EndScene() が 2 回呼び出されることだと思います。1 つはレンダリングされたシーンで、もう 1 つは WPF レンダリング メカニズムで呼び出されますが、よくわかりません。とにかくうまくいくとしても、その解決策は不安定なようです。

5: 私の場合、技術的な理由により 3D シーンをレンダリングすることはできず、2 つの目の 2 つの画像を自分でレンダリングする必要があります。

6: WinFormHost とその仲間の問題は、これが WPF コントロールではなく、WPF コントロールに関して予期しない動作をすることです。たとえば、WinForm コントロールは、論理ツリーの上位にある WPF コントロールを非表示にし、RotateTransform などを使用して回転させることはできません。

今のところ、WinFormHost を使用する最後の解決策を選択しました。実際の WPF コントロール内で立体 3D を作成することで、その壊れない壁の解決策を知っている人はいますか?

4

0 に答える 0