AREarthroid Android 4.0対応 TRANSLUCENTがだめ [Androidアプリ AREarthroid]
久しぶりのブログ更新である。
本日のネタもAndroid。仕事がひと段落したので、AREarthroidのバージョンアップを行っている。
Android 4.0で動かした時に、背景がクリアされない現象は、どうも合成のために、OpenGLのサーフェースをTRANSLUCENTにするとダメになることが判明。
カメラプレビューと、OpenGLの画像を合成することで、AR的な画像が表示できる。OpenGLの背景の部分が、カメラプレビューになる、ということ。
GLSurfaceViewのコンストラクタで、以下のようにして設定を行っている。
最初は、カメラプレビューしていない状態から始まる。TRANSLUCENTになっていても、glClearで問題なく背景がクリアされていたが、Android 4.0になってから挙動が変わったらしい。
glClearでクリアする色のアルファ値を1.0に変更したところ、ちゃんと背景がクリアされるようにはなった。しかし、アルファブレンドで処理している部分に、残像が表示されてしまう。キャプチャできればよいのだが、残像はキャプチャできなかった。
TRANSLUCENTの設定をコメントアウトしてやってみると、残像が消えた。カメラプレビューのサーフェースにごみが書き込まれてしまっているのか?アルファ値が怪しそうなのだが...
TRANSLUCENTの設定をコメントアウトすると、当然ながら背景が透けない。カメラプレビューと合成できない。プレビュー開始時に、TRANSLUCENTの設定を行ってみると、ちゃんと合成された。
プレビューを終了する際に、元に戻したいのだが、どうすればよいのかわからない。プレビューは終了するが、残像が発生してしまう。カメラプレビューのON/OFFの方法に問題があるのかも?
とりあえずは、4.0の場合、TRANSLUCENTの設定をしないことで逃げることに。
ローパスフィルタ
ご存じのようにセンサーからの生データをそのまま使用すると、ノイズが多く、手ぶれ状態になる。ローパスフィルタをかけて、滑らかにしないと画面がブレてみれたものではない。原理は異なるが、ソフトウェアでVRをかける感じ。
AREarthroidでは、こんな感じでフィルタをかけている。
ここで、alphaの値を0.9とかにすると、滑らか度が増す。かわりに、反応は悪くなる。0.7にすると、反応はよくなるが、ブレブレな感じは増す。
AREarthroidでは、強、中、弱の設定が可能なようにした。
objファイルの選択
課題となっていた、objファイルの選択は、暗黙的インテントでファイルマネージャを起動することで行うことにした。以下のような、インテントを投げると、ファイルマネージャが起動する。
ファイルマネージャに、拡張子の登録がないと、リストされないが、そこまで面倒をみるのは大変。ユーザーに、やってもらうことにする。
ファイルマネージャ的なアプリが入っていないと、何も起動しないかも。
アクセス権の問題があるので、ローカルファイルにコピーしてきて、3Dデータを読み込む。obj形式の3Dデータには、マテリアルファイルが別にあるので、こちらのファイルも別途インポートしてもらう。少し手間がかかるが、しょうがない。
読み込んだ3Dデータの大きさは、スライドで調整できるようにした。調整できないと地球サイズのガンダムになってしまう。
関連ページ
http://asai-atsushi.blog.so-net.ne.jp/2012-06-12
回転マトリックス
AREarthroidでは、端末向きを計算して、カメラの位置を計算している。これが、ちょっとまどろっこしい方法になっていたので、getRotationMatrixで得られる回転マトリックスで回転させる方法に変更。
これで、少しブレブレ感を抑えることができた。また、カメラ位置の計算方法が変更になったので、地球から離れた位置からみたときの挙動が変わった。スペースシャトルから地球を「見下ろしている」感じになる。これがなかなか「かっこいい」。
端末を四方に並べてみたら、かなり面白そう。車に積んでみるのもいいか。
サイト内を検索
本日のネタもAndroid。仕事がひと段落したので、AREarthroidのバージョンアップを行っている。
Android 4.0で動かした時に、背景がクリアされない現象は、どうも合成のために、OpenGLのサーフェースをTRANSLUCENTにするとダメになることが判明。
カメラプレビューと、OpenGLの画像を合成することで、AR的な画像が表示できる。OpenGLの背景の部分が、カメラプレビューになる、ということ。
GLSurfaceViewのコンストラクタで、以下のようにして設定を行っている。
setEGLConfigChooser(8, 8, 8, 8, 16, 0); getHolder().setFormat(PixelFormat.TRANSLUCENT); renderer = new OpenGLRenderer(); setRenderer(renderer); setRenderMode(RENDERMODE_WHEN_DIRTY);
最初は、カメラプレビューしていない状態から始まる。TRANSLUCENTになっていても、glClearで問題なく背景がクリアされていたが、Android 4.0になってから挙動が変わったらしい。
glClearでクリアする色のアルファ値を1.0に変更したところ、ちゃんと背景がクリアされるようにはなった。しかし、アルファブレンドで処理している部分に、残像が表示されてしまう。キャプチャできればよいのだが、残像はキャプチャできなかった。
TRANSLUCENTの設定をコメントアウトしてやってみると、残像が消えた。カメラプレビューのサーフェースにごみが書き込まれてしまっているのか?アルファ値が怪しそうなのだが...
TRANSLUCENTの設定をコメントアウトすると、当然ながら背景が透けない。カメラプレビューと合成できない。プレビュー開始時に、TRANSLUCENTの設定を行ってみると、ちゃんと合成された。
プレビューを終了する際に、元に戻したいのだが、どうすればよいのかわからない。プレビューは終了するが、残像が発生してしまう。カメラプレビューのON/OFFの方法に問題があるのかも?
とりあえずは、4.0の場合、TRANSLUCENTの設定をしないことで逃げることに。
ローパスフィルタ
ご存じのようにセンサーからの生データをそのまま使用すると、ノイズが多く、手ぶれ状態になる。ローパスフィルタをかけて、滑らかにしないと画面がブレてみれたものではない。原理は異なるが、ソフトウェアでVRをかける感じ。
AREarthroidでは、こんな感じでフィルタをかけている。
public void onSensorChanged(SensorEvent event) { float alpha = 0.8; // ローパスフィルター accelerometerValues[0] = alpha * accelerometerValues[0] + (1.0f - alpha) * event.values[0]; accelerometerValues[1] = alpha * accelerometerValues[1] + (1.0f - alpha) * event.values[1]; accelerometerValues[2] = alpha * accelerometerValues[2] + (1.0f - alpha) * event.values[2]; }
ここで、alphaの値を0.9とかにすると、滑らか度が増す。かわりに、反応は悪くなる。0.7にすると、反応はよくなるが、ブレブレな感じは増す。
AREarthroidでは、強、中、弱の設定が可能なようにした。
objファイルの選択
課題となっていた、objファイルの選択は、暗黙的インテントでファイルマネージャを起動することで行うことにした。以下のような、インテントを投げると、ファイルマネージャが起動する。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("text/plain"); startActivityForResult(intent, REQUEST_CODE_PICK_OBJ);
ファイルマネージャに、拡張子の登録がないと、リストされないが、そこまで面倒をみるのは大変。ユーザーに、やってもらうことにする。
ファイルマネージャ的なアプリが入っていないと、何も起動しないかも。
アクセス権の問題があるので、ローカルファイルにコピーしてきて、3Dデータを読み込む。obj形式の3Dデータには、マテリアルファイルが別にあるので、こちらのファイルも別途インポートしてもらう。少し手間がかかるが、しょうがない。
読み込んだ3Dデータの大きさは、スライドで調整できるようにした。調整できないと地球サイズのガンダムになってしまう。
関連ページ
http://asai-atsushi.blog.so-net.ne.jp/2012-06-12
回転マトリックス
AREarthroidでは、端末向きを計算して、カメラの位置を計算している。これが、ちょっとまどろっこしい方法になっていたので、getRotationMatrixで得られる回転マトリックスで回転させる方法に変更。
これで、少しブレブレ感を抑えることができた。また、カメラ位置の計算方法が変更になったので、地球から離れた位置からみたときの挙動が変わった。スペースシャトルから地球を「見下ろしている」感じになる。これがなかなか「かっこいい」。
端末を四方に並べてみたら、かなり面白そう。車に積んでみるのもいいか。
サイト内を検索
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0