web-dev-qa-db-ja.com

DirectX 11でテキストをどのように描画しますか?

DirectX 10では、D3DX10が提供するフォントインターフェイスを使用できます。 DirectX 11では、DirectWriteを使用することになっています。しかし、DirectWriteはDirect3Dとネイティブに通信しないように見えますか?私が見逃している基本的なものはありますか? DirectX 11で簡単なテキストをどのように描画しますか?

15
Darkenor

2014年の編集:

コメントで指摘されているように、RasterTekチュートリアルへのリンクは機能しなくなりました。これは、 RadioSpace によって提供される RasterTekのWebarchive へのリンクです。

D3D11バックバッファーをDirect2Dと共有し、それを介してDirectWriteでテキストを描画できるようになったため、元の回答の2番目のポイントも無効になりました。

2017年の編集:

RasterTekはまだ実行中です: D3D11でのフォントレンダリング


私は2つのオプションについて知っています

  • 独自のフォントレンダリングエンジンを作成してください Rastertek DX11チュートリアル

  • 直接書き込みに関する2番目のオプションでは、d3d11デバイスとd3d10.1デバイス間でバックバッファーを共有し、dwrite + d2d + d3d10.1を使用してGUIをレンダリングし、d3d11デバイスを使用して3Dジオメトリをレンダリングし、すべてをバックバッファーにマージする必要があります DieterVWの投稿を参照)このスレッド

現時点では、dwriteとd2dは、レンダリング用にd3d11デバイスで作成されたサーフェスを受け入れません。しかし、うまくいけば、MSはすぐにそれを達成するでしょう。

8
Zee

最近、DirectX10アプリケーションをDirectX11に変換し、同じ答えを探しているときにこの投稿に出くわしました。 Zeelaが言及したRastertekチュートリアルは優れていますが、検索を続けて、 FW1FontWrapper を見つけました。わずか約30分後、プロジェクトへの統合が完了したばかりで、うまく機能しているようです。ダウンロードセクションには、ヘッダー、ライブラリ、DLLを含むx86パッケージとx64パッケージの両方が含まれています。単純なテキスト出力を行っているだけなので、APIについて多くを語ることはできませんが、私が行ったこと(1秒あたりのフレーム数の出力)を除いて、約5行のコード(ラッパーオブジェクトの作成/解放を含む)しか必要ありませんでした。 )。彼のサンプルに基づくと、これまで使用していたものよりもはるかに多くのオプションを提供しているようです。

7
Tim Coolman

DirectXTK ライブラリにはSpriteFontクラスがあり、DirectX11デバイスコンテキストにテキストをレンダリングできます。

7
Daemin

DirectWrite を使用すると、高品質のテキストレンダリング、解像度に依存しないアウトラインフォント、および完全なUnicodeテキストとレイアウトのサポートがサポートされます。

6
Faisal