0

外部の要件 --- それらを嫌う必要があります...

EGL と OpenGL ES を使用して画面に描画する OpenGL ES ゲームがあります。これにはソースがありません。バイナリ blob として提供されます。ゲームの EGL および OpenGL への呼び出しとプラットフォームの実装との間を仲介するインターフェイス レイヤーを実装しています。

それは正常に動作します。しかし、ゲーム全体の出力を 90 度回転できるようにする必要があるという予期しない外部要件があります。

これを行うための良い(簡単で速い)方法を誰かが提案できますか?頭のてっぺんから、次のことを考えることができます。

  • ゲームの射影行列に適切な変換を挿入します。これが最速の解決策のようです。しかし、これを確実に行うためのゲームの射影行列の操作について十分な知識があるとは思いません。さらに、プロジェクション マトリックスを通過しないOpenGL 呼び出しを使用して画面にアクセスすると、ゲームが混乱します。( glReadPixels()、たとえば。)

  • ゲームにレンダリング コンテキストをオフスクリーン バッファに渡します。そこでレンダリングし、ゲームが呼び出されたときにeglSwapBuffers()結果を画面にコピーします。ここでは、テクスチャへのレンダリングが役立ちます。問題: 1 つではなく 2 つの描画パスを効果的に実行しているため、これはパフォーマンスに影響します。また、Render-to-Texture は OpenGL ES で標準化されていません。(私のターゲット プラットフォームである Android は、共有コンテキストを確実にサポートしていません。)

  • カラーバッファにレンダリングしてglReadPixels()から、データをコピーして画面上でソフトウェア回転を実行するために使用します。問題: 非常に遅く、バッファーのサイズを制御できません (つまり、画面が 640x480 で、90° 回転して描画している場合、ゲームに 480x640 のカラー バッファーを提供したいのです)。

  • 他の?

ゲーム固有のハックは、ゲームのバイナリを別のものと交換できるようにする必要があるため、ここではオプションではありません。これは一般的な修正である必要があります。ゲームのソース コードを制御できないため、ゲームを変更することはできません。

助言がありますか?要件を撤回するよう説得しようとする非技術的なもの以外に?

4

1 に答える 1

0

z軸に沿ってglRotateを使用しなければならないという問題は何ですか?? アプローチ 1 が有効です。

ピクセル操作が重く、縦横比などを台無しにする可能性があります。

描画に入る手順は次のとおり
です。 1. 変換マトリックス (モデル/プロジェクション) を
設定します。
横向きの場合はそれぞれ幅 - それぞれ高さ/幅として ba を設定します 3. 行列を描画します

画面を回転すると、オブジェクトが再びレンダリングされます。したがって、glRotate が最善の方法です。

于 2012-02-08T15:09:02.447 に答える