AppNext Press 

アンドロイドアプリ開発をしているAppNextによるAndroidアプリ開発・リリース情報をお届けします。 ツイッターもやっています。ぜひフォローしてください♪ 【@AppNextJP】

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop

OpenGLでのアルファ・ブレンディングについて

 またもや開発メモ。今回のテーマは「Open GLのアルファ・ブレンディングについて」です。

絶対爆発させんなよ?~爆弾で運試し~』(通常版はこちら!/ソーシャル版はコチラ!)を制作していたときのこと。

このゲームアプリは『OpenGLで作るAndroid SDKゲームプログラミング』を参考にして作りました。


OpenGLで作る Android SDKゲームプログラミングOpenGLで作る Android SDKゲームプログラミング
(2011/04/07)
中島 安彦、横江 宗太 他

商品詳細を見る



 で、いざ画面描画をプログラミングしていたときのこと。この本では画像の背景色を消すには「加算合成」(glBlendFunc(GL_SRC_ALPHA,GL_ONE);)でイケると書いてあるのですがなぜかダメでした(上手くブレンドされず背景色が消えるどころか、背景色が別の色で表示されてしまう)。そこでいろいろなアルファ・ブレンディングの組み合わせを試してみること小一時間(といっても5~6時間くらいやっていた気が・・・w)。ようやく原因がわかったんです。

上記の本で使用されているテクスチャ(ハエたたきゲームのハエの画像)の背景色は黒。で、自分が使用していた画像(爆弾のテクスチャやテキストのテクスチャですね、はい)には背景色がついていなかったんです←おいおいw

つまりは単なる凡ミスだったわけですねw

そこで再度、背景色をつけたテクスチャを作成するのは面倒だったので、なんとか背景色なしのテクスチャをうまくアルファ・ブレンディングして描画できないかと試行錯誤していたわけです。

上記の本以外にも、オライリーから出ている『初めてのOPENGL ES』で調べたりネットで調べたりしてたんですが、上手くいかない・・・。←すっごい焦ってましたよ、当時はw


初めてのOpenGL ES初めてのOpenGL ES
(2011/07/21)
山下 武志

商品詳細を見る


で、ようやく上手くいったアルファ・ブレンディングの組み合わせがこれ↓


glBlendFunc(GL_SRC_ALPHA, GL_MINUS_SRC_ALPHA);


でした。

もう一度言っておきますが、①描画させるテクスチャに背景色をつけていない、②全体の描画領域はglClearColor(0.0f,0.0f,0.0f,1.0f);で塗りつぶしている、③②を行ったうえで全体の背景画像を描画、という手順で処理した場合に上記のアルファ・ブレンディングの組み合わせで上手くいきました。(②については他の色で塗りつぶした場合を試していないので、もしかしたら別の色で描画領域全体を塗りつぶした場合でも上手くいくかもしれません)。


『初めてのOPENGL ES』の著者の方も仰っていますが、アルファ・ブレンディングは「習うより慣れろ」だと思います。いろいろな組み合わせを試してベストな描画を見つけていくことが大事なんだなーと実感したわけですね、はい。


でも、テクスチャを自分で作って、それを自分でプログラミングしてっていう作業は思ったより大変でした。テキストが直接描画できればスッッッッッゴク楽なんですがOpenGLにはそれができない。なのでテキストを表示するのにもいちいち画像を準備しなくちゃいけない。気に入らなかったらまた画像の作り直し・・・ホント泣けてくるよーw


でも収穫の多い経験ができたので結果的に良かった、良かった。


そんな感じでいろいろと苦労した(「そんな大した苦労でもないだろ?」とか言わないでーw)Androidゲームアプリ『絶対に爆発させんなよ?~爆弾で運試し~』は通常版ソーシャル版ともに好評公開中です。よかったら遊んでみてください。



↓ツイッターにてつぶやき中!よろしければフォローお願いします。

Twitterボタン
Twitterブログパーツ

スポンサーサイト

PageTop

Android 画面の明るさ調節機能を実装する

プログラミングに関する覚書のようなものを書いてみたいと思います(最近忘れっぽくなってきた自分のためにもw)。

今回のテーマは「画面の明るさ調節機能を実装する」です。

新作アプリ『Battery Support(バッテリーサポート)』のなかでもこの機能を実装しています(メインではありませんがw)。

実装したのはこんな感じ↓

① SeekBarでお好みの明るさを設定する
  (もちろんSeekBarを動かした時点ですぐにその明るさが画面に反映されるようにする)

② SeekBarで選択した値を「端末画面の明るさ」の値(screen_brightness)として保存する
(アプリ内画面の明るさの値ではないので注意!)

③ アプリを終了して他の画面になっても、設定した明るさが反映されている


まずやってみたのがSeekBarで選択した値を直接端末画面の明るさの値として保存しようと試みた。
一応これで上手くはいく。が重大な問題が発生。。。

それは、SeekBarを動かしてもすぐにその明るさが画面に反映されないということです。
これではユーザーにとってちょっと使い勝手が悪い。というか、悪すぎるw

そこで次に試したのが、SeekBarでは「アプリ内画面の明るさ」の値を変更するようにして、その値を上手く「端末画面の明るさの値」として設定・変更したことでした。

これはバッチリ上手くいきました。ですがちょっと面倒な問題があります。
それは「アプリ内画面の明るさの値」(WindowManager.LayoutParamsのscreenBrightness)の範囲と「端末画面の明るさの値」(Settings.System.getString(getContentResolvor(),"screen_brightness")で取得できる値)の範囲が異なるということです。
もう一つ言うと、画面の明るさをユーザーに対して数値で表示したい場合(『Battery Support』のなかでは表示していませんが)、普通は1%~100%で表示したいと思います。

つまり解決すべき問題は・・・・

「アプリ内画面の明るさの値」の範囲 → 0.0 ~ 1.0

「端末画面の明るさの値」の範囲 → 0 ~ 255

「ユーザーに表示したい明るさの値」の範囲 0 ~ 100


という3つの異なる範囲の値をうまく調節/変換してあげなければいけないということです。

このプログラミングのアプローチはこうです。

① SeekBarで「アプリ内画面の明るさの値」を取得する

② ユーザーに表示するために、取得した値を1~100までの値に変換する

③ さらにその値を「端末画面の明るさの値」の範囲である1~255までの値に変換してあげる
  (これは①で取得した「アプリ内画面の明るさの値」を変換してもOK) 

④ 最後に③の値を"Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS, "③の値");"で保存して変更してあげればOK


余談ですが、「アプリ内画面の明るさの値」にしても「端末画面の明るさの値」にしても、最小値を0もしくは0.0にしてはダメです! 真っ暗になって何も見えなくなってしまい操作できず。。。なんていう面倒なことになってしまうのでw まぁ、当然と言えば当然のことなのですがw

なので、SeekBarでの最小値設定は0ではなく1に設定してあげるようにしましょう。
(ただし、SeekBarに最小値を設定するメソッドが残念ながら無いんですよねw setMax()はあるのにw)


『Android SDK 逆引きハンドブック』の「SELECTION-241 端末画面の明るさを調べる」と「SELECTION-242 アプリケーションの画面の明るさを変更する」が情報として参考になります。チェックしてみてください。


Android SDK逆引きハンドブックAndroid SDK逆引きハンドブック
(2011/04/25)
中西葵、内村祐之 他

商品詳細を見る


↓ よければフォローお願いします

Twitterボタン
Twitterブログパーツ


PageTop

バッテリー節約アプリ『バッテリーサポート(Battery Support)』公開しました!

スマホユーザー共通の悩みはなんでしょうか?
それは「バッテリーがすぐになくなってしまう」ことではないでしょうか?

『バッテリーサポート』はそんなお悩みを解決すべく開発されました。
ダウンロードはこちらから!→『バッテリーサポート(Battery Support) GooglePlayページ』


【どんなアプリなの?】

→ Wifi、Bluetooth、データ/アカウントの自動同期、GPS、画面の自動回転の5つの便利なスマホならではの機能をあなたが指定したバッテリー残量に応じて自動でon/off設定します

1度設定しておけばいちいち自分でバッテリー残量を確認して各機能をOFFにしてバッテリーを節約するなんていう面倒な作業から解放されますよ♪ 

もちろん、各機能ごとにバッテリー残量を指定することもOK!だから「Wifiはよく使うからバッテリー残量20%になるまで使う。GPSはあまり使わないからバッテリー残量80%の時点でOFFにする」といったあなた好みのカスタマイズが可能なんです!

さらにバッテリー管理や各機能の稼働状況、バッテリーの使用量もすぐにチェックできるので便利!

そしてウィジェットにも対応しているから、アプリをいちいち起動しなくてもワンタップで『バッテリーサポート』を起動/停止できちゃうんです!便利でしょ?


【こんな方にオススメ】

・手軽にスマホのバッテリーを節約したいと思っている方

・バッテリーを節約したいけど、一括していろいろな機能を同時にOFFにしたくないと思っている方
 (よく使う機能とそうでない機能とでOFFにするタイミングを区別したいと思っている方)

・バッテリー節約アプリ探してるんだけど、正直余計な機能がついたアプリが多い気がすると思っている方



どうぞ『バッテリーサポート(Battery Support)』をよろしくお願いします。

※本アプリは現在スマホのみ対応しています。タブレットには対応しておりませんのでご了承ください。


↓ ツイッターでつぶやき中♪ リクエストやご意見なども受付中です♪

Twitterボタン
Twitterブログパーツ

PageTop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。