OpenGL ES。 3レイヤーのスターフィールドテクスチャをスクロールすると、60から取得します-> 40 FPS

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

質問

2Dスペーススクロールシューティングゲームの背景を描画する必要があります。 3つの星のレイヤーを実装する必要があります:背景にある1つの遠くにある星雲(非常にゆっくりと移動)、他の2つの上に遠くにある1つのレイヤー(ゆっくりと移動)、1つの近い星(通常に移動)のレイヤー

最初に試したのは、星の透明なpngである320 x 480の3つのテクスチャを使用することでした。 GL_BLENDとSRC_ALPHA、ONE_MINUS_SRC_ALPHAを使用しました。

3GSでも結果は大きくありませんでした。第一世代のデバイスではFPSが40..50に低下したため、これを間違った方法で行っていると思います。

GL_BLENDを無効にすると、第1世代のデバイスでもすべてが正常に機能し、FPSが再び60に戻ります。そのため、大きな透明テクスチャを避けようとしているという事実である必要があります。

問題は、他の方法でそれを行う方法がわからないことです...

不透明なテクスチャのように最初の星雲のみを描画してから、画面の周りを移動する小さなポイントで中央および最上部の星のレイヤーをエミュレートしようとしますか?

ブレンディングの問題に関する他のアプローチはありますか?レンダリングプロセスを高速化するにはどうすればよいですか? 1つの大きなテクスチャ(タイルセット)が答えですか?

ここで立ち往生していて、出られないので助けてください。

役に立ちましたか?

解決

星をどのように見せたいかわかりませんが、 DrawElements GL_POINTS を使用して、星をテクスチャからジオメトリに移動してみてください。 >または DrawArrays は、上の2つのレイヤーをジオメトリのレイヤーに置き換えるだけです。 PointSize PointSizePointerOES 、および PointParameter を使用してポイントを操作し、ポイントのレンダリングを変更できます。

他のヒント

マルチテクスチャリングを使用して、速度が向上するかどうかを確認できます。各マルチテクスチャステージには一意の変換マトリックスを割り当てることができるため、各レイヤーを異なる速度で変換できる必要があります。

すべてのiPhoneモデルは2つのテクスチャステージをサポートしているため、2つのレイヤーを1つの描画呼び出しに結合できるはずです。それでも、3番目のレイヤーのブレンドに頼る必要があるかもしれません。

アルファテストはアルファブレンドよりも高速である可能性があることにも注意してください。

がんばって!

後部星雲は確実に不透明でなければなりません。他のすべてがその上に描かれています。その背後にある唯一のものは黒だと思います。また、プライドアウトにはポイントがあります。スターレイヤーが事実上1ビットアルファを持つことができると仮定すると、それは間違いなくあなたが試すことができるものです。それに失敗すると、Haraldが言及しているGL_POINTSテクニックも同様に機能します。

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