OpenGL ES 2.0:2Dと3Dの混合


7

1つのOpenGL ES 2.0ゲームで2Dおよび3Dグラフィックスを混在させることは可能ですか?

私のゲームには2Dグラフィックがたくさんあります。2Dグラフィックスは、テクスチャが付いた2つの三角形ポリゴン(長方形を構成)で表されます。私が使用し正字シーン全体をレンダリングするために行列を。

ただし、ゲームに3D効果を追加する必要があります。したがって、メッシュをレンダリングするためにパースペクティブカメラを使用したいと思います。

1つのシーンに正射投影カメラとパースビューカメラ混在させることはできますか?はいの場合、これには大きなパフォーマンスコストがかかりますか?これを効果的に行うための推奨されるアプローチはありますか?2Dグラフィックの90%と3Dの10%しかありません。

ターゲットプラットフォームはOpenGL ES 2.0(iOS、Android)です。開発にはC ++を使用しています。

ありがとうございました。


あなたのために偽のopengタグを修正しました。:)
ChrisE 2011

回答:


10

これは簡単に行えます。

2D要素のビュー変換を正射投影に設定し、レンダリングします。次に、フレームバッファーをクリアする前に、透視投影でエフェクトを描画します。投影はその後に描画されるジオメトリにのみ影響するため、描画する前に目的のモードを設定するだけです。

これは、FPSでHUDを処理する方法と同じです。:)

パフォーマンスへの唯一の影響は、均一な変数(プロジェクトマトリックス)を変更していることです。ですから、状態の変化を最小限に抑えるためにバッチ処理を試してみてください-同じものを同じです。


1
良い答えは+1です。質問に対する回答は明確だったと思います。自分で実験を始めるための確かな情報が得られました。これを承認済みの回答としてマークしています。
Bunkai.Satori

1

フレームバッファーにレンダリングするたびに正投影および透視投影行列を計算する場合、パフォーマンスにわずかな影響があります。それらを変数にキャッシュし、初期化コードで一度計算して保存し、次にglLoadMatrixマトリックスをロードするために使用することをお勧めします。レンダリングメソッドは、擬似コードでは次のようになります。

// Draw 3D things first
glMatrixMode(GL_PROJECTION);
glLoadMatrix(perspective_projection_matrix);
glMatrixMode(GL_MODELVIEW);
Draw3DObjects();
// Draw 2D things second
glMatrixMode(GL_PROJECTION);
glLoadMatrix(orthographics_projection_matrix);
glMatrixMode(GL_MODELVIEW);
Draw2DObjects();

OpenGL ESにはglMatrixModeまたはglLoadMatrixはありません。すべてのCPUベースのマトリックスルーチンが削除されました。同等のことを行うことができますが、自分でロールする必要があります。
John Meacham
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.