iPhoneのOpenGL ESで、2つの画像をスクロールするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/609565

  •  03-07-2019
  •  | 
  •  

質問

UIViewとQuartzを使用すると、2Dゲームには遅すぎることが判明しました

役に立ちましたか?

解決

一般にOpenGLには、「スクロール」を行う基本的に2つの方法があります。つまり、表示されているコンテンツを表示方向に垂直にシフトします。

  1. 表示を調整、つまり「カメラを移動」して、コンテンツが移動するようにします。
  2. カメラを固定したまま、コンテンツを直接移動します。

これらはもちろん完全に同等であり、互いに逆です。

これらは両方とも、フレームごとにシーンの完全な再描画を行うことを前提としています。もっと「クラシック」にスクロールする(dx、dy)の量だけオフセットしながらフレームバッファーの内容をコピーするという感覚は、OpenGLに非常に適した手法ではありません。

基本的に、スクロール画像の作成は、単一のテクスチャ付きクワッドを描画し、新しいフレームごとにその位置をシフトするのと同じくらい簡単です。

他のヒント

画像のサイズはどれくらいですか? Quartzを介してコンテンツが描画されるUIViewを含むUIScrollViewを使用して、ビューを最大2000 x 2000のサイズまでスムーズにスクロールできました。フレームごとに画像コンテンツを再描画するのではなく、ビューの位置を移動し、Core Animationに残りを任せる場合は、OpenGLに落とさずに必要なパフォーマンスを得ることができると思います。

私が見たほとんどの2-Dパフォーマンスの問題は、drawRectですべてのアニメーションを実行し、コンテンツを絶えず再描画しようとする人々の結果です。一度描画してから、描画されたビューまたはレイヤーの原点を移動するだけです。ビューのコンテンツはOpenGLテクスチャとしてキャッシュされるため、アニメーション化するのが非常に効率的になります。

2-Dの作業では、他のすべての選択肢を使い果たした後、OpenGLを最後に参照する場所と見なします。シンプルなUIViewとコアアニメーションを使用してできることと同じことを行うには、はるかに長い時間がかかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top