2011-05-19 27 views
2

私が開発しているアプリでは、静的な2D画像である大規模な(約1M個の)頂点が表示されます。メモリの制限の問題のために、ユーザーがスクロールまたはズームするたびに新しいデータでVBOを埋めて、イメージ全体が「存在する」という印象を与えています。 enter image description here このアプローチには2つの問題があります。1)応答性は「十分に良い」ですが、スクロールズームを高速化し、不安定にすることができればよいでしょう。 2)私は1回の描画で64kの頂点の限界に固執していました。これは、一度にどれだけの画像を表示できるかを厳しく制限しています。画像の多くを見ることができれば、あるいはそのすべてを同時に見ることができればうれしいでしょう。私たちは試作段階にあり、限界を克服するためにデータを設定しているため、現時点でのパフォーマンスは十分ですが、製品レベルに移行するためには、この制限をなくす必要があります。2D OpenGL ESアーキテクチャ

最近、私は、 "android:largeHeap"オプションを使用すると、モトローラXoomで256 MBのヒープスペースが得られることを発見しました。つまり、画像全体をVBOに保存できます。私の理想的な世界では、単にOpenGLエンジンにVBOを渡し、カメラが動いたことを伝えるか、glScale/glTranslateを使ってズーム/スクロールします。

私の質問は正しいですか?私はいつもチャンクのすべてを "描き"、OpenGlに実際に見られるものを見つけさせるか、またはどのチャンクが自分自身に見えるかを理解させるべきでしょうか? gluLookAtとglScale/glTranslateのようなものを使用する場合の違いは何ですか?

アスペクト比の歪み(画像は数学的に生成され、写真ではありません)は気にしませんが、それよりもはるかに広く、将来的には頂点数が大幅に増える可能性があります。 60M)。御時間ありがとうございます。 enter image description here

+0

"同時にすべてを見る"携帯電話で30Mbpsの30Mbpsレンダリングが強い要件ではないことを願っています。最小ズームを制限して、細かい劣化(詳細レベル)を提供することで、60Mを削減する必要があります – Calvin1602

+0

@ Calvin1602いいえ、それは必須条件ではありません。 :-) –

+0

うまくいけば、2番目の画像にはタイプミスがあることは明らかでした。右のチャンクは「チャンクn」とラベル付けされているはずです。 –

答えて

4

OpenGLが画面上に表示されているものを決して見せないようにします。彼はしません。すべての頂点が変形され、スクリーン上にいないすべての人がクリッピングされます。あなたはあなたのシーンについてOpenGLより優れた知識を持っています。

huuuge 256Mo VBOを使用すると、毎回シーン全体がレンダリングされ、毎回すべての頂点が変換されますが、これはあまりうまくいかないためです。

いくつかの小さなVBO(任意の時点で3x3グリッドのみを表示するなど)を作成し、表示されているものだけを表示します。オプションで、動きの外挿に基づいて将来のVBOを事前に入力してください。

gluLookAtとglTranslate/...の間に違いはありません。どちらも行列を計算します。それだけです。

ところで、あなたの画像が静的であれば、あらかじめ計算しておくことはできませんか?同様に、あなたのデータはズームアウト時に「減らされる」方法を提供していますか?例えばポイントクラウドの場合は、Nポイントのうち1つだけを表示します。

+0

あなたの答えをありがとう。 「事前計算する」とはどういう意味ですか?あなたが提案するように、私はVBOのセットを作成することができますが、それ以上のことを意味するように思えます。おそらくテクスチャを意味するでしょうか?私は、これらがテクスチャではなく、色付けされた頂点であることを忘れていました。スムージング/補間を行うにはOpenGlが必要です。 –

+0

はい、私は本当のテクスチャを意味します。テクスチャ(RTT)で頂点を一度レンダリングし、テクスチャだけを表示することができます(複数ではなく、> 1クワッド→4頂点)。Btw、ズームアウト時に、以前のテクスチャを使って新しいテクスチャをレンダリングすることができます。したがって、60Mの頂点を描画することが可能です。 – Calvin1602

関連する問題