OpenGLでテキストをレンダリングする優先方法[非公開]


17

大学のプロジェクトのために、コンピューターグラフィックスを再び取り上げようとしています。以前のプロジェクトでは、FTGLと呼ばれるライブラリを使用しましたが、かなり重いと感じたため、満足できませんでした(多くのレンダリングテクニックを試しましたが、テキストレンダリングはあまりうまくスケールしませんでした)。

私の質問は、これのための良い効率的なライブラリはありますか?そうでない場合、高速だが見栄えの良いテキストを実装する方法は何でしょうか?いくつかの用途は次のとおりです。

  • フローティングオブジェクト/キャラクターラベル
  • 対話
  • メニュー
  • HUD

編集:できればフォントもロードできます


1
これは「どの技術を使用するか」であり、おそらく閉じられるべきです。
ローランクーヴィドゥ

回答:


4

人気のあるフレームワークはCrazy EddieのGUIです。

しかし、それは魅力的ですが、あなた自身をロールバックすることは珍しいことではありません(そしておそらくスコープが後で増加するのでそれを後悔します;))

通常、ビットマップにグリフを配置し、OpenGLを使用してビットマップを描画します。

いくつかのフレームにのみ表示される一時的なテキストを表示することがあります。GL_QUADS + glVertexを使用するだけで十分です。しかし、大量のテキストまたは可視性の長い期間については、GL_QUADSをVBOに入れる価値があります。これにより、パフォーマンスが大幅に改善されていることに気付きました。

もちろん、必要な実際のグリフを生成する問題があります。そのために使用できるbmfontのようなプログラムがあります。または、要求に応じてfreetypeなど、より複雑なレンダリングが必要になる場合があります。私は自分のレンダラーでbmfontをかなり喜んで使用してきました。


9

多くの方法があります-あなたが望むものに依存します...他のどこでもそうであるように、「最良の解決策」のようなものはありません。どのプラットフォームがターゲットですか?どの言語を使用していますか?テキストのサイズ変更/回転について-必要ですか?TrueTypeFontsをレンダリングできるようにする必要がありますか?多言語/ユニコードはどうですか?テキストをどのように保存しますか(どのエンコードなど)?

過去にFTGLだけでなく、純粋なfreetype(http://www.freetype.org/ FTGLはこれに基づいています)、さまざまな種類のビットマップフォント、アウトラインフォントも使用していました。フォントですが、それは私の個人的な好みです。異なる文字セット、エンコーディングなどはもう扱いたくないので、ビットマップフォントのライセンスもTrueTypeFontsよりも簡単で安価です。また、画像をロードできるすべてのプラットフォームで使用できます。openGLで単純にクワッドを使用し、テクスチャの一部をその上にマッピングします。反対側は次のとおりです。フォントは約+/- 50%の係数でのみサイズ変更が可能です。それと一緒に暮らすことができるなら、ビットマップフォントの使用をお勧めします。

異なるエンコーディング/文字セットも処理する必要がある場合は、TrueTypeFontsをロードして使用する方法を見つける必要があります(freetype、別のライブラリ、または独自の実装を使用するなど)...

このトピックに関するさまざまなチュートリアルもご覧ください。

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13ビットマップフォント

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14アウトラインフォント

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Texture Mapped Outline Fonts

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2Dテクスチャフォント

幸運を!


+1パフォーマンスに関する貴重な情報をありがとう、私はNeHeのチュートリアルについて知っていました。私はビットマップフォントを使用したと思います...しかし、それは拡大縮小しませんでした:線で結合された球体上のシーンに浮かぶ約60のラベル、それに対する洞察?(私は、Flyweightパターンを実装する方法を探している必要があります考えていた)
dukeofgaming

1
注意:NeHeのチュートリアルは古い固定機能パイプライン用であり、頻繁に更新されることはありません。最新のOpenGLソリューションを探している場合は、stackoverflow.com
questions / 5262951 /…

6

ビットマップフォントを使用する場合は、Angelcode Bitmap Font Generatorを使用することで間違いはありません。http://www.angelcode.com/products/bmfont/

TrueTypeフォントを1つ以上のテクスチャ(きちんと詰められたグリフを含む)に変換し、UVとスペーシングを含む小さなファイルを出力します(XML出力は特に扱いやすく、スペーシングデータの品質は一般的です真のカーニングなしでも非常に良い)



0

QMLを検討してください。使いやすい構文を備えた完全に機能するUIライブラリです。私の経験では、その機能セットはCEGUIよりもはるかに優れており、主なターゲットはデスクトップアプリケーションであり、オフスクリーンをレンダリングする機能は単なるボーナスであるため、ドキュメント、サポート、コミュニティが優れています。

長所:

  • すべてのレンダリングにバックエンドでOpenGLを使用します
  • ホストシステムで使用可能なフォントを読み込むことができ、リソースとして追加したフォントを解析することもできます。
  • 効率的で高品質の出力のために、符号付き距離フィールドテキストレンダリングを使用します
  • OpenGLテクスチャに直接レンダリングできるため、ゲーム環境に結果を簡単に配置できます。
  • Qtには多くの言語バインディングがあります

短所:

  • Qtは大きなフレームワークです
  • Direct3DまたはVulkanプロジェクトでQMLを使用するには、フープをジャンプしてGLテクスチャを適切なAPIに取り込む必要があります(または、QMLのネイティブD3D / Vulkanレンダラーを作成するのを誰かが待つ)
  • QMLには、リストアイテムのドロップダウンを開くときなど、オフスクリーンサーフェスにレンダリングする場合でもネイティブコントロールを使用しようとする軽微な癖がまだあります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.