0

私は WPF アプリケーションを使用しており、画面の一部に、おそらく 20 FPS で 3D で動的にレンダリングする必要があるオブジェクトが表示されます。通常、WPF アプリケーションは DirectX を使用して 3D レンダリングを行うことを理解しています。(WFP には簡略化された 3D API があることも理解していますが、レンダリングする三角形が多すぎるため、私の場合は機能しないと思います。) 私の場合、可能性が高いため、OpenGL を使用したいと考えています。アプリケーション全体が Windows 以外のマシンに移植されるので、3D コードを書き直す必要はありません。

OpenGL が直接レンダリングできる WPF コントロールを作成しようとする試みがいくつかあったようですが、それらはすべて、使用するには荒すぎたりリスクが高すぎたりするようです。

より安全なアプローチとして、OpenGL で FBO を使用してフレームを画面外にレンダリングし、ビットマップを取得してリアルタイムで通常の 2D 画像として WPF に渡すことができると考えました。

私の質問は速度についてです。このスキームには、契約を破るボトルネックがあると予想されますか? FBO レンダリングは、OpenGL 側での直接ウィンドウ レンダリングとほぼ同じ速度になると思いますか? また、レンダリングされた OpenGL イメージ (FBO) からのビットマップの抽出は高速であると思いますか? これらの画像を WFP に渡し、20 FPS で更新されるのを確認することについては、あまり確信が持てません。

これが合理的な方法であるかどうかを判断するのに役立つ具体的な経験はありますか?

4

1 に答える 1

0

アプリケーション全体が Windows 以外のマシンに移植される可能性が高いため、OpenGL を使用したいと考えています。

ただし、このフレームワークはクロスプラットフォームではないため、WPF アプリ全体も書き直す必要があることを意味します。そのような場合、OpenGL の部分はここではあまり重要ではありません。UI 技術全体を再検討する必要があると思います。例Qt SDKは本当にクロス プラットフォームであり、DirectX と OpenGL の両方に自由に接続できるため、Qt SDKを使用します。ただし、Windows で WPF を使用し、OpenGL を使用する場合は、C# OpenGL wrapperを使用してください。はい、ラッパーであるため、パフォーマンスのオーバーヘッドが発生します。Java (JOGL 、 LWJGL ) の場合と同様です。別の、より困難なアプローチは、WPF COM 相互運用を行い、WPF から直接 OpenGL レンダラーをラップする C++ アプリを呼び出すことです。可能な限り低いレベルにするためのアンセーフ モード。自分で試したことはありませんが、パフォーマンスが向上する可能性があります。しかし、実際には多くの作業が必要です。最後に、Windows 用の DirectX を使用することをお勧めします。これは、WPF との統合が最適であるためです。アプリを適切に設計すれば、後で OpenGL バックエンドに接続することは問題になりません。

于 2013-01-11T10:06:19.943 に答える