マイペースなandroid勉強日記

システムエンジニアをやっています。いつの間にか家電ブログになっちゃいました。

OpenGLのライブ壁紙を作ってみました。

 

■ライブ壁紙に再挑戦

以前、ちょっとOpenGLのライブ壁紙用に本を購入していたのですが、

参考書を買いました。『初めてのOpenGL ES』

 今日は改めて『初めてのOpenGL ES』を読みました。

サンプルプログラムを参考に色々試した結果、

なんとか画像の一部を表示し、アニメーションさせる所まで出来ました!

今回作成したのは『画像の一部を切り取って表示し、画面上で動かす』プログラムです。

f:id:junjun0011:20121224203408p:plain

 ■本書のサンプルソースをダウロード
  以下のサイトからサンプルプログラムをダウンロードします。
 ⇒http://code.google.com/p/learning-opengl-es/

■サンプルプログラム『OpenGLSample_ex_3.java』をカスタマイズ
 『OpenGLSample_ex_3.java』はOpenGLでライブ壁紙を表示するサンプルプログラムなので、このプログラムを色々調べてみる事にしました。

①画像を変更
 テクスチャの画像を以下の様に変えてみました。画像を4箇所に分け、必要な部分だけを切り取って表示する作戦です。(フリーソフトで背景色を透過させてあります。)

f:id:junjun0011:20121224204527p:plain


②描画処理を変更

 テクスチャから表示したい部分を指定する処理はsetTextureArea()、画面上に表示させる場所を設定するのはdrawQuad()です。サンプルプログラムではテクスチャの切り取り位置と画面への表示が固定だったので、その箇所を変数化して、描画処理が呼ばれる毎に値を変更してみました。
 setTextureArea()、drawQuad()を繰り返し呼び、画像を複数個出してみることにしました。

③テクスチャの透過処理を有効にする

 サンプルの状態ではpngファイルの透過部分が有効になりませんでした。調査した所、
 > gl10.glEnable(GL10. GL_ALPHA_TEST ); 

の部分を下記の様に変更すると透過処理が有効になりました。
  > gl10.glEnable(GL10. GL_BLEND );
  > gl10.glBlendFunc(GL10.GL_SRC_ALPHA ,GL10. GL_ONE_MINUS_SRC_ALPHA);

■プログラムを実行

 実機で動作させてみたら、すごい滑らかでビックリしました!
 普通のViewでライブ壁紙を作った時はアニメーションがぎこちないし、ホームの画面が遅くなってしまっていたのですが、OpenGLだとこんなに軽いんですね。
 
 もっとテクスチャに色々な画像を用意して、様々な画像を表示させてみたり、
 画像の動作にこだわったりすれば、GooglePlayで配信されている様なクオリティの高いライブ壁紙に近づけそうです!頑張ろう。