DirectX 10では、D3DX10が提供するフォントインターフェイスを使用できます。DirectX 11では、DirectWriteを使用することになっています。しかし、DirectWriteはDirect3Dとネイティブに通信しないように見えますか?私が見逃している基本的なものはありますか?DirectX 11で簡単なテキストをどのように描画しますか?
4 に答える
DirectXTKライブラリには、テキストをDirectX11デバイスコンテキストにレンダリングできるSpriteFont
クラスがあります。
2014年の編集:
コメントで指摘されているように、RasterTekチュートリアルへのリンクは機能しなくなりました。これは、RadioSpaceが提供するRasterTekのWebアーカイブへのリンクです。
D3D11バックバッファーをDirect2Dと共有し、それを介してDirectWriteでテキストを描画できるようになったため、元の回答の2番目のポイントも無効になりました。
2017年の編集:
RasterTekはまだ実行中です:D3D11でのフォントレンダリング
私は2つのオプションについて知っています
独自のフォントレンダリングエンジンを作成するRastertekDX11チュートリアルを参照してください
直接書き込みに関する2番目のオプションでは、d3d11デバイスとd3d10.1デバイス間でバックバッファーを共有し、dwrite + d2d + d3d10.1を使用してGUIをレンダリングし、d3d11デバイスを使用して3Dジオメトリをレンダリングし、すべてをバックバッファーにマージする必要があります。このスレッドのDieterVWからの投稿を参照してください。
現時点では、dwriteとd2dは、レンダリング用にd3d11デバイスで作成されたサーフェスを受け入れません。しかし、うまくいけば、MSはすぐにそれを実現します。
最近、DirectX10アプリケーションをDirectX11に変換し、同じ答えを検索しているときにこの投稿に出くわしました。Zeelaが言及したRastertekチュートリアルは優れていますが、検索を続けてFW1FontWrapperを見つけました。たった30分で、プロジェクトへの統合が完了しました。うまく機能しているようです。ダウンロードセクションには、ヘッダー、ライブラリ、DLLを含むx86パッケージとx64パッケージの両方が含まれています。単純なテキスト出力を行っているだけなので、APIについて多くを語ることはできません。ただし、私が行ったこと(1秒あたりのフレーム数の出力)では、約5行のコード(ラッパーオブジェクトの作成/解放を含む)しか必要ありませんでした。 )。彼のサンプルに基づくと、これまで使用していたものよりもはるかに多くのオプションを提供しているようです。
DirectWriteを使用すると、高品質のテキストレンダリング、解像度に依存しないアウトラインフォント、および完全なUnicodeテキストとレイアウトのサポートがサポートされます。