2011-06-21 9 views
2

私はiPad用のOpenGL ES 2.0アプリケーションを持っています。従来のiOSアプリケーションのように、テキストをUILabelを使用して画面に配置することは可能ですか?OpenGL ES 2.0アプリケーション内にUILabelを配置するにはどうすればよいですか?

ラベルを挿入しようとしましたが、表示されませんでした。可能であれば、誰かがプロセスを説明することができますか? viewcontroller.xibファイルまたはmainwindow.xibファイルにラベルを挿入し、適切なコードをどこに書き込む必要がありますか?

答えて

10

同様の答えであるherehereで説明しているように、OpenGL ESコンテンツは、特定のUIViewをバックアップするCAEAGLLayer内でホストされます。このUIViewは、表示階層内の他のビューと同様に動作します。そのため、UILabelsやその他のコントロールを上に追加することも、このビューをオーバーレイする兄弟として追加することもできます。

インターフェイスビルダを使用してUIをレイアウトする場合、そのインターフェイスのどこかにOpenGL ESコンテンツを含むビューが必要です。このUIViewのサブビューとしてUILabelをInterface Builderに追加して、それを表示させることができます(黒のOpenGL ESの背景に黒のテキストが表示されないようにテキストを適切に色付けすることを忘れないでください)。また、OpenGL ESのホスティングビューで-addSubview:を使用して、プログラムでこれを行うこともできます。

私のテストでは、OpenGL ESのコンテンツにUIKitコントロールを重ねると、レンダリング速度がわずかに低下します(アプリケーションでは1〜5%)。これは実行可能なアプローチです。

この例を実際に見たい場合は、Moleculesアプリケーションのソースコードを参照してください。このアプリケーションは、iPhone上のOpenGL ESコンテンツにオーバーレイされたラベルやその他のコントロールを使用します。

0

ラベルがOpenGLコンテンツの上に置かれている場合にのみ、それを行います。 UIKit要素がOpenGL要素とうまく混ざり合わないことがあります。 UIKit要素の上に透明なOpenGLコンテンツを混ぜるのは本当に遅いです。このような場合は、OpenGLコードにラベルを追加する方がよいでしょう。静的テキストは非常に簡単です。カメラに面した平面オブジェクトとテキストのテクスチャ画像を描画するだけです。動的テキストは、正しいテキストを表示するために、フォントでテクスチャを調整するためにより多くの作業が必要になります。

これを行うには、mainwindow.xibファイルではなく、viewcontroller.xibファイルにラベルを追加します。 UILabelを制御するための適切なコードは、ビューコントローラの.hおよび.mファイルに入ります。標準のXcode iOS OpenGL ESアプリケーションテンプレートでは、メインビューコントローラの.xibファイルに1つのEAGLViewビューが含まれます。そのラベルをそのビューに追加し、ビューコントローラの.hファイル内のIBOutletに接続することができます。

+1

私は同意しません。私のテストでは、OpenGL-ESを含むビューの上にオーバーレイされたUIViewを追加すると、レンダリングのパフォーマンスが約5%低下します。私はいつも非常に良い性能を発揮する私のアプリケーションの1つでそれをやります。一方、非不透明なOpenGL ESコンテンツをUIKit要素の上に置くのは遅いですが、ここで尋ねられることはありません。この場合、OpenGL ESでフルテキストシステムを実装する必要はなく、相当量のコードが必要になります。 –

関連する問題