11

バックグラウンド

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

テキストのレンダリングや操作など、すべてにベクターグラフィックを使用しています。GLUTの「FontStrokeRoman」のわずかに変更されたバリエーションを使用します。これは単なる静的な線の集まりです。非常にうまく機能し、回転/スケーリング/操作が簡単なように見えるので、これが気に入っています。また、ゲーム内チャットも可能であるため、テキストはその場で描画されます。

問題

より多くの/異なるフォントを使用したい。

他にも気に入ったフォントがいくつか見つかりましたが、それらはすべて、ストロークやスパインではなく、ポリゴン(曲線など)として作成されたTTFタイプのフォントです。これにより、いくつかの問題が発生します。

  • テクスチャを使用する必要があります(これまでゲームで避けてきました)
  • それらは簡単にサイズ変更/回転可能/などではありません。
  • パフォーマンスは大幅に低下します(理論的には?)

TTFフォントをポリゴンポイント配列に変換してから、塗りつぶしを三角形分割することを試みました。ただし、これを適切にレンダリングすることは困難でした。この場合、ピクセルヒント/アンチエイリアシングを実行するのは難しいようです。

'campskeleton'などのライブラリを使用してポリゴンフォントをスケルトン化する実験も行ったので、ベクトルストロークフォントを出力できます(あまり成功していませんが、見栄えがします)。

私たちは何をすべき?

私はこの質問がやや一般的であることを知っています。パフォーマンスとテキスト操作機能を維持しながら、より優れたフォントを使用できるようにしたいと考えています。私はあらゆる方向の提案を受け入れます。

いくつかの解決策は、次の答えになる可能性があります。

  • ポリゴンベースのテキストを適切にアンチエイリアスし、パフォーマンスを維持するにはどうすればよいですか?
  • テクスチャは、静的なポイント配列よりも実際にパフォーマンスが劣りますか?多分私は間違った仮定を持っています
  • テクスチャフォントをすばやくサイズ変更/回転できますか?
  • まったく違うもの?
4

3 に答える 3

4

説得力があり(Sergeに感謝)、ここでいくつかの提案(freetypeを使用するFTGLを含む)を試した後、次のことに落ち着きました。

フォント-stb_truetypeを使用するスタッシュ

これは私たちのゲームにぴったりのようでした。レンダリングのパフォーマンスは、使用したベクターベースのストロークフォントと同等でした。テクスチャードクワッドは、一度生成されるとそれほど遅くはなく、Font-Stashからのキャッシュは非常に役立ちます。また、stb_truetypeを使用することで、すべてのプラットフォームでゲームに別の依存関係を必要としないようになりました。

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

提案とポインタをありがとう。

アップデート

上記のFont-Stashリンクは、ここにある元のリンクのフォークでした。その後、オリジナルが更新され、フォークの機能の一部が追加され、さまざまなレンダリングバックエンドを使用できるようになりました。

于 2013-03-30T15:34:54.203 に答える
2

私はOpenGLの専門家でも、一般的なグラフィックの専門家でもありません。そして、本当に、ラプター、私はあなたが今どのように感じているか知っているので、これを言う人になるのは嫌いです。

私はそれを言うのは本当に嫌いですが、正直なところ、意図したとおりのテクスチャとポリゴンを使用して、TTFフォントを試してみます。このような使用法が、最近のパフォーマンスに本当に悪影響を与えるとは思えません。自分の欲求により合った賢い解決策を試すために時間を費やすよりも、それらをそのまま使用する時間を節約する方が価値があるでしょう。

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

しかし、私が言ったように、私はあなたがそのまま前に進むことを提案する人になるのは本当に嫌いです。なぜなら、私はそこにいて、パフォーマンスのアドバイスを求めて(時にはもっと小さなことでも)、誰かが「それを忘れて、コンパイラがそれを処理する」または「コンピュータは非常に高度なので心配する必要はない」と言ったときにうめき声を上げるだけです。誰か他の人が経験を積んで来てくれて、あなたにとって良い答えになることを正直に願っています。ただし、そうでない場合は、お知らせしたいと思います。意図したとおりにTTFを使用すると、ゲームプレイのパフォーマンスに悪影響が及ぶ可能性は予測できません。

于 2013-03-21T18:01:34.840 に答える
1

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

Freetypeには、便利なグリフ/ビットマップキャッシュメカニズムも組み込まれています。

注:OGFLTは、freetypeとopenglの間のギャップを埋めているようですが、使用する機会はありません。

于 2013-03-21T18:41:33.900 に答える