≒ Sphereについて

Sphere

前のエントリで予定を書いていたやつです。昨日公開しました。アプリそのものと同じく需要あるか分からないけど、以下製作過程まとめです。

1)製作期間

2015年12月9日開始なので約一ヶ月。最初に公開したアプリとConfig画面(=処理)はほぼ共通なのでその部分は端折れた。
球体の3D座標はこのページを熟読して、サンプルからコピペしたコードで生成w
数学的素養がほとんど(まったく)無いからすごく助かった。
今初めて確認したけど(オイ)高専の公式ページだったのか。小坂先生本当にありがとうございました。サンプルコードすごく読みやすかったです。ここで言ってても意味ないな。

2)嵌ったところ

 webでThree.js使ってこのブログのヘッダーみたいなの作ったときは、最終的にシェーダー言語使うことを諦めてすべてThree.jsにお任せで処理を記述してるから自覚してるとおりページが糞重い。
ヘッダーの球体なんか色違いの面の数だけ球体を生成して各面の部分だけ表示させてるという体たらく。
そんで今回AndroidのopenGLで球体つくるにあたって、シェーダー言語使って無駄な描画をしないで多面球体を作りたかった。
結果を言えば道半ばで、面はそれぞれ一つのオブジェクトとして生成してる。どうしても座標を共有した状態で各面の色を変えるのは出来なかった。
つまり、小坂先生のコードで生成した(一つの)球体座標から、各面=四角形(台形)=三角形×2の座標をセットで切り出してるということ。ようするに面の数だけドローコール打ってるw やっぱり処理が糞重いw

 そしてもっとも嵌ったのは今回もマッハバンド。おかげで4日間試行錯誤して(=ググりまくって)、シャドウアクネだとかピーターパニングだとかopenGLのシャドーイングの定石みたいなのは色々勉強できたけど、結局あきらめた。
確かに視体積の適切な設定=near/far間を描画に必要最低限な長さに設定すると球体上部の細かなノイズは無くなった。
けど球体下部のノイズは残ったまま。AmbientLightの生成する影とpointLightの生成する影がコンフリクト起こしてるような感触はつかめたんだけど解決には至らず。
趣味のプログラミングで諦めるってどうなのとは自分でも思うけど、あきらめた最大の理由はこのアプリで採用してるOpenGL20の制約が結構あることが分かったから。
今回シャドウマッピングでRGBA値(=ColorBuffer)にZ値入れてるとかは、GL30だとデプスバッファが使えるから無用な処理らしい。
デプスバッファ使えたほうが当然精度は高いと思いGL30で書き換えるかと思ったけどGL30対応はAndroid4.3以上、フル規格は5.0からだということで今回は見送ったのです。対応機種減りすぎるからね。
結局カリングして球体裏面だけ描画して、そのあと表面だけ描画、さらにその間で地面の平面も描画してるからトータルで3回×面数ドローコールwwwそりゃ1秒に2回GC走るってw

 次点で嵌ったのは球体の脈動。リズムに乗ってるようにしたかったけど「リアルタイムBPM解析」は処理が重過ぎる。色々実装は試した。でも処理量がでかすぎて書いてる途中で躊躇するレベルw で、結局一定周波数以下の低音拾ってるだけww これは別の「リアルタイムBPM解析アプリ」でも作って試してから実装しようと結論。

「嵌ったところ」なんて書いてて全然解決していないw openGL30対応とかリアルタイムBPM解析とか色々課題はあるけど、今後このアプリいじるとしたらGCの軽減が最優先だなぁ。

3)その他

 今回ピンチイン/アウト処理を実現するのにGestureDetector初めて触ったんだけど、何これ便利! 実装も簡単だし、何よりGC走りまくってるのに遅延も無くスムーズに動く。前のアプリでonTouch直接いじってたのがうその様だ。
 最後の最後、公開用のスクショにも苦労。前のアプリのようにエミュでスクショ撮ろうとしたんだけど、無茶苦茶ノイズが出る。マッハバンドというレベルではなくて球体崩壊w
仕方がないので実機をつないで撮った。実機でもADMでスクショ撮れるのは知らなかった。実機でスクショとるのと違いpngで撮れるので画質もまずまず。
でもその結果タブレットのスクショは撮れず、「タブレット非対応」になってしまった。安いタブ買うかなー。
 エミュが使えないので困るのはAndroid 6.0(Marshmallow)でpermisson周りの挙動確認ができないということも一つ。前のエントリに書いたとおり。

4)まとめ

 まさに「自分向けのメモ」w 取り留め無く書き散らかしたけど、何ヵ月後かの自分が哀れみの目で見返せるレベルに達していると嬉しい。
あ、それと数少ないこのブログの読者の方でインストールしたよって奇特な方が居たら、どこでも良いのでダメ出しお待ちしてます。

≒ jawiki/latest 20151226/ のページ数の件>2010447

最年末に新ダンプ上がってるのは確認してたんだけど、忙しくて年跨いじゃった。

 で、相変わらず世間的には何の需要もない「Androidの3Dデモアプリ」を鋭意製作中なんだけど、二三日中に第二作をアップ予定です。
 1ヶ月近くかけて様々な試行錯誤を重ねてるわけで、その内容をこのブログに書けばもう少しアクセス増えるんじゃないかと思うんだけど、コーディングについてはブログの記事書いてる暇あったら少しでもコード書き進めたいのが正直な気持ち。
 メモ書きは残してあるので、暇ができたら自分向けの備忘録として(同じことで何回もはまって、解決したとき「これ前にもやったじゃん!」ってこと良くあるw)ブログ記事にしようと思います。
 今のブログ内容だとwikipediaについてのスパムブログみたいだもんなー。
 しかしAndroid6.0(Marshmallow)アップデートはメンドクサイなー。permission関係対応したいんだけど、エミュレータだと挙動が何か変。実機が手に入るまで対応はお預けの予定。
 そんでいまさらだけどGit超便利! AndroidStudio使い始めてしばらくして導入したんだけど、↑のMarshmallow対応なんか途中であきらめて(といっても処理はほとんど実装完了してる。挙動確認をあきらめたってこと)、そこでコミットしといてgit resetで切り戻しして続けられるから実装内容を保存しておける。Git使う前まではプロジェクト丸ごと別保存とかしてたから…
 よし、後はアイコン作って公開しちゃおう。絵心ないからここが一番難しいところww

≒ jawiki/latest 20151202/ のページ数の件>2002803

200万レコード超えた。おめでとうございますw

 

さて、前回初Androidアプリって書いたけど、URL張り忘れた。

「Squares.」
https://play.google.com/store/apps/details?id=jp.beingtested.squares

試してたらたった一日で色々不具合爆発。公開すると一歩引いてみるから粗もよく分かる。

基本的なとこで恥ずかしいけど、アイコン設置忘れなんてやってるし、一番やばかったのが上のURL見るとパッケージ名=ドメイン名がプレイストアのidに自動的に入るみたいなんだけど、別に保有してるライトアダルトのサイトのドメイン入れちゃってた。

デベロッパーサイトとしてはこのブログのあるドメインを表示してるのに、idでア○ルトサイト乗っけてたら胡散臭すぎるでしょw

で、パッケージ名完全に変えてアップロードしてみたら受け付けてもらえず(当たり前か)。結局「人生初のAndroidアプリ」は一日で公開停止…

新規に同じ内容のアプリを公開しました。なんと(同じく当たり前か)一人のデベがまったく同じ名前のアプリを複数公開するのはNGらしい。で、↑のアプリ名をよくみるとカンマが付いてますwww