質問

OpenGL ESを使用してiPhone用の2Dゲームを開発しています。320x480ビットマップ画像を永続的な背景として使用したいと思います。

最初に考えたのは、320x480のクワッドを作成し、その上に背景を表すテクスチャをマッピングすることでした。だから... 320x480の画像で512x512のテクスチャを作成しました。次に、それを320x480クワッドにマッピングしました。

この背景をフレームごとに描画し、その上にアニメーションスプライトを描画します。これは、これらすべてのオブジェクト(背景+スプライト)の描画が遅すぎることを除いて、正常に機能します。

いくつかのテストを行ったところ、速度低下がピクセルパイプラインにあることがわかりました。当然のことながら、大きな背景画像が主な原因です。これを証明するために、背景の描画と他のすべてを非常に高速にレンダリングしました。

バックグラウンドを維持し、パフォーマンスを向上させる方法に関するアドバイスを探しています。

詳細情報は次のとおりです。

1)現在、シミュレータでテストしています(Appleがライセンスを待っています)

2)背景は、128kに絞り込まれたPVRテクスチャです

3)この背景をカラーバッファにキャッシュする方法があるかもしれないと思っていましたが、運がありませんでした。 OpenGL ESに慣れていないか、機能しない愚かなアイデアかもしれません:

4)背景全体を常に更新する必要はなく、移動するスプライトによって描画された部分だけを更新する必要があることを認識しています。背景の一部を(必要に応じて)別のテクスチャとして、またははさみボックスでリフレッシュする手法を検討し始めましたが、これはエレガントではありません。

ヒント/アドバイスは大歓迎です...

ありがとう。

役に立ちましたか?

解決 3

これに関する情報を提供してくれたすべての人に感謝します。すべてのアドバイスは何らかの形で助けになりました。

しかし、ここでの主な問題は、シミュレーター自体の動作であることが判明したことを明らかにしたかった(Andreasの応答で暗示されているように)。デバイス上でアプリケーションを取得できたら、はるかに優れたパフォーマンスを発揮しました。これは、ゲームを開発する前に、デバイスがシミュレーターよりもはるかに遅いことを示す多くの投稿を見ていたためです。これは一部のインスタンス(たとえば、一般的なアプリケーションロジック)に当てはまる場合がありますが、私の経験では、デバイスでのアニメーション(特に3D変換)ははるかに高速です。

他のヒント

  1. シミュレータでパフォーマンステストを実行しないでください。今まで!
    実際のハードウェアとの違いは非常に大きいです。両方向に。
  2. フレームごとに背景を描画する場合:
    フレームバッファをクリアしないでください。とにかく背景は全体をオーバードローします。
  3. 本当に背景テクスチャが必要ですか?
    頂点の色を介して色のグラデーションを使用するのはどうですか?
  4. テクスチャに2ビットモードを使用してみてください。
  5. バックグラウンドに必要のないすべてのレンダリングステップをオンにします。
    例:照明、ブレンド、深度テスト、...

描画コードの一部を投稿できれば、はるかに簡単に支援できます。

2Dゲームを作成している場合、既存のライブラリを使用しない理由はありますか?具体的には、iPhone用のcocos2dはあなたの時間の価値があるかもしれません。自分ですべてを行う問題を解決する方法についての質問に答えることはできませんが、あなたが話していること(上にスプライトを持つ1つのフルスクリーン背景を持っている)をcocos2dで正確にやったと言えますすばらしいです。 (60 fpsで十分に高速であると仮定します。)自分でそれを行う理由があるかもしれませんが、可能であれば、少なくともcocos2dで簡単なプロトタイプを作成し、それが役に立たないかどうかを確認することを強くお勧めします。 (iPhoneバージョンの詳細とソースはこちらです: http://code.google.com/ p / cocos2d-iphone /

OpenGL ESの経験はあまりありませんが、この問題は一般的に発生します。

「カラーバッファ」についてのあなたのアイデアは良い直観です。基本的には、背景をフレームバッファとして保存し、前景を描画する前にレンダリングバッファに直接ロードする必要があります。

OpenGLでは、これはフレームバッファオブジェクト(FBO)を使用することでかなり簡単です。残念ながら、OpenGL ESがそれらをサポートしているとは思いませんが、どこかで見始めることができるかもしれません。

VBO(頂点バッファーオブジェクト)を使用してみて、速度が向上するかどうかを確認できます。チュートリアルはこちら

さらに、 OpenGL ES v1.1 以降、

向けに設計されたglDrawTex(テクスチャの描画)と呼ばれる関数です
  

ゲームの背景ペインティング、ビットマップフォントグリフ、2Dフレーミング要素の高速レンダリング

  1. AppleのGLPaintの例に似たフレームバッファオブジェクトを使用できます。
  2. テクスチャアトラスを使用して、描画呼び出しの回数を最小限に抑えます。 glTexCoordPointerを使用して、各画像を正しい位置にマッピングするテクスチャ座標を設定できます。頂点バッファーも忘れずに設定してください。理想的には、1回の描画呼び出しで2Dシーン全体がレンダリングされます。
  3. 可能な場合は、状態の有効化/無効化を避けます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top