「Helloworld」などの文字列と「Courier」などのフォント名があります。この文字列を表すポリラインの配列を取得する必要があります。これらのポリラインはOpenGLシーンでレンダリングされます。
つまり、各文字を1つ以上の2Dポリラインに変換する必要があります。
iOS(Objective-CまたはC ++)でこれを行うにはどうすればよいですか?
「Helloworld」などの文字列と「Courier」などのフォント名があります。この文字列を表すポリラインの配列を取得する必要があります。これらのポリラインはOpenGLシーンでレンダリングされます。
つまり、各文字を1つ以上の2Dポリラインに変換する必要があります。
iOS(Objective-CまたはC ++)でこれを行うにはどうすればよいですか?
Core Text を使用して、テキストとフォントからパスを取得できます。CTFontCreatePathForGlyph
特定のシンボルの特定のグリフのパスを提供するCore Text メソッドが呼び出されます。それを使用して、すべてのグリフのパスを取得できます。
「低レベルのテキスト レンダリング」に関するこの記事をご覧ください。また、この記事のサンプル コードを見て、テキストのパスを取得する方法 (および Core Animation を使用してそれをストロークする方法) を確認することもできます。
パスをポリラインに変換する必要があります (ポリラインは単なる点のリストであるのに対し、パスには円弧と曲線が含まれる場合があるため)。
FreeType ライブラリは、さまざまなフォント ファイル (TrueType、PostScript など) の読み込みをサポートしています。FreeType エンジンは、フォントを読み込んでビットマップにレンダリングできますが、詳細なグリフ情報を返すこともできます。
FT_Outline_Decompose
関数を使用してを取得しFT_Outline
、それを構成する線、円弧、および曲線に分解できます。FT_Outline_Funcs
アウトライン処理中に呼び出される一連の関数ポインタを構造体に指定するだけです。これらの関数はユーザーが定義するため、アプリに最適な形式 (ポリラインなど) に簡単に変換できます。
API リファレンス:
頻繁に変更されないテキストの大きなブロックをレンダリングする場合、各フレームで一連の曲線をレンダリングして塗りつぶすと、非常にコストがかかることに注意してください。通常の解決策は、ポイント サイズを選択し、必要なすべてのグリフをテクスチャにレンダリングし、テクスチャ アトラスを使用して文字列をクワッドにレンダリングすることです。
フォントに関する OpenGL FAQ の 1 つに役立つ情報がいくつか掲載されていますが、FreeType の使用についても言及されています。テクスチャ アトラス テクニックは一読の価値があります。