2012-08-01 25 views
12

PowerVR OpenGL ES 2 SDKを使用してWindowsでC++でゲームを開発していて、アンドロイドまたはiphoneに移植することができます。OpenGL ES 2でテキストを描く正しい方法

すべては大丈夫ですが、私は今テキストレンダリングに固執しています。 OpenGL ES 2.0でC++を使用してテキストをレンダリングする方法(TTFまたはビットマップフォントを使用)に関する詳細なチュートリアルは見つかりませんでした。 Javaやobjective-c(textview、surfaceviewなど)を使ってアンドロイドやiphoneでテキストをレンダリングするという話題がたくさんありましたが、それは私が必要と考えるものではありません。私は "クロスプラットフォームソリューション"が必要です。

(?または私はこの時点で間違っているかもしれない)少し研究した後、私は私の心の中で解決策があります。

ロードとバインドビットマップフォントテクスチャ - >解析のテキストを生成およびバインド頂点配列、UV配列とのマッピングテクスチャ、... - >は、私はまだテストが、私は私の解決策を使用している場合、それは問題だとは思わないよ

をスクリーニングするために、それをレンダリング:私は、テキストを変更したい場合には(のために例:私はユーザーのスコア、または画面上のタイマーを作っています)私は頂点配列とuv配列を再バインドする必要があります。いいアイデアだよね?

OpenGL ES 2で画面にビットマップフォントを描画する方法はありますか?

答えて

2

テキストレンダリングは、3Dライブラリーの世界では、ほとんどの新人がすぐに直面する必要があるトピックの1つです。

テキストレンダリングについてインターネット上には多くのチュートリアルがあり、多くの書籍がそのことについて話しています。私のアドバイスは、周囲を見回し、彼らの働きを理解しようとすることです。

リアルタイムコンピューティングのシナリオ(コンピュータゲームのようなもの)では、TTFのジオメトリベースのテクニックがあまりにも多くのリソースを消費するため、TTFフォントは実行可能な解決策ではありません。

非常に一般的な解決策(たとえば、私のPATRIA 3Dエンジンで使用しているもの)は、異なる文字のグリフを含むテクスチャアトラスを使用することです。アプリケーションロジックはテキスト - グリフ位置関係を処理する必要がありますあなたの最終的な「画面上のテキスト」を構成するクワッドのテクスチャリングのためのものです。それはサイズのカーニング/間隔/別のテキストなどのトピックを含むので

テキストレンダリングは、単純な話題ではないなどのベスト(トピックを理解するには、このリンクをたどるために

てみてください私は間違っていないよ場合は、このの著者wikiはこのコミュニティの活発なメンバーです)。あなたが言及

http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01

4

ソリューションを移動するための方法である、そして、あなたのテキストを変更した場合確かに、あなたはそれを表すジオメトリを再作成する必要があり、およびOpenGLにそれを再送信します。

このレクリエーションのステップには時間がかかりますが、必ずしもそれほど多くはありません。

  • 、このテクスチャを使用してテキストを描画するビットマップ
  • あなたのテクスチャアトラス作成フォントメトリックを考慮すると(サイズ、カーニングなど:テキストをレンダリングするための

    は、問題は2つの主要コンポーネントがあります)と、おそらくサブピクセルアンチエイリアス

  • あなたのテクスチャアトラスを作成するには

、あなたの周り(おそらくfreetypeに使用)、または(など)AngleCode's bmfontなどの既存のツールを使用していくつかのコードを見つけることができます。

元気になるテキストのために多くの詳細があるので、描画の場合は、既存のコードに基づいて独自のコードを展開することをお勧めします。あなたの頭痛を始めるには、this articleをご覧ください。

近年のインスピレーションの源はNicolas Rougier's freetype-glです。また、バルブからこのシーグラフ紙(半減期およびポータルの作成者)を参照してくださいhttps://www.mapbox.com/blog/text-signed-distance-fields/

の記述のバリエーションを:

+0

誰かが回転をサポートするOpenGL ES 2.0のAndroidの例を持っていますか? – Burf2000

0

ゲーム内でテキストを描画するための適切な方法はグリフ含む距離フィールドでテクスチャアトラスを使用することです技術:http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf

距離フィールドベースのテキスト品質は、プレーンビットマップベースのテキストよりもはるかに高いです。また、距離フィールドがフォントのビットマップ表現をそのまま使用するため、メモリの使用量も少なくなります。

関連する問題