12

PowerVR OpenGL ES 2 SDK を使用して、C++ を使用して Windows でゲームを開発しています。それを Android または iPhone に移植できます。

すべて問題ないように見えますが、テキストのレンダリングに行き詰まっています。C++ を使用した OpenGL ES 2.0 でのテキストのレンダリング (TTF またはビットマップ フォントを使用) に関する詳細なチュートリアルが見つかりません。javaまたはobjective-c(テキストビュー、サーフェスビュー、または何とか何とか)を使用してAndroidまたはiPhoneでテキストをレンダリングすることに関する多くのトピックの話を見つけましたが、それは私が必要としているものではないと思います。「クロスプラットフォーム ソリューション」が必要です。(または、この時点で間違っているのでしょうか?)

少し調査した後、解決策が頭に浮かびました。

ビットマップ フォント テクスチャをロードしてバインド->テキストを解析し、頂点配列を生成してバインドし、UV 配列でテクスチャをマッピング... ->画面にレンダリング

まだテストしていませんが、ソリューションを使用する際に問題があると思います: テキストを変更したい場合 (たとえば、ユーザー スコアや画面上のタイマーを作成している場合)、頂点配列と uv を再バインドする必要があります。配列、それは良い考えではありませんよね?

OpenGL ES 2 で画面上にビットマップ フォントを描画するためのより良い方法/正しい方法はありますか?

4

3 に答える 3

4

あなたが言及した解決策は道です。実際、テキストを変更する場合は、それを表すジオメトリを再作成し、OpenGL に再送信する必要があります。

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

テキストをレンダリングする場合、問題には 2 つの主なコンポーネントがあります。

  • テクスチャ アトラス ビットマップを作成する
  • フォント メトリクス (サイズ、カーニングなど) と場合によってはサブピクセル アンチエイリアシングを考慮して、このテクスチャを使用してテキストを描画します。

テクスチャ アトラスを作成するには、いくつかのコード (おそらく freetype を使用) を見つけるか、既存のツール ( AngleCode の bmfontなど) を使用できます。

描画については、見栄えの良いテキストを作成するための詳細がたくさんあるため、既存のコードに基づいて独自のコードを展開することをお勧めします。頭痛を始めるには、この記事をご覧ください。

Nicolas Rougier の freetype-glコードは、現代の優れたインスピレーション源の 1 つです。

于 2012-08-03T09:37:04.193 に答える
2

テキスト レンダリングは、ほとんどの初心者が遅かれ早かれ 3D ライブラリの世界に直面する必要があるトピックの 1 つです。

インターネット上にはテキスト レンダリングに関するチュートリアルがたくさんあり、多くの書籍でテキスト レンダリングについて説明されています。私のアドバイスは、周りを見回して、それらがどのように機能するかを理解しようとすることです.

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

非常に一般的な解決策 (たとえば、私が PATRIA 3D エンジンで使用するもの) は、さまざまな文字のグリフを含むテクスチャ アトラスを使用することです。アプリケーション ロジックは、テキストを処理する必要があります。最終的な「画面上のテキスト」を構成するクワッド。

テキストのレンダリングは、カーニング/スペース/さまざまなテキスト サイズなどのトピックを含むため、単純なトピックではありません。

トピックを最もよく理解するには、このリンクをたどってみてください (私が間違っていなければ、この wiki の作成者はこのコミュニティのアクティブなメンバーです)。

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

于 2012-08-03T07:12:49.830 に答える
0

ゲームでテキストを描画する適切な方法は、距離フィールドを含むグリフでテクスチャ アトラスを使用することです: https://www.mapbox.com/blog/text-signed-distance-fields/

Valve (Half-Life と Portal の作成者) のこの Siggraph ペーパーも参照して、さまざまな手法について説明しています。

距離フィールド ベースのテキストの品質は、プレーンなビットマップ ベースのテキストよりもはるかに高くなっています。また、距離フィールドはフォントの逐語的なビットマップ表現よりも小さいため、使用するメモリも少なくなります。

于 2015-12-07T20:07:27.240 に答える