<   2016年 10月 ( 3 )   > この月の画像一覧

GLSurfaceViewを使って見る(3)

ゲームの演出に必要なので、テクスチャを回転してみる。

ポリゴンの回転は普通にできたのだが、それにテクスチャを張って回転すると、
全く予想できない図になってしまった。

縦長の画像を張って回転したのだが、90°回転させたら、
微妙なゆがみが生じたのだ。

これは、おそらく、ディスプレイのアスペクト比の問題だろう。
OpenGL系では、座標はピクセル単位ではない。

F-10Dのディスプレイサイズは、720x1280 だが、
-1.0~1.0 という数値で指定するのだ。

というわけで、ソレを考慮して、回転させると、90°でも、ゆがまずに回転した。
…のだが!

縦長のテクスチャというのは、128x512 というサイズの画像を使用したのだ。

ところが、他のサイトを見ていたら、こういう一文が載っていた。

「OpenGL ESでは、正方形の画像データしかテクスチャマッピングの元画像として受け入れてくれない。」


えぇ!?
表示できましたけども…!?

これは機種依存なのか…。
[PR]
by miries | 2016-10-23 16:36 | ゲームを作る

GLSurfaceViewを使って見る(2)

私が使用しているスマホが、4年前のF-10Dなので、
OpenGL ES 1.0 にしか対応していない。

今時、1.0で作るのもどうか。
試しに作っているだけではあるが、ソースコードに、

GL10

という記述をしているため、あとでバージョンを上げると、この辺りを全部差し替える作業が発生するし…。

などと思いつつ、背景部分の移植完了。
背景は、良く使う手として、小さい画像をタイル状に敷き詰めて、スクロールさせている。

Canvasを用いた描画では、画像を何枚も並べて描画していたが、
GLを用いると、1枚のポリゴンに、UVを設定するだけでいける。

具体的には、u = 0.0 ~ 1.0 とすれば、1枚分が表示されるが、
u = 0.0 ~ 5.0 にすれば、5枚分になるわけだ。

ところが、実際にやってみると、パターンが細かい画像を使用したので気づいたのだが、
フルスクリーンのうち、数か所がたまにちらついて見える。

これは…いわゆる、ダブルバッファを使わないといけない案件なのでは。
しかし、OpenGL ES1.0には、フレームバッファはなく、
1.1のextensionを使わないといけないらしい。

しかも extensionだから、どの端末でも実装されているという保証はない。
いやまあ、今1.0で作ってるのが悪いんだけどさ。

ところが、だ。
テストを重ねると、どうやら、描画が追い付かずにちらついているわけではないらしい。

スクロールさせるために、uvをそれぞれ、0~1の範囲で動かしているわけだが、

u= 0.184f;
v = 0.816f;

と設定すると、描画が崩れている。
これは…単なる float誤差!?
しかも、全体の一部の描画のときだけ??


めんどくさいのきたー。
[PR]
by miries | 2016-10-20 16:35 | ゲームを作る

GLSurfaceViewを使って見る

基本、2Dのゲームしか作らないので、ずっとSurfaceViewを使って開発していたのだが。
ちょっと速度を上げようと思い、試しにGLを使って見ることにした。

ちなみに、SurfaceViewと Viewでは、ハードウェアアクセラレーションの使用なので、Viewの方が速いとか、色々な情報があるわけですが。

手持ちのメイン機種 F-10D (4年前のモデル)では、SurfaceViewの方が速かった。
GPUのON/OFFでも比べたが、OFF(デフォルト)の方が速い。

FPSで言うと、SurfaceView で、40FPS程度のものが、ViewやGPU使用だと、30FPSくらいになった。
SurfaceViewでも、ほぼ何も表示しない状態でも、50FPSを超えるかどうか、というのが最速。

まったく同じ描画はまだ作れていないが、
それよりももっと負荷を上げた状態(128x128の画像100個)でも、
GLSurfaceViewは、60fps前後を維持できた。
さすがGL。

まあ、問題もあって、GL系だと、フォント表示が面倒なんだよね…。
そもそも、画像1枚表示するのも、テクスチャバッファ作って、頂点バッファ作って…とか、
色々面倒だし。

この辺りの手順、そろそろスマートになってもいいと思うんだけど…ならないねぇ。

さて、GLの速度テストは完了したから、全ライブラリをGL系に修正する作業が待っている。

逆にGLで楽になるのは、タイルパターンの描画かな。
通常のdrawBitmapでタイルペイントすると、始点の変更ができないとか、面倒すぎるし。
UVをいじるだけで表現できるので、楽でいいわー。
[PR]
by miries | 2016-10-14 17:08 | Android