2009-08-31 5 views
3

一部の拡張リアリティ機能を備えたフルスクリーンの3Dアプリケーション(Johnny Lee's Wii head tracking appベース)を作成するために取り組んでおり、WPFがあまりにも遅くて私は妥当なフレームレートで使っているシンプルなモデルです。問題は、アプリの性質上、ほぼすべてのフレームでカメラの表示と投影の両方を変更する必要があることだと思います(ウェブカムを使用して顔を追跡し、そのデータを使用してカメラを移動します)その視点を変える)。ヘッドトラッキングアプリのWPF 3-Dパフォーマンス

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

結果として、私は新しいグラフィックバックエンドを探したり、このアプリケーションのWPFをもっと速くする方法を見つける必要があります。私はDirectXとXNA、そしておそらくOpenGLを見ています。これらのAPIのどれが.NETでこのアプリに使用するのが最もよいかに関する推奨事項はありますか?または、WPFで何が間違っていて、遅くなっているのだろうか?

答えて

2

私はWPFで3Dで十分な作業をしていないため、遅いことが起きる可能性はありますが、モデルのデータ構造はあまり効率的ではないことに気付きました。これは原因ではないかもしれませんが、パイプライン全体の一般的な遅さの症状になる可能性があります。

忘れてはならないことの1つは、グラフィックスカードのハードウェアアクセラレーションを使用するのではなく、WPFがソフトウェアでシーンをレンダリングすることです。小さなウィンドウでより良いパフォーマンスを得ることができます。

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

Direct3DかOpenGLのどちらにしても、実際にはすべての現代のカードがそれらを同じようにうまくサポートしているかどうかは本当に問題ではないと思います。 XNAは、Visual Studioに統合されているので、たとえExpressエディションであっても、.NETに固執している場合は明らかです。

+0

それ自体「テクスチャ」はありません。私はすべてのモデルでSolidColorBrushを使用しています。 WPFがそれをカットしないと仮定すると、おそらくXNAが私の最初の選択です。これまでのところ自分自身の問題は、XNAでグラフィックスが動作する方法が私にとって非常に奇妙に見えますが、それは私が乗り越える必要のある学習曲線です。 –

+0

@Jonathan - テクスチャのアイデアは単なる提案に過ぎませんでした。以前はテクスチャのアイデアはソフトウェアのレンダリングを引き起こす可能性のあるものでした。 – ChrisF

1

私はそうに最適化した、SlimDX、すべてのフレームに投影を変更すると問題がXNA/WPFのようなAPIの者がこのことを念頭に設計さっすということであるXNAやWPF

よりもはるかに薄いDirectXのラッパーをチェックアウトだろう初期化段階で一度投影を設定してから、再度設定しないでください。

+0

なぜですか? XNAの各フレームにビュー/投影行列を問題なく設定できます。それらは、ハードウェアでその計算を行うシェーダへの入力だけです。行列自体を計算し、それらのシェーダを更新することはボトルネックではありません。 –

0

ここではハイブリッドの選択肢を提案します:WPFを使って(WindowsのUI、構図など)、XNAを使用して3Dをレンダリングします。 XNAとWinFormsの組み合わせを示すsamples out thereがあります。 WPNAのサーフェスにXNAをレンダリングするのと同じ "トリック"を行うことは可能であるはずです。

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

+0

現在、WPFにXNAを組み込む際に問題があります。これは、私が理解しているものと競合するデバイスプロパティと関係しています。 XNAとWPFの人々は問題を認識していますが、まだ解決されていないと思います。 SlimDXのようなものを使っても同じ問題はないはずです。 –

+0

私の更新を参照してください。これは道のりかもしれませんが、SlimDXに行くのがおそらく最も簡単な方法でしょう。 –

関連する問題