3

拡張現実機能を備えたフルスクリーンの3Dアプリ(Johnny LeeのWiiヘッドトラッキングアプリに基づく)の作成に取り組んでいますが、WPFは遅すぎて、で使用している単純なモデルでもレンダリングできないようです。妥当なフレームレート。問題は、アプリの性質上、ほぼすべてのフレームでカメラのビューと投影の両方を変更する必要があることだと思います(Webカメラを使用して顔を追跡し、そのデータを使用してカメラを移動します)周りとその視点を変更します)。

私は問題を絞り込むために多くの時間を費やしてきましたが、それは間違いなくグラフィックスに関連しており、使用しているヘッドトラッキングAPIの速度ではありません。また、XNAでアプリを再作成しましたが、そこでは正常に動作しているようです(28 FPS対WPFの9)。最後に、「壁」を削除するか、ウィンドウをはるかに小さくすると(たとえば、800 x 600)、WPFのパフォーマンスが大幅に向上し、ボトルネックはグラフィック計算であると思います。

その結果、使用できる新しいグラフィックスバックエンドを見つけるか、このアプリのWPFをはるかに高速化する方法を見つける必要があります。私は主にDirectXとXNA、そしておそらくOpenGLを見ています。これらのAPIのどれを.NETのこのアプリに使用するのが最適かについての推奨事項はありますか?または、代わりに、WPFで何が間違っているのか、速度が低下しているという考えはありますか?

4

3 に答える 3

2

WPFで3Dを使用して、速度低下の原因を特定するのに十分なことはしていませんが、モデルのデータ構造があまり効率的ではないことに気付きました。これが原因ではないかもしれませんが、パイプライン全体の一般的な速度低下の兆候である可能性があります。

頭に浮かぶことの1つは、WPFがグラフィックカードのハードウェアアクセラレーションを使用するのではなく、ソフトウェアでシーンをレンダリングしていることです。小さいウィンドウでパフォーマンスが向上するという事実(どれだけ優れているかはわかりませんが)。

モデルからテクスチャを削除すると、パフォーマンスも向上しますか?

Direct3DとOpenGLのどちらを使用するかは、それほど重要ではないと思います。事実上、すべての最新のカードがそれらを同等にサポートしています。XNAは、Visual Studio(Expressエディションでも)に統合されているため、.NETを使い続ける場合は当然の選択です。

于 2009-08-31T20:35:05.880 に答える
1

XNAやWPFよりもはるかに薄いDirectXラッパーであるSlimDXをチェックします

すべてのフレームでプロジェクションを変更する際の問題は、XNA / WPFのようなAPIがこれを念頭に置いて設計されていないため、初期化フェーズでプロジェクションが一度設定され、その後は再度設定されないように最適化されたことです。

于 2009-08-31T20:33:55.117 に答える
0

ここでハイブリッドの選択を提案します。WPFを使用して(Windows UI、コンポジションなど)、XNAを使用して3Dをレンダリングします。XNAとWinFormsの組み合わせを示すサンプルがあります。同じ「トリック」を実行して、XNAをWPFのサーフェスにレンダリングすることも可能です。

更新: XNAをWPFで直接使用することにはおそらく問題があります。このスレッドは、WinFormsでXNAを使用してから、WPFでWinFormsコントロールをホストすることが、これらの問題の回避策であることを示しています。私はこれを自分でテストしていません(まだ)。

于 2009-09-02T11:23:34.027 に答える