2013-03-21 13 views
9

背景OpenGLのテキストのレンダリング方法とトレードオフ

私はゲーム​​に取り組んでいます。 OpenGL 1.1と互換性があり、OSX、Windows、およびLinux用にコンパイルできます。

のすべてのベクトルグラフィックを使用します。テキストレンダリングと操作を含めてです。 glutからの「FontStrokeRoman」のやや修正されたバリエーションを使用しています。これは単なる静的な行です。我々はこれがとても好きで、回転/拡大/操作が簡単なようです。ゲーム内のチャットも許可されているので、テキストは即座に描画されます。我々はより/異なるフォントを使用したい

問題

他のいくつかのフォントが好きですが、ストロークやスパインの代わりにポリゴン(曲線など)として構築されたTTFタイプのフォントです。

  • 我々は(我々はゲームにこれまで避けてきた)テクスチャを使用する必要があると思います
  • 彼らはサイズ変更可能/回転可能に/ etc簡単じゃない:これは、いくつかの問題が表示されます。
  • パフォーマンスが大幅に少ない(理論的には?)です

我々は、ポリゴンポイントアレイにTTFフォントを変換して、塗りつぶしの三角測量を試してきました。しかしこれはきれいにレンダリングするのが難しく、ピクセルヒント/アンチエイリアスはこの場合には難しいようです。

私たちは、 'campskeleton'のようなライブラリを使ってポリゴンフォントをスケルトン化することを実験しました。

どうすればよいですか?

私はこの質問が幾分一般的であることを知っています。私たちはパフォーマンスとテキスト操作能力を保ちたいが、より良いフォントを使用できるようにしたい。私はどんな方向への提案にも開放的です。

  • どのように我々適切にアンチエイリアスポリゴンベースのテキストと、まだパフォーマンスを維持:

    いくつかのソリューションは、次のように答えをだろうか?

  • テクスチャを行う実際にはは静的ポイント配列より悪いですか?たぶん私は間違った仮定を持っているかもしれません
  • テクスチャフォントは高速でサイズ変更/回転できますか?
  • 全く異なるもの?
+0

この問題を調べることができます。 1)あなたの現在のフォントの1つとそのエンコーディングの様子、2)使用したいフォントの1つ、3)失敗した実験の例。 – meyumer

+0

現在のフォントはGLUTから来ています。出典:http://code.google.com/p/bitfighter/source/browse/zap/FontStrokeRoman.h私たちはorbitronを使いたいと思っています:https://github.com/theleagueof/orbitron。私は現時点で私にいくつかの実験をされていません。他の開発者のひとりWatusimoto)がコンピュータ上に物事を出力しています – raptor

+3

テクスチャ付きクワッドは、OpenGLのフラットテキストをレンダリングするために非常に高速です。 libfreetype2を使用します。それは容易であり、高品質の結果を生み出し、(テクスチャアトラスを用いて)未処理のポリゴングリフよりも優れた性能を有するであろう。あなたがやっているように、アンチエイリアス化された、または(暗い)ピクセルヒントテキストを描画することはできません。 –

答えて

4

にそれを使用する機会を持っていないとのFreeTypeを使用していますFTGL含む(ここでの提案のいくつかを試して決してものの、FreeTypeのとopenglの間のギャップを埋めるように見えますこれは、私たちのゲームのための完璧なように見えたstb_truetype

を使用するに

Font-Stash:)、私たちはに落ち着いています。レンダリングのパフォーマンスは、私たちが使ったベクタベースのストロークフォントに匹敵しました。テクスチャ付きクワッドは実際には遅くなく、生成され、Font-Stashからのキャッシュは大いに役立ちます。また、stb_truetypeを使用すると、すべてのプラットフォーム間でゲームに依存するが別のに依存する必要はありませんでした。

このソリューションは、真のタイプのフォントにFTGLを使用するよりも、おそらくキャッシングのために、約1桁高速でした。

提案と参考に感謝します。

+0

また、他のソリューションに比べて機能がはるかに少ないため、すべてのユーザーに適しているとは限りません。しかしそれはBitfighterにとって完璧です! – Watusimoto

+0

私はFont-Stashに絶対に驚いています!まさに私が探していたもの。シェーダプログラムと配列バッファのバインドを解除した後、OpenGL 4+のコンテキストでもうまく動作します。 – shinjin

1

私はOpenGLのエキスパートではなく、一般的なグラフィックエキスパートです。 そして、本当に、ラプター、私はあなたが今気分を知っているので、これを言う人になることを嫌う。

私は本当にそれを言いたくはありませんが、正に、テクスチャとポリゴンを意図したとおりに使用して、TTFフォントにショットを付けるだけです。私はそのような使用法が最近あなたの業績に本当に有害であるとは思わない。あなたの欲望に合った巧妙な解決策を試す時間を費やすのではなく、そのまま使用するために時間を節約する方が有益でしょう。

私は、ポリゴン/テクスチャを使用したテキスト描画が、パフォーマンスに何らかの悪影響を与えることは疑います。これは特に今日のコンピュータに適用されます。技術的に何年後にあなたのアプリケーションをサポートするつもりですか?または、おそらくラズベリーのPIでそれを実行したいでしょうか?または、高いグラフィック機能を持たない他のモバイルプラットフォーム?これらのいずれかのサポートは、おそらく、私の主張を無効にする可能性があります。

しかし、私が言ったように、私はあなたが本当に前に突き進むように提案する男であることは本当に嫌いです。なぜなら、誰かが「それを忘れて、コンパイラがそれを処理する」とか、「コンピュータがとても進んでいるので、あなたはそれを心配してはいけない」と言い張っているだけだから、 。私は正直なところ、他の誰かがあなたに経験と良い答えを与えることを願っています。しかし、そうでない場合は、私はちょうどあなたに知らせたいと思います:TTFを使用することは意図された通り、あなたのゲームプレイのパフォーマンスに有害な可能性を予見できません。

+0

「その男」であることを心配する必要はありません。私はそれを期待していました:) – raptor

+0

「もっと合うような巧妙な解決策を試す時間を費やすのではなく、時間を節約する方が有益でしょう。あなたの願い。良いアドバイスが、しかし遅すぎるwaaaaaay! :-) – Watusimoto

1

freetype FT_Outline_Decomposeを使用してアウトライングリフ分解を試しましたか? Freetypeは、フォントレンダリングとグリフアウトライン抽出に最適なツールです。ヒントはサポートされており、レンダリングモードでは、アンチエイリアス、ヒント、モノクロのターゲットなどを指定できます。

フリースタイルにも便利なグリフ/ビットマップキャッシュメカニズムが組み込まれています。

注:OGFLTは、私はいくつかの説得力(感謝セルジュ)後

関連する問題