iPhoneのOpenGL ESで、2つの画像をスクロールするにはどうすればよいですか?
質問
UIViewとQuartzを使用すると、2Dゲームには遅すぎることが判明しました
解決
一般にOpenGLには、「スクロール」を行う基本的に2つの方法があります。つまり、表示されているコンテンツを表示方向に垂直にシフトします。
- 表示を調整、つまり「カメラを移動」して、コンテンツが移動するようにします。
- カメラを固定したまま、コンテンツを直接移動します。
これらはもちろん完全に同等であり、互いに逆です。
これらは両方とも、フレームごとにシーンの完全な再描画を行うことを前提としています。もっと「クラシック」にスクロールする(dx、dy)の量だけオフセットしながらフレームバッファーの内容をコピーするという感覚は、OpenGLに非常に適した手法ではありません。
基本的に、スクロール画像の作成は、単一のテクスチャ付きクワッドを描画し、新しいフレームごとにその位置をシフトするのと同じくらい簡単です。
他のヒント
画像のサイズはどれくらいですか? Quartzを介してコンテンツが描画されるUIViewを含むUIScrollViewを使用して、ビューを最大2000 x 2000のサイズまでスムーズにスクロールできました。フレームごとに画像コンテンツを再描画するのではなく、ビューの位置を移動し、Core Animationに残りを任せる場合は、OpenGLに落とさずに必要なパフォーマンスを得ることができると思います。
私が見たほとんどの2-Dパフォーマンスの問題は、drawRectですべてのアニメーションを実行し、コンテンツを絶えず再描画しようとする人々の結果です。一度描画してから、描画されたビューまたはレイヤーの原点を移動するだけです。ビューのコンテンツはOpenGLテクスチャとしてキャッシュされるため、アニメーション化するのが非常に効率的になります。
2-Dの作業では、他のすべての選択肢を使い果たした後、OpenGLを最後に参照する場所と見なします。シンプルなUIViewとコアアニメーションを使用してできることと同じことを行うには、はるかに長い時間がかかります。