Androidアプリ開発 AREarthroidのAdMob広告に位置情報を通知する [Androidアプリ AREarthroid]
AREarthroidの無料版には、広告が付いている。この広告、画面の向きが変わると表示されなくなってしまうことに気付いた。Android 3.2のA100なら画面向きが変わってもそのまま表示される。Android 2.3のXperiaでAREarthroidを動かしていると、画面向きが変わったときに、広告が消えてしまう。
Androidのバージョンのせいなのか、機種のせいなのかはよくわからないが、多分、バージョンのせいであろう。
で、AdMobの説明をよくよんでみることにした。
Google AdMob Ads SDK
https://developers.google.com/mobile-ads-sdk/docs/android/fundamentals?hl=ja
それらしいことは書いてないなぁ。
中級のページに進んでいく。
タブレット用に大きめのバナーもあるのか、こっちにしてみようかなぁ...
でもタブレットはちゃんと表示されているから、いじりたくないかも。
次は、テスト用の端末の設定について書かれている。
テスト用デバイスの設定は、エミュレータは追加している。AdMobは基本、自分で広告をクリックしてはいけない。テスト用の携帯電話のIDも入れておけば、クリックじゃなくてタップしてもいいのか?
過去に、間違えてタップしちゃったことがあるもんなぁ。自分の端末のIDを入れておくか。端末のIDはどうやったら取得できるの?
しかし、わかりにくい訳だこと。訳じゃなくてもともと親切に書いてないのか。
一度、リクエスト飛ばすのか。その時に、LogCatに表示されるのね。
やってみる。
出た。
To get test ads on this device, call adRequest.addTestDevice("D63B365C832......");
これをコピーしてくればOKか。
しかし、テスト用に設定しても消えてしまうことにはかわりないであろう。
次は、なにが書いてあるかというと、ターゲットの指定か。
男性、女性向けの指定ができるわけね。
位置情報を指定できるのか。近所のお店みたいな感じで広告が表示できるようになるのであろう。これはやっておいた方がいいか。
誕生日は、年齢の指定か。端末からユーザの誕生日って取ってこれるものなのか?連絡帳から取ってこれそうな感じではあるが、めんどうなのでパス。
位置情報が確定した際に、AdRequestを飛ばしてみる。
これで、ちょっとテスト。
テスト用の広告が表示されるようになった。
なんだ、そういうことか。エミュレータと同じ扱いになるだけなのか。普通に広告が表示されて、タップしてもカウントされないっていうことじゃないのね。
GPS測位に成功すると広告が表示された。
広告の内容が、テスト用のまま変化しないので、位置情報がちゃんと渡ったのかどうかはわからない。テスト端末の設定を削除するか。
ん、ちょっと待てよ。adView.loadAdすれば広告が再表示できるのか。
向きの変更時に同じことをやってやればOKか。
画面の向きの変更時のイベントっていうのは特にないのか。onSurfaceChangedでやるか。
直接呼び出すとスレッドが異なるので、例外を吐く。フラグのフィールドを作って...
できた。
画面の向きが変更された場合は、位置情報が渡らないが、とりあえずは、いいか。これで、アップデートするのである。
えーと、ついでなので報告、今回のバージョンアップで「街の灯り」が表示されるようになった。夜の部分がかっこよくなったのである。難読化も有効になっている。
関連記事
サイト内を検索
Androidのバージョンのせいなのか、機種のせいなのかはよくわからないが、多分、バージョンのせいであろう。
で、AdMobの説明をよくよんでみることにした。
Google AdMob Ads SDK
https://developers.google.com/mobile-ads-sdk/docs/android/fundamentals?hl=ja
それらしいことは書いてないなぁ。
中級のページに進んでいく。
タブレット用に大きめのバナーもあるのか、こっちにしてみようかなぁ...
でもタブレットはちゃんと表示されているから、いじりたくないかも。
次は、テスト用の端末の設定について書かれている。
テスト用デバイスの設定は、エミュレータは追加している。AdMobは基本、自分で広告をクリックしてはいけない。テスト用の携帯電話のIDも入れておけば、クリックじゃなくてタップしてもいいのか?
過去に、間違えてタップしちゃったことがあるもんなぁ。自分の端末のIDを入れておくか。端末のIDはどうやったら取得できるの?
しかし、わかりにくい訳だこと。訳じゃなくてもともと親切に書いてないのか。
一度、リクエスト飛ばすのか。その時に、LogCatに表示されるのね。
やってみる。
出た。
To get test ads on this device, call adRequest.addTestDevice("D63B365C832......");
これをコピーしてくればOKか。
しかし、テスト用に設定しても消えてしまうことにはかわりないであろう。
次は、なにが書いてあるかというと、ターゲットの指定か。
男性、女性向けの指定ができるわけね。
位置情報を指定できるのか。近所のお店みたいな感じで広告が表示できるようになるのであろう。これはやっておいた方がいいか。
誕生日は、年齢の指定か。端末からユーザの誕生日って取ってこれるものなのか?連絡帳から取ってこれそうな感じではあるが、めんどうなのでパス。
位置情報が確定した際に、AdRequestを飛ばしてみる。
AdRequest adRequest = new AdRequest(); adRequest.addTestDevice(AdRequest.TEST_EMULATOR); adRequest.addTestDevice("D63B365C832....."); adRequest.setLocation(location); adView.loadAd(adRequest);
これで、ちょっとテスト。
テスト用の広告が表示されるようになった。
なんだ、そういうことか。エミュレータと同じ扱いになるだけなのか。普通に広告が表示されて、タップしてもカウントされないっていうことじゃないのね。
GPS測位に成功すると広告が表示された。
広告の内容が、テスト用のまま変化しないので、位置情報がちゃんと渡ったのかどうかはわからない。テスト端末の設定を削除するか。
ん、ちょっと待てよ。adView.loadAdすれば広告が再表示できるのか。
向きの変更時に同じことをやってやればOKか。
画面の向きの変更時のイベントっていうのは特にないのか。onSurfaceChangedでやるか。
直接呼び出すとスレッドが異なるので、例外を吐く。フラグのフィールドを作って...
できた。
画面の向きが変更された場合は、位置情報が渡らないが、とりあえずは、いいか。これで、アップデートするのである。
えーと、ついでなので報告、今回のバージョンアップで「街の灯り」が表示されるようになった。夜の部分がかっこよくなったのである。難読化も有効になっている。
関連記事
サイト内を検索
AREarthroid バージョン1.2.4にアップ [Androidアプリ AREarthroid]
先日から取り組んでいた、プレイスからインテントで場所を表示する機能ができたので、バージョン1.2.4でリリースした。
同時に、いくつかのバグフィックスを行ったり。ズーム時の挙動を変更をしている。カメラのオートフォーカス機能は外してみた。
オートフォーカスを外したかいあって、サポートしている端末数は、1099台に増えた。100台近く増えた。
現在、ダウンロード数は、100を超えている。ユーザーインストール合計数が141。有効な端末インストール数が71。これって、どういう意味かと考えると、ダウンロードしてくれた回数が141で、すぐにアンインストールしてしまう人もいるから、有効端末インストール数が71っていうことなんだと思う。いつも半数くらいが有効端末インストール数になっている。
これって、優秀?それともダメ?比較するのがないからわからない。コメントも付かないし、評判がいいのか悪いのかよくわからないなぁ...
更新のためにダウンロードした回数はユーザーインストール数に含まれるのだろうか...
「有効端末インストール数」で検索してみると、みなさん気にしておられるようですな。急に下がったとか、上がったとか。
そもそも、そんなに信頼性があるものじゃない?
AdMobの収益を見た方が使ってくれているかどうかはわかるかも?広告収入が増えればそれだけ、使われているっていうことでしょう。
広告といえば、AdSenseも載せてみた。審査が厳しいとかいう記事がみられたが、なんかすんなり許可されたっぽい。
AdMobの広告もAdSenseを許可するように変更した。
広告表示が変化したかと思い、AREarthroidを立ち上げていじっていると、ズームが効かない状態に陥ってしまった。さらにいじっていると「強制終了」
「むむ、これは問題である」
バージョンアップしたばかりなのに、もうアップデートしなくては。
強制終了の原因は、スレッドがらみ。queueEventに変更することで回避できた模様。
ズームが効かないのは、多分、スレッドが止まってしまったからであろう。詳細部分が移動しないバグも取って早速アップデートした。なので、1.2.4は日の目を見ず、1.2.5になった。
サイト内を検索
同時に、いくつかのバグフィックスを行ったり。ズーム時の挙動を変更をしている。カメラのオートフォーカス機能は外してみた。
オートフォーカスを外したかいあって、サポートしている端末数は、1099台に増えた。100台近く増えた。
現在、ダウンロード数は、100を超えている。ユーザーインストール合計数が141。有効な端末インストール数が71。これって、どういう意味かと考えると、ダウンロードしてくれた回数が141で、すぐにアンインストールしてしまう人もいるから、有効端末インストール数が71っていうことなんだと思う。いつも半数くらいが有効端末インストール数になっている。
これって、優秀?それともダメ?比較するのがないからわからない。コメントも付かないし、評判がいいのか悪いのかよくわからないなぁ...
更新のためにダウンロードした回数はユーザーインストール数に含まれるのだろうか...
「有効端末インストール数」で検索してみると、みなさん気にしておられるようですな。急に下がったとか、上がったとか。
そもそも、そんなに信頼性があるものじゃない?
AdMobの収益を見た方が使ってくれているかどうかはわかるかも?広告収入が増えればそれだけ、使われているっていうことでしょう。
広告といえば、AdSenseも載せてみた。審査が厳しいとかいう記事がみられたが、なんかすんなり許可されたっぽい。
AdMobの広告もAdSenseを許可するように変更した。
広告表示が変化したかと思い、AREarthroidを立ち上げていじっていると、ズームが効かない状態に陥ってしまった。さらにいじっていると「強制終了」
「むむ、これは問題である」
バージョンアップしたばかりなのに、もうアップデートしなくては。
強制終了の原因は、スレッドがらみ。queueEventに変更することで回避できた模様。
ズームが効かないのは、多分、スレッドが止まってしまったからであろう。詳細部分が移動しないバグも取って早速アップデートした。なので、1.2.4は日の目を見ず、1.2.5になった。
サイト内を検索
Androidアプリ開発 インテント [Androidアプリ AREarthroid]
本日は、Androidアプリネタである。AREarthroidは、「geo:lat,lon」といったインテントに対応している。しかし、プレイスや、ブラウザからAREarthroidに位置情報を送りこんでやることができない。
プレイスでラーメン屋などを検索して「この場所を共有」ってやると、メーラーなどを立ち上げるメニューが表示される。ここにAREarthroidも表示できれば、何かと便利なんじゃないかと思ったわけです。
Androidにはインテントというしくみがあり、インテントでアプリケーション間のデータ通信ができる。
今のところ、AREarthroidは、geo:lat,lonといったURIをインテントで受け取ると、lat,lonで示される位置にマーカーを置くようになっている。
geo:に対応したアプリとしては、他にGoogle MapやGoogle Earthがある。複数の対応アプリがインストールされているときは、どのアプリを起動するのかが選択できる。
geo:のインテントが投げられるとAREarthroidがリストに載る。
プレイスの「この場所を共有」でも何らかのインテントが投げられているはずだが、ここにAREarthroidは載らない。Google Mapも載らないから、きっとgeo:じゃないのだろうな、というあたりを付けて調べてみた。
検索して調べ中...
インテントには、アクションがある。geo:lat,lonの場合、アクションはVIEW。「この場所を共有」の場合は、SENDアクションのインテントが投げられるようである。
アプリがどういったインテントに対応しているのかは、AndroidManifest.xmlで定義することができる。さっそく、SENDアクションのインテントを受けられるように定義を追加してみる。
最初のintent-filterは、自動生成で作成されたもの。ラウンチャ用で、これが無いと多分、ラウンチャーから起動できない。
次のintent-filterは、geo:用。アクションはVIEWでスキーマがgeoになっている。
最後のintent-filterが今回追加したもの。アクションをSENDにしている。
これで、onCreateでインテントの内容をログに表示させてみよう。
一度、実行して、インストールする。プレイスを立ち上げ、「この場所を共有」してみると...
出た。しかし、名前しかやってこない。
ブラウザの「ページを共有」でも受け取れるらしいので、やってみた。
おお、今度はURLがちゃんと入っている。
プレイスの場合は、getExtras()で取ってくるわけじゃないのか?
さらに調べる。
どうも、メール送信で送られてきているな。メール送信の場合は、EXTRA_SUBJECTとEXTRA_TEXTのエクストラデータが入ってきている。
しかし、住所とか電話番号とかがTEXTに入っていないのだが... もしかすると、添付テキストなのか?添付されたデータはどうやって読み込むのかなぁ... EXTRA_STREAMか。
違った。ログに表示するときに、\nで切られているだけだった。ちゃんとEXTRA_TEXTで取れていた。
住所が渡ってくるから、これをGeoCoderにかければいいか。m.google.co.jpへのURLも付いている。これみたらいいのか?
HttpURLConnectionを使って、内容を読み込んでみる。うーん、簡単ではないな。
lat:35.123456,lng:140.123456
っていうのが怪しい。JSON形式だなこれは。正規表現使ってマッチングかけて取りだしてみるか。なんか遅そうだけど、やってみるか。
コードの作成中...
よし、できた。これでいけるはず。
できたっぽい。
サイト内を検索
プレイスでラーメン屋などを検索して「この場所を共有」ってやると、メーラーなどを立ち上げるメニューが表示される。ここにAREarthroidも表示できれば、何かと便利なんじゃないかと思ったわけです。
Androidにはインテントというしくみがあり、インテントでアプリケーション間のデータ通信ができる。
今のところ、AREarthroidは、geo:lat,lonといったURIをインテントで受け取ると、lat,lonで示される位置にマーカーを置くようになっている。
geo:に対応したアプリとしては、他にGoogle MapやGoogle Earthがある。複数の対応アプリがインストールされているときは、どのアプリを起動するのかが選択できる。
geo:のインテントが投げられるとAREarthroidがリストに載る。
プレイスの「この場所を共有」でも何らかのインテントが投げられているはずだが、ここにAREarthroidは載らない。Google Mapも載らないから、きっとgeo:じゃないのだろうな、というあたりを付けて調べてみた。
検索して調べ中...
インテントには、アクションがある。geo:lat,lonの場合、アクションはVIEW。「この場所を共有」の場合は、SENDアクションのインテントが投げられるようである。
アプリがどういったインテントに対応しているのかは、AndroidManifest.xmlで定義することができる。さっそく、SENDアクションのインテントを受けられるように定義を追加してみる。
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="geo" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter>
最初のintent-filterは、自動生成で作成されたもの。ラウンチャ用で、これが無いと多分、ラウンチャーから起動できない。
次のintent-filterは、geo:用。アクションはVIEWでスキーマがgeoになっている。
最後のintent-filterが今回追加したもの。アクションをSENDにしている。
これで、onCreateでインテントの内容をログに表示させてみよう。
if ( getIntent().getAction().equals(Intent.ACTION_SEND) ){ String url = getIntent().getExtras().getCharSequence(Intent.EXTRA_TEXT).toString(); android.util.Log.v("AREarthActivity", "onCreate intent data=" + url); }
一度、実行して、インストールする。プレイスを立ち上げ、「この場所を共有」してみると...
出た。しかし、名前しかやってこない。
ブラウザの「ページを共有」でも受け取れるらしいので、やってみた。
おお、今度はURLがちゃんと入っている。
プレイスの場合は、getExtras()で取ってくるわけじゃないのか?
さらに調べる。
どうも、メール送信で送られてきているな。メール送信の場合は、EXTRA_SUBJECTとEXTRA_TEXTのエクストラデータが入ってきている。
しかし、住所とか電話番号とかがTEXTに入っていないのだが... もしかすると、添付テキストなのか?添付されたデータはどうやって読み込むのかなぁ... EXTRA_STREAMか。
違った。ログに表示するときに、\nで切られているだけだった。ちゃんとEXTRA_TEXTで取れていた。
if ( intent.getAction().equals(Intent.ACTION_SEND) ){ String text = intent.getExtras().getCharSequence(Intent.EXTRA_TEXT).toString(); String lines[] = text.split("\n"); for ( String line : lines ){ android.util.Log.v("AREarthActivity", "onCreate intent " + line); } }
住所が渡ってくるから、これをGeoCoderにかければいいか。m.google.co.jpへのURLも付いている。これみたらいいのか?
HttpURLConnectionを使って、内容を読み込んでみる。うーん、簡単ではないな。
lat:35.123456,lng:140.123456
っていうのが怪しい。JSON形式だなこれは。正規表現使ってマッチングかけて取りだしてみるか。なんか遅そうだけど、やってみるか。
コードの作成中...
よし、できた。これでいけるはず。
できたっぽい。
サイト内を検索
AREarthroid またもやバージョンアップ 1.2.3に [Androidアプリ AREarthroid]
AREarthroidが、またもやバージョンアップしたので宣伝。
今回のバージョンアップで、標高データにより山が表示されるようになった。
まだ、1日しか経過していないのに、半数近くのユーザがバージョンアップしてくれた模様。更新が通知されるもんね。
前回、紹介したように、標高データはNASAのSRTM3を使っている。この標高データ、スペースシャトルから採集したものだとか。1度ごとにデータファイルがある。当然ながら、データがあるのは陸の部分だけ。といっても、かなりの数がある。地球全体で、海も含めると360×180なので、64,800。陸の部分が、3分の1としても、約20,000ものファイル数がある。
ひとつのファイルが約2メガ(3秒メッシュを展開後)。えーと、全体だと80,000メガ。80ギガもあることになる。陸の部分って、7分の1だっけか?
どうでもいいが、これをまじめに入れるとなるとやってられない。現実的なサイズにしなければ。
3秒メッシュのデータは、1201×1201個のデータが入っている。1度=3600秒なので、3秒ごととなっている。3秒メッシュから20ごとに取りだして、60秒メッシュを作成することにした。これで一気にデータ量は減る。さらに、apkは圧縮されるので、200k程度になった。
60秒というと実際の長さは、どのくらいなのか。計算するのがめんどうだなぁ。1kmくらいか?10kmかも。まぁ、そんなに精度がなくても十分。なにせ、ポリゴンをそんなにたくさん作れない。やってみたが、60×60のメッシュを切るのがいいところで、120×120にすると、目にみえて重たくなる。30×30だと山が崩れてしまう感じ。
気になるapkパッケージからの展開読み込みの速度であるが、そんなに悪くない。メッシュを作成するときに、標高データが必要になるわけであるが、連続した緯度、経度でのデータが要求される。ファイル読み込みはそう頻繁には行われない。というか、そうにらんでコードを書いた。C/C++ネイティブであることも効いているかも。
もともと、androidのストレージは、フラッシュメモリなので、読み込みは速いのであろう。とりあえずは、apkファイルからzip_readで展開して読み込む方式でやっている。
以下はおまけ動画
パッケージデータの共有
androidアプリは、そのアプリ専用のJavaVM内で実行される。androidでのJavaVMは、Sunのものではなく、携帯端末用に改良された「Dalvik VM」と呼ばれるもの。
アプリを起動すると、Dalvik VMがひとつプロセスとして起動され、そのVM中でアプリが実行される。androidのベースは、Linuxである。Linuxには、ユーザという概念がある。普通にPCで使うLinuxなら、ユーザは、使用する人別に作られる。PCを使用する際には、ユーザ認証を受ける必要がある。認証を受けるには、通常、パスワードを入力することで行われる(ディストリビューションの中にはユーザはrootで固定。っていうのもあるが...)
androidには、こういった使用者を選別するような機能は、OSには存在しない。携帯端末の使用者は決まっていて、ユーザはひとりだけ(昔のWindowsやDOSをイメージすればOKか)。
とはいえ、Linuxのユーザ管理機能がばっさり削除されているかというと、そうでもなく、アプリの実行権限とかで使われている。
androidアプリをインストールすると、そのアプリ用のユーザIDが割り当てられる。で、そのアプリはそのユーザIDで実行される。アプリがファイルを作成すれば、そのファイルの所有者は割り当てられたユーザとなる。
別のアプリをインストールすれば当然、別のユーザIDが割り当てられる。なので、アプリが異なれば、ユーザが異なるので、お互いにファイルを参照することはできない。
AREarthroidには、広告付きの無印AREarthroidと、有料版のAREarthroidProがある。異なるアプリなので、ユーザも別。ということは、AREarthroid中のデータをAREarthroidProで参照する、ということはできないわけである。
今回、拡張データを追加でインストールするようなしくみについても考えてみた。例えば、アメリカやヨーロッパなどの詳細衛星画像、標高データを別パッケージとして用意しておき、それらをインストールすることで、アドオンできないか。ということである。
実は、ユーザIDをAndroidManifest.xmlで指定することができる。ユーザIDが指定されていれば、androidはインストール時にそのユーザIDをそのアプリ用のユーザとする。
別のアプリであっても、同じユーザIDを指定できる。ただし、apkをエクスポートする際に、同じ署名ファイルを使用する必要がある。
AREarthroidとAREarthroidProで同じユーザIDを付けてみた。ユーザIDは、AndroidManifest.xmlのmanifestタグのandroid:sharedUserIdで指定する。ユーザIDにはひとつ以上の.が含まれていないといけない。慣例的に、パッケージ名が使用される。AREarthroidでは、以下のようにsharedUserIdを付けてみた。
AREarthroid
AREarthroidPro
NDKで作成したライブラリがnot foundとなり読み込めなくなったりしてあせった、再ビルドすることで、ロードできるようになった(デベロッパーコンソールでもこのエラーが1件報告されている。ちょっと気になる)。
これで、AREarthroidProからAREarthroidのデータを読み込むことができるようになったはず。
後は、拡張パッケージを用意して、詳細メッシュを切る場所を変更すればOK。要望があれば、作成してみたいと思っている。って、日本でしか使われていないような気がするが...
サイト内を検索
今回のバージョンアップで、標高データにより山が表示されるようになった。
まだ、1日しか経過していないのに、半数近くのユーザがバージョンアップしてくれた模様。更新が通知されるもんね。
前回、紹介したように、標高データはNASAのSRTM3を使っている。この標高データ、スペースシャトルから採集したものだとか。1度ごとにデータファイルがある。当然ながら、データがあるのは陸の部分だけ。といっても、かなりの数がある。地球全体で、海も含めると360×180なので、64,800。陸の部分が、3分の1としても、約20,000ものファイル数がある。
ひとつのファイルが約2メガ(3秒メッシュを展開後)。えーと、全体だと80,000メガ。80ギガもあることになる。陸の部分って、7分の1だっけか?
どうでもいいが、これをまじめに入れるとなるとやってられない。現実的なサイズにしなければ。
3秒メッシュのデータは、1201×1201個のデータが入っている。1度=3600秒なので、3秒ごととなっている。3秒メッシュから20ごとに取りだして、60秒メッシュを作成することにした。これで一気にデータ量は減る。さらに、apkは圧縮されるので、200k程度になった。
60秒というと実際の長さは、どのくらいなのか。計算するのがめんどうだなぁ。1kmくらいか?10kmかも。まぁ、そんなに精度がなくても十分。なにせ、ポリゴンをそんなにたくさん作れない。やってみたが、60×60のメッシュを切るのがいいところで、120×120にすると、目にみえて重たくなる。30×30だと山が崩れてしまう感じ。
気になるapkパッケージからの展開読み込みの速度であるが、そんなに悪くない。メッシュを作成するときに、標高データが必要になるわけであるが、連続した緯度、経度でのデータが要求される。ファイル読み込みはそう頻繁には行われない。というか、そうにらんでコードを書いた。C/C++ネイティブであることも効いているかも。
もともと、androidのストレージは、フラッシュメモリなので、読み込みは速いのであろう。とりあえずは、apkファイルからzip_readで展開して読み込む方式でやっている。
以下はおまけ動画
パッケージデータの共有
androidアプリは、そのアプリ専用のJavaVM内で実行される。androidでのJavaVMは、Sunのものではなく、携帯端末用に改良された「Dalvik VM」と呼ばれるもの。
アプリを起動すると、Dalvik VMがひとつプロセスとして起動され、そのVM中でアプリが実行される。androidのベースは、Linuxである。Linuxには、ユーザという概念がある。普通にPCで使うLinuxなら、ユーザは、使用する人別に作られる。PCを使用する際には、ユーザ認証を受ける必要がある。認証を受けるには、通常、パスワードを入力することで行われる(ディストリビューションの中にはユーザはrootで固定。っていうのもあるが...)
androidには、こういった使用者を選別するような機能は、OSには存在しない。携帯端末の使用者は決まっていて、ユーザはひとりだけ(昔のWindowsやDOSをイメージすればOKか)。
とはいえ、Linuxのユーザ管理機能がばっさり削除されているかというと、そうでもなく、アプリの実行権限とかで使われている。
androidアプリをインストールすると、そのアプリ用のユーザIDが割り当てられる。で、そのアプリはそのユーザIDで実行される。アプリがファイルを作成すれば、そのファイルの所有者は割り当てられたユーザとなる。
別のアプリをインストールすれば当然、別のユーザIDが割り当てられる。なので、アプリが異なれば、ユーザが異なるので、お互いにファイルを参照することはできない。
AREarthroidには、広告付きの無印AREarthroidと、有料版のAREarthroidProがある。異なるアプリなので、ユーザも別。ということは、AREarthroid中のデータをAREarthroidProで参照する、ということはできないわけである。
今回、拡張データを追加でインストールするようなしくみについても考えてみた。例えば、アメリカやヨーロッパなどの詳細衛星画像、標高データを別パッケージとして用意しておき、それらをインストールすることで、アドオンできないか。ということである。
実は、ユーザIDをAndroidManifest.xmlで指定することができる。ユーザIDが指定されていれば、androidはインストール時にそのユーザIDをそのアプリ用のユーザとする。
別のアプリであっても、同じユーザIDを指定できる。ただし、apkをエクスポートする際に、同じ署名ファイルを使用する必要がある。
AREarthroidとAREarthroidProで同じユーザIDを付けてみた。ユーザIDは、AndroidManifest.xmlのmanifestタグのandroid:sharedUserIdで指定する。ユーザIDにはひとつ以上の.が含まれていないといけない。慣例的に、パッケージ名が使用される。AREarthroidでは、以下のようにsharedUserIdを付けてみた。
AREarthroid
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cx.fam.asai.AREarthroid" android:versionCode="6" android:versionName="1.2.3" android:sharedUserId="cx.fam.asai.AREarthroid" >
AREarthroidPro
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cx.fam.asai.AREarthroidPro" android:versionCode="5" android:versionName="1.2.3" android:sharedUserId="cx.fam.asai.AREarthroid" >
NDKで作成したライブラリがnot foundとなり読み込めなくなったりしてあせった、再ビルドすることで、ロードできるようになった(デベロッパーコンソールでもこのエラーが1件報告されている。ちょっと気になる)。
これで、AREarthroidProからAREarthroidのデータを読み込むことができるようになったはず。
後は、拡張パッケージを用意して、詳細メッシュを切る場所を変更すればOK。要望があれば、作成してみたいと思っている。って、日本でしか使われていないような気がするが...
サイト内を検索
AREarthroid 標高データ [Androidアプリ AREarthroid]
本日は、AREarthroidのネタである。
AREarthroidは今のところ平坦な球でしかない。ここに標高データを持ってきて、山を描いてみたいと野望を抱いている。
緯度、経度から簡単に標高がわかるようなサービスがあればよいのだが、そんな気が効いたサービスはない。MapViewの機能にあれば、よかったんだけどねぇ。
標高データ自体は、国土地理院に行けばありそうな感じ。しかし、アプリに組み込んで使用するとなると、なんかめんどう。
NASAにSRTMっていうのがあり、ここに地球全体の標高データがあることがわかった。
SRTM Shuttle Radar Topography Mission
http://www2.jpl.nasa.gov/srtm/
カシミールのSRTMの説明
http://www.kashmir3d.com/srtm/
カシミールは山を3Dで立体的に表示するPC用のソフト。カシミールなにげにすごいのだが、android版はないのかなぁ。
でもって、SRTMの30秒データっていうのが軽くてよさげではある。
この標高データから標高を計算して、3Dデータを作成する。今は、高度についてはみな「0」となっている。ここにSRTMの標高データを組み込んでやろう。という作戦である。
3Dデータの作成は、C/C++で書いた。SRTMから持ってきた標高データはファイルで置いておき、その都度読み込んで使いたい。もう、メモリはぎりぎりなので。
androidでのそういった外部ファイルのデータは、res/rawやassetsに入れておくといった決まりがある。assetsはテキスト形式のちょっとした設定ファイル用。バイナリはres/rawに入れておくっぽい。
でね。問題は、C/C++でres/raw、assetsに入っているリソースをfopenでオープンできないのですよ。もちろん、Javaからなら、getResources().openRawResource(R.raw.ファイル名)やら、getResources().getAssets().open(ファイル名)とかでできる。
fopenでもちゃんとフルパスを指定してやれば、オープンできると思うが、どこに入っているのやら。apkファイルは圧縮されているから、展開してやらないと読み込めないか...
と、以下のページを発見。
http://androgeek.info/?p=275
libzipを組み込んで、zip_fopenしてやればOKなのか。
うーん。ちょいとめんどうだがやってみるか。
なんかできたっぽい。
ソースをフォルダにわけてやらないといけなかったが、ちゃんとビルドできた。
res/rawフォルダを作って、適当にデータを入れてみる。
で、ファイルをオープンするのは、zip_fopenするのか。もしかしてこれって、いちいち展開する?遅そうだなぁ...ローカルファイルにキャッシュするか。それは後でもできるので、とりあえずはパフォーマンスをみるか。
zip_freadで読み込んで、zip_fcloseで閉じればよいのね。zipが付いただけで、fopenと使い方はかわらない。
さて、肝心の標高データはどうなっているかというと、30秒メッシュのやつはなんだかフォーマットがよくわからないのでパス。SRTM3の3秒メッシュを加工して(間引きして)使うことにする。
ごそごそと、間引きプログラムを作成中...
あー、結構大変。
できたぽい。ちょっとやってみる。
むむ、山にはなったが、なんかえらく陥没している部分が...
データの値を見ると、-32768? ほほ、これはデータが欠落しておるな。カシミールのページにもデータげ欠落していると書いてあった。これか。
じゃあ、-32768は無視。ついでに、まわりの標高の平均を計算するようにして...
どうじゃぁ...
富士山がみえた。
夕方なので、暗いのは勘弁。
メッシュが荒いのできれいな富士山にはなってないなぁ。これでも少し精度は上げたんだけど。標高データの取得パフォーマンスは、それほど悪くない感じ。展開後のファイルをキャッシュすればもっと軽くなるであろう。もしかして、res/drawbleに入っている画像データもいちいち展開しているのかも。そうやって、ローカルのキャッシュファイルが増えていくのか... 違うかな。
それに、視点の位置も標高で調整しないと、山の裏から見ている感じになってしまう。もう少ししたら、リリースできるであろう。
サイト内を検索
AREarthroidは今のところ平坦な球でしかない。ここに標高データを持ってきて、山を描いてみたいと野望を抱いている。
緯度、経度から簡単に標高がわかるようなサービスがあればよいのだが、そんな気が効いたサービスはない。MapViewの機能にあれば、よかったんだけどねぇ。
標高データ自体は、国土地理院に行けばありそうな感じ。しかし、アプリに組み込んで使用するとなると、なんかめんどう。
NASAにSRTMっていうのがあり、ここに地球全体の標高データがあることがわかった。
SRTM Shuttle Radar Topography Mission
http://www2.jpl.nasa.gov/srtm/
カシミールのSRTMの説明
http://www.kashmir3d.com/srtm/
カシミールは山を3Dで立体的に表示するPC用のソフト。カシミールなにげにすごいのだが、android版はないのかなぁ。
でもって、SRTMの30秒データっていうのが軽くてよさげではある。
この標高データから標高を計算して、3Dデータを作成する。今は、高度についてはみな「0」となっている。ここにSRTMの標高データを組み込んでやろう。という作戦である。
3Dデータの作成は、C/C++で書いた。SRTMから持ってきた標高データはファイルで置いておき、その都度読み込んで使いたい。もう、メモリはぎりぎりなので。
androidでのそういった外部ファイルのデータは、res/rawやassetsに入れておくといった決まりがある。assetsはテキスト形式のちょっとした設定ファイル用。バイナリはres/rawに入れておくっぽい。
でね。問題は、C/C++でres/raw、assetsに入っているリソースをfopenでオープンできないのですよ。もちろん、Javaからなら、getResources().openRawResource(R.raw.ファイル名)やら、getResources().getAssets().open(ファイル名)とかでできる。
fopenでもちゃんとフルパスを指定してやれば、オープンできると思うが、どこに入っているのやら。apkファイルは圧縮されているから、展開してやらないと読み込めないか...
と、以下のページを発見。
http://androgeek.info/?p=275
libzipを組み込んで、zip_fopenしてやればOKなのか。
うーん。ちょいとめんどうだがやってみるか。
なんかできたっぽい。
ソースをフォルダにわけてやらないといけなかったが、ちゃんとビルドできた。
res/rawフォルダを作って、適当にデータを入れてみる。
で、ファイルをオープンするのは、zip_fopenするのか。もしかしてこれって、いちいち展開する?遅そうだなぁ...ローカルファイルにキャッシュするか。それは後でもできるので、とりあえずはパフォーマンスをみるか。
zip_freadで読み込んで、zip_fcloseで閉じればよいのね。zipが付いただけで、fopenと使い方はかわらない。
さて、肝心の標高データはどうなっているかというと、30秒メッシュのやつはなんだかフォーマットがよくわからないのでパス。SRTM3の3秒メッシュを加工して(間引きして)使うことにする。
ごそごそと、間引きプログラムを作成中...
あー、結構大変。
できたぽい。ちょっとやってみる。
むむ、山にはなったが、なんかえらく陥没している部分が...
データの値を見ると、-32768? ほほ、これはデータが欠落しておるな。カシミールのページにもデータげ欠落していると書いてあった。これか。
じゃあ、-32768は無視。ついでに、まわりの標高の平均を計算するようにして...
どうじゃぁ...
富士山がみえた。
夕方なので、暗いのは勘弁。
メッシュが荒いのできれいな富士山にはなってないなぁ。これでも少し精度は上げたんだけど。標高データの取得パフォーマンスは、それほど悪くない感じ。展開後のファイルをキャッシュすればもっと軽くなるであろう。もしかして、res/drawbleに入っている画像データもいちいち展開しているのかも。そうやって、ローカルのキャッシュファイルが増えていくのか... 違うかな。
それに、視点の位置も標高で調整しないと、山の裏から見ている感じになってしまう。もう少ししたら、リリースできるであろう。
サイト内を検索
AREarthroid 1.2.2にバージョンアップ [Androidアプリ AREarthroid]
AREarthroidをバージョンアップした。バージョンはこれで、1.2.2となった。
やったことを以下にまとめると。
・ハイライトが出るようにした。
・夕焼け/朝焼けの範囲を小さくした。
・ちゃんとフォグがかかるようにSTART、ENDを設定した。
・現在地にマークする機能を追加した。
・方位マーカーの大きさを少し大きくした。
・draw時にあまり計算しなくて済むように、いつくかのパラメータを生成時に計算するようにした。ラジアンから度への変換とか、座標の引き算とか。
・マーカーの表示方法を最適化。法線データを頂点の数分だけ用意して、一気に描くようにした。
結構、いろんなことやったなぁ。
ワイヤーフレームによるガイド表示機能は、作ってはみたものの、イメージと少し違ったので、今回は見送り。次回に「期待」って、だれも期待はしていないか...
ハイライトとフォグでなかなか、きれいになったと思っている。
こっちは夕方の画像。
ARで地球を表示するアプリ
今から少し忙しくなりそう。ブログの更新はしばらくないかも。
それではまた。
サイト内を検索
やったことを以下にまとめると。
・ハイライトが出るようにした。
・夕焼け/朝焼けの範囲を小さくした。
・ちゃんとフォグがかかるようにSTART、ENDを設定した。
・現在地にマークする機能を追加した。
・方位マーカーの大きさを少し大きくした。
・draw時にあまり計算しなくて済むように、いつくかのパラメータを生成時に計算するようにした。ラジアンから度への変換とか、座標の引き算とか。
・マーカーの表示方法を最適化。法線データを頂点の数分だけ用意して、一気に描くようにした。
結構、いろんなことやったなぁ。
ワイヤーフレームによるガイド表示機能は、作ってはみたものの、イメージと少し違ったので、今回は見送り。次回に「期待」って、だれも期待はしていないか...
ハイライトとフォグでなかなか、きれいになったと思っている。
こっちは夕方の画像。
ARで地球を表示するアプリ
今から少し忙しくなりそう。ブログの更新はしばらくないかも。
それではまた。
サイト内を検索
Androidアプリ開発 OpenGL AREarthroidでハイライトを出す [Androidアプリ AREarthroid]
本日もOpenGLネタではあるが、AREarthroidの拡張を行ったので、それについての話である。AREarthroidでは、NASAからダウンロードしてきた衛星画像を加工してテクスチャマッピングしている。テクスチャマッピングすると、ハイライトが出ないことは前にも書いた。ハイライトが出せると以下のような動画にできるのでは?と思いやってみることに。
すごい。リアルタイムで動いている。androidじゃ無理かな...
えーと、まずは、テクスチャマッピングで描画した後で、テクスチャマッピングしないで、球を描いてみた。そのまま描くと上書きされてしまうので、アルファブレンドする。
アンビエントは透明にして、ディフューズとスペキュラーには色設定して、描画してみた。シャイニネスの値は、80くらいかなぁ。
とやってみると、それなりにハイライトを出せた。が、いまいち。なんか違う。
どこが違うか、というと、上記の動画では、惑星の海の部分にハイライトが出る。海の部分はつるつるだからね。陸地の部分は凹凸がついているので、もしかするとそのせいでハイライトがでていないだけかもしれないが。
でこぼこにするの大変だなぁ。もっとメッシュを細かくしないといけないし。そんなにメモリ使えないし。だいたい、高度データをどこから持ってくればいいのやら。
バンプマッピングとかすればいいのか?
で、少し考えた。
青い球を先に描いて、海部分を透明にしたテクスチャを後で描いたらよくない?
我ながら「よい思いつきではないか」といそいそとコードを描くのであった。
とりあえず、テクスチャの画像の方は、GIMPで海を選択してガサっと一気に消した。細かい部分がだめだが、まずは実験してみなければ。
日本周辺の画像からも海を消した。
これでどうだ。おお、いい線いっている。ちゃんと海の部分にだけハイライトが出ている。がしかし、消し切れていない輪郭の部分が気になる。ハイライトの出方もけっこう派手な感じなので、もう少し抑えるか。青の色ももっと暗くてよい。そんな感じの調整をしていく。
輪郭部分に線が残ってしまうのは、GIMPで「選択部分をぼかす」ときれいに透明化できることがわかった。透明化するのは、色の「色を透明度に」っていうので、海の色を選択することでできた。
さて、次は、たくさんある、詳細画像から海を消さなければならない。けっこうたくさんある。海のない画像は修正する必要はないのだが、日本のまわりはみんな海。海のない画像データは2、3枚しかなかった。はぁ疲れた。
透明データを持たせるには、png形式にしないといけない。jpgには透明がない。せっかく圧縮率がよいのでjpgにしたのだが、pngに戻ってしまった。パッケージの大きさが10Mになってしまったが、しょうがないか。
また、バージョンアップせねば。ポイントスプライトで星も出したかったんだけどなぁ...
今日は疲れたので明日にしよ。テストもしなければ。
ちょっとCGっぽくなり過ぎてしまったか?
サイト内を検索
すごい。リアルタイムで動いている。androidじゃ無理かな...
えーと、まずは、テクスチャマッピングで描画した後で、テクスチャマッピングしないで、球を描いてみた。そのまま描くと上書きされてしまうので、アルファブレンドする。
アンビエントは透明にして、ディフューズとスペキュラーには色設定して、描画してみた。シャイニネスの値は、80くらいかなぁ。
とやってみると、それなりにハイライトを出せた。が、いまいち。なんか違う。
どこが違うか、というと、上記の動画では、惑星の海の部分にハイライトが出る。海の部分はつるつるだからね。陸地の部分は凹凸がついているので、もしかするとそのせいでハイライトがでていないだけかもしれないが。
でこぼこにするの大変だなぁ。もっとメッシュを細かくしないといけないし。そんなにメモリ使えないし。だいたい、高度データをどこから持ってくればいいのやら。
バンプマッピングとかすればいいのか?
で、少し考えた。
青い球を先に描いて、海部分を透明にしたテクスチャを後で描いたらよくない?
我ながら「よい思いつきではないか」といそいそとコードを描くのであった。
とりあえず、テクスチャの画像の方は、GIMPで海を選択してガサっと一気に消した。細かい部分がだめだが、まずは実験してみなければ。
日本周辺の画像からも海を消した。
これでどうだ。おお、いい線いっている。ちゃんと海の部分にだけハイライトが出ている。がしかし、消し切れていない輪郭の部分が気になる。ハイライトの出方もけっこう派手な感じなので、もう少し抑えるか。青の色ももっと暗くてよい。そんな感じの調整をしていく。
輪郭部分に線が残ってしまうのは、GIMPで「選択部分をぼかす」ときれいに透明化できることがわかった。透明化するのは、色の「色を透明度に」っていうので、海の色を選択することでできた。
さて、次は、たくさんある、詳細画像から海を消さなければならない。けっこうたくさんある。海のない画像は修正する必要はないのだが、日本のまわりはみんな海。海のない画像データは2、3枚しかなかった。はぁ疲れた。
透明データを持たせるには、png形式にしないといけない。jpgには透明がない。せっかく圧縮率がよいのでjpgにしたのだが、pngに戻ってしまった。パッケージの大きさが10Mになってしまったが、しょうがないか。
また、バージョンアップせねば。ポイントスプライトで星も出したかったんだけどなぁ...
今日は疲れたので明日にしよ。テストもしなければ。
ちょっとCGっぽくなり過ぎてしまったか?
サイト内を検索
AREarthroid定例報告 英語のサポートページを作る [Androidアプリ AREarthroid]
本日の有効インストール数は、15となっていた。けっこう増えたぞ。
統計情報で端末のところを見ると、その他が4となっている。その他って何?
エミュレータのことか?
以前に、エミュレータにアプリを入れようと試みたことがあったが、なんかできなかったような気がしたのだが...
その他が気になるなぁ。単にマイナーな機種がまとめられちゃうっていうだけなのかも。
国別にみると、やはり日本がダントツで10。
アメリカ、スリランカ、サウジアラビア、香港、オーストラリアがそれぞれ1。
スリランカ、サウジアラビアとか珍しくないか。
有料版のAREarthroidProの方はまだダウンロード数0。従って収入もなし。
これは、多分商売にはならんなぁ...
AREarthroidサポートページの方のアクセス数をみると、英語で書いたアプリの紹介と使い方のページの方が閲覧数が多い。もしかすると、海外の方がウケがいいのかもこのアプリ。
そう思って、英語の解説ページを更新した。自動翻訳である程度はちゃんとした英語になるのだが、やはり校正しないとだめだなぁ。けっこう疲れた。
AREarthroidサポート
https://arearthroid.blog.so-net.ne.jp/
OpenGLの方は昨日の続きで、ポイントスプライトをやろうと思っている。
サイト内を検索
統計情報で端末のところを見ると、その他が4となっている。その他って何?
エミュレータのことか?
以前に、エミュレータにアプリを入れようと試みたことがあったが、なんかできなかったような気がしたのだが...
その他が気になるなぁ。単にマイナーな機種がまとめられちゃうっていうだけなのかも。
国別にみると、やはり日本がダントツで10。
アメリカ、スリランカ、サウジアラビア、香港、オーストラリアがそれぞれ1。
スリランカ、サウジアラビアとか珍しくないか。
有料版のAREarthroidProの方はまだダウンロード数0。従って収入もなし。
これは、多分商売にはならんなぁ...
AREarthroidサポートページの方のアクセス数をみると、英語で書いたアプリの紹介と使い方のページの方が閲覧数が多い。もしかすると、海外の方がウケがいいのかもこのアプリ。
そう思って、英語の解説ページを更新した。自動翻訳である程度はちゃんとした英語になるのだが、やはり校正しないとだめだなぁ。けっこう疲れた。
AREarthroidサポート
https://arearthroid.blog.so-net.ne.jp/
OpenGLの方は昨日の続きで、ポイントスプライトをやろうと思っている。
サイト内を検索
Androidアプリ開発 AREarthroid クラッシュ情報 [Androidアプリ AREarthroid]
みなさんこんにちは、AREarthroidはおかげさまで有効なインストール数が8となりました。毎日Google playのサイトをチェックしているわけだが、サイトではダウンロード数などの情報の他、エラーも報告されている。
アプリケーションエラーレポートには、フリーズした回数、クラッシュした回数が報告される。今まで、0であったものが、本日チェックしたら1となっていた。
フリーズとクラッシュの違いは何かよくわからないが、クラッシュからリンクをたどると、JavaのNumberFormatException例外が発生していることがわかった。さらに例外をクリックすると、スタックトレースが表示された。
おお、なんとすばらしい。これならデバッグしやすいじゃない。
例外のところだけ抜粋。
例外の発生した場所がわかればデバッグするのは割と簡単。今回は、OpenGLのバージョンを判別するための処理でNumberFormatExceptionが発生していることがわかった。
難読化されている、とか注意書きがあるが、別に普通のスタックトレースみたいではあるが... どのあたりが?まあいいや。
関連記事
Androidアプリ開発 ProGuardによる難読化
OpenGLのバージョンは、gl.glGetString(GL10.GL_VERSION)で取得できる。1.0か1.1かを判別して、1.1の場合はVBOを使うようにしている。
「OpenGL ES-CM 1.1」といった文字列になるのが普通みたいなのだが、端末によっては何か異なるのであろう。パージングに失敗しているっぽい。
早速「例外処理」を追加して対応した。パースできない場合は、バージョン1.0として扱う。ユーザーがどなただかわからないが、申し訳ないことをしたと思っている。そして、レポートありがとう(ってもしかして自分かも?)。
フォグの件と併せてバージョンアップしよう。
しかし、Pro版とソースがふたつになってしまっているのでアップデートがちょっと面倒。ソースを共通化する方法ってないものだろうか。
Google play AREarthroid
https://play.google.com/store/apps/details?id=cx.fam.asai.AREarthroidPro
関連記事
サイト内を検索
アプリケーションエラーレポートには、フリーズした回数、クラッシュした回数が報告される。今まで、0であったものが、本日チェックしたら1となっていた。
フリーズとクラッシュの違いは何かよくわからないが、クラッシュからリンクをたどると、JavaのNumberFormatException例外が発生していることがわかった。さらに例外をクリックすると、スタックトレースが表示された。
おお、なんとすばらしい。これならデバッグしやすいじゃない。
例外のところだけ抜粋。
java.lang.NumberFormatException at org.apache.harmony.luni.util.FloatingPointParser.parseFltImpl(Native Method) at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:321) at java.lang.Float.parseFloat(Float.java:323) at cx.fam.asai.AREarthroid.EarthMapGLView$OpenGLRenderer.onSurfaceCreated(EarthMapGLView.java:421) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1348) at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118)
例外の発生した場所がわかればデバッグするのは割と簡単。今回は、OpenGLのバージョンを判別するための処理でNumberFormatExceptionが発生していることがわかった。
難読化されている、とか注意書きがあるが、別に普通のスタックトレースみたいではあるが... どのあたりが?まあいいや。
関連記事
Androidアプリ開発 ProGuardによる難読化
OpenGLのバージョンは、gl.glGetString(GL10.GL_VERSION)で取得できる。1.0か1.1かを判別して、1.1の場合はVBOを使うようにしている。
「OpenGL ES-CM 1.1」といった文字列になるのが普通みたいなのだが、端末によっては何か異なるのであろう。パージングに失敗しているっぽい。
早速「例外処理」を追加して対応した。パースできない場合は、バージョン1.0として扱う。ユーザーがどなただかわからないが、申し訳ないことをしたと思っている。そして、レポートありがとう(ってもしかして自分かも?)。
フォグの件と併せてバージョンアップしよう。
しかし、Pro版とソースがふたつになってしまっているのでアップデートがちょっと面倒。ソースを共通化する方法ってないものだろうか。
Google play AREarthroid
https://play.google.com/store/apps/details?id=cx.fam.asai.AREarthroidPro
関連記事
サイト内を検索
AREarthroid 雲をアルファブレンド [Androidアプリ AREarthroid]
AREarthroidを開発する際に、OpenGLについて得られたノウハウをこのブログにまとめているのだが、アルファブレンドの有効化スイッチがglEnable(GL_ALPHA)となっていることに気付いた。でも、ARモードでアルファブレンドしているよなぁ、おかしいなぁ...
glEnable(GL_BLEND)が正しい有効化の方法。
雲やアメッシュデータを描画するときにアルファブレンドしたかったのだが、なぜかできないと悩んでいたのだが、これが原因か。
さっそく修正。なかなか、かっこよくなった。
でもって早速バージョンアップ。つい、先日バージョンアップしたばかりなのに、「また」っていう感じではあるが、ユーザー数少ないしいいか。
2.2に対応したコードがそのまま入っているので、minSdkVersionが8。まぁ大丈夫でしょう。ということで、アップロードしてしまった。バージョンは1.2となった。
Google play AREarthroid
https://play.google.com/store/apps/details?id=cx.fam.asai.AREarthroid
さらに、動画もアップデートしなければ、と思い、ビデオ撮影を本格的にやってみた。弟所有のHDビデオカメラをちょっと拝借して、やってみるのである。
ちゃんとしたビデオカメラの方がやはりピントはしっかり合う。しかし、映り込みもはっきり映ってしまうので、ライティングと角度を調整してみる。
外の光が入ると、とたんに液晶画面に映り込んでしまう。カーテンは閉めた。
真っ暗だとなんか怖い映像になってしまうので、クリップライトで照明。PCのモニタも照明代わりにスイッチON。
カメラは三脚に固定。
カメラ越しにスマホを操作して、撮影したのが以下。約4分の大作?である。
そういえば、普通のビデオで撮影したから、音も入っているなぁ。変なことブツブツ言ってたりしないか?「オナラ」とかしてたらはずかしいぞ。と思って、音を聞きながら再生してみた。
カメラを回すときに、ギギギといった音が入っているが、なんか妙に静かで不気味。鼻息とかオナラは入っていなかった。
サイト内を検索
glEnable(GL_BLEND)が正しい有効化の方法。
雲やアメッシュデータを描画するときにアルファブレンドしたかったのだが、なぜかできないと悩んでいたのだが、これが原因か。
さっそく修正。なかなか、かっこよくなった。
でもって早速バージョンアップ。つい、先日バージョンアップしたばかりなのに、「また」っていう感じではあるが、ユーザー数少ないしいいか。
2.2に対応したコードがそのまま入っているので、minSdkVersionが8。まぁ大丈夫でしょう。ということで、アップロードしてしまった。バージョンは1.2となった。
Google play AREarthroid
https://play.google.com/store/apps/details?id=cx.fam.asai.AREarthroid
さらに、動画もアップデートしなければ、と思い、ビデオ撮影を本格的にやってみた。弟所有のHDビデオカメラをちょっと拝借して、やってみるのである。
ちゃんとしたビデオカメラの方がやはりピントはしっかり合う。しかし、映り込みもはっきり映ってしまうので、ライティングと角度を調整してみる。
外の光が入ると、とたんに液晶画面に映り込んでしまう。カーテンは閉めた。
真っ暗だとなんか怖い映像になってしまうので、クリップライトで照明。PCのモニタも照明代わりにスイッチON。
カメラは三脚に固定。
カメラ越しにスマホを操作して、撮影したのが以下。約4分の大作?である。
そういえば、普通のビデオで撮影したから、音も入っているなぁ。変なことブツブツ言ってたりしないか?「オナラ」とかしてたらはずかしいぞ。と思って、音を聞きながら再生してみた。
カメラを回すときに、ギギギといった音が入っているが、なんか妙に静かで不気味。鼻息とかオナラは入っていなかった。
サイト内を検索
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本