WPFでも同様の種類のインターフェイスを作成できますが、それらをDirect3Dゲームに統合するのは問題があります。WPF内で(を介してD3DImage
)Direct3Dコンテンツをホストできますが、3DコンテンツはWPFアプリケーションに統合されるため、レンダリングはWPFに依存します。その結果、WPFのフレームレートによって制限されるため、パフォーマンスが比較的低下する可能性があります。また、U62が彼のコメントで述べたように、WPFは(Direct3D 10/11とは対照的に)Direct3D 9コンテンツのみをホストできます。ただし、IDirect3DDevice9Ex
デバイス間でリソースを共有できるため、これを回避できる場合があります。したがって、Direct3D 10または11で共有レンダーターゲットを作成し、中間IDirect3DDevice9Ex
デバイスを介してWPFに取り込むことができます。ジェレミア・モリルはこのテクニックについてここで論じています。
ここで説明するように、代わりの方法は、エレガントではありませんが、Direct3Dコンテンツの上の別のレイヤー化されたウィンドウにWPF UIをレンダリングすることです。
WPFの内部Direct3Dサーフェスにアクセスする方法もあります。これにより、外部のDirect3DシーンでWPFコンテンツをホストできます(他の方法ではなく)。ただし、これはやや厄介なハックであり、将来のWPFリリースによって簡単に破られる可能性があります。
もちろん、実際にDirect3Dと相互運用する必要がない場合、これは関係ありません。複雑な3Dグラフィックスを必要としないゲームは、WPFで完全に開発できます。WPFにはいくつかの単純な3D機能がありますが、単純なテクスチャーを持つプリミティブシェイプ以外には一般的に不十分です。また、カスタムピクセルシェーダーもサポートしていますが、多くの制限があります(たとえば、シングルパスエフェクトでなければなりません)。