Androidアプリ開発 OBJ形式のファイルを開くために「ファイル選択ダイアログ」が欲しい [Androidアプリ AREarthroid]
えーと、本日はAREarthroid関係のネタである。
AREarthroidでは、OpenGLを使用して3Dデータを表示している。自分でモデリングして作成した3Dデータを地球上に置くことができたら、かっこいいのではないかと思っている。
しかし、プログラムが「便利かどうか」ではなく「かっこいいかどうか」で機能拡張されていく気がしてならない。いいのだろうか... まぁ、いいとしよう。
でもって、3Dデータといってもいろいろな形式があるわけだが、無難なのは、OBJ形式かなぁ。
他には、DXFとか、3DSといった形式がある。OBJ形式は、Wavefrontの汎用フォーマットなわけね。
OBJ形式といってもバイナリじゃなくてテキスト。拡張子.objだとコンパイラが生成するオブジェクトファイルのイメージが強いので、バイナリか?と思ってしまうが、テキスト形式である。
開いて見てみると、数値がたくさん並んでいるだけ。ぱっと見何がなんやらわけがわからない。まぁ、3次元での座標値が書いてあるだけなので、ファイルの内容をみても何がなんだか、らわからなくて当たり前。
まずは、読み込み部分を作るか。えーと、最初から作成するのも骨が折れるので、検索。
http://www.saturn.dti.ne.jp/npaka/android/HelloGL10_21/index.html
にあるOBJ読み込みコードを参考にして作り始めた。
えーと、OBJファイルのフォーマットがわかっていないとプログラムも作れんなぁ。
上記のサイトにフォーマットの説明もあった。
なになに、基本「行」でひとつのデータになるのね。mtlibはマテリアルデータファイルの指定か。マテリアルは別のファイルになっているのか。
gは、グループ。
vが頂点座標(XYZ)。
vtは、テクスチャマッピングの座標(UV)。
vnは、法線(XYZ)。
usemtlでマテリアル名を指定。
fでポリゴン。
だいだいわかった。
しかし、Javaで書いたら「遅そう」。と思いつつも、なんとか完成。
とりあえず、初音ミクのOBJ形式データをassets/miku.objで作成して読み込ませてみた。案の定遅い。しかもバグっていてちゃんと表示されないし。
OpenGL ESでは、三角形のポリゴンしか表示できない。四角形もあるじゃないの。
なんか、テクスチャ座標番号の入っていないところもあるし。
なんやかんやいろいろと修正。ついでにparseFloatが遅いので、C/C++で作成。少し速くなった。
でどうなったかというと、今のところ、こんな感じです。
スケールを自動調整しないと、だめだなぁ。いくらなんでもでかすぎ。
ガンダムも表示してみた。
日光の当たり具合で、後ろ向きじゃないと逆行で真っ黒になってしまう。
ガンダムは、地面にめりこんでるなぁ。初音ミクは浮いてるし。標高データの精度が悪いっていうことか。これはいたしかたなしか...
どちらのデータもOBJファイルで1.3M程度の大きさ。頂点数もshortで収まっているので、2万個程度。メモリ的には大丈夫らしい。VBOにはまだしていないが、いずれはするつもり。描画速度はそれほど悪くない。読み込みには2秒程かかる。
テクスチャマッピングはしない方向で考えている。
ファイル選択したい
ここからが、本題。長い前振りであった。
外部にあるOBJファイルを選択して、AREarthroidに読み込ませたいと思っている。OBJファイルをインポートして、ローカルファイルにバイナリで保存しておけば、読み込み速度も改善されるでしょう。
それはよいとして、問題はどうやってファイル選択をするかである。画像ファイルなら、暗黙的インテントでピックアップすればよかったが、OBJファイルってテキストファイル。どういったインテントを投げればいいのやら... MIMEタイプをtext/plainにすればいいだけなのか?...
ファイルマネージャ的なアプリがインストールされていれば、そこに向かってインテントを投げてやればよさそうな気がするが、Android標準のファイルマネージャっていうのがありません(よね?)。
OBJファイルは、どこからかダウンロードしてくるであろうから、/download以下のファイルをリストするアクティビティでも作るか。/downloadならダウンロードアプリを起動すればいいかも?
ということで、ファイル選択の方法で行き詰っている。
初音ミクのOBJデータは、以下のURLにあった「Blenderデータ」を使って、適当にポーズを付けてエクスポートして作成。
キオ式アニキャラ3D act.3
http://kiomodel3.sblo.jp/
ガンダムの方は、以下のサイトにあったのを使わせてもらっている。
SeaGate Blog
http://pub.ne.jp/seagate/
他にも3Dデータがいろいろあるなぁ。Androidアプリも開発しているのか。とても参考になりそう。
「かんたんAndroidアプリ作成入門」には、インテントの使い方も載ってます。
サイト内を検索
AREarthroidでは、OpenGLを使用して3Dデータを表示している。自分でモデリングして作成した3Dデータを地球上に置くことができたら、かっこいいのではないかと思っている。
しかし、プログラムが「便利かどうか」ではなく「かっこいいかどうか」で機能拡張されていく気がしてならない。いいのだろうか... まぁ、いいとしよう。
でもって、3Dデータといってもいろいろな形式があるわけだが、無難なのは、OBJ形式かなぁ。
他には、DXFとか、3DSといった形式がある。OBJ形式は、Wavefrontの汎用フォーマットなわけね。
OBJ形式といってもバイナリじゃなくてテキスト。拡張子.objだとコンパイラが生成するオブジェクトファイルのイメージが強いので、バイナリか?と思ってしまうが、テキスト形式である。
開いて見てみると、数値がたくさん並んでいるだけ。ぱっと見何がなんやらわけがわからない。まぁ、3次元での座標値が書いてあるだけなので、ファイルの内容をみても何がなんだか、らわからなくて当たり前。
まずは、読み込み部分を作るか。えーと、最初から作成するのも骨が折れるので、検索。
http://www.saturn.dti.ne.jp/npaka/android/HelloGL10_21/index.html
にあるOBJ読み込みコードを参考にして作り始めた。
えーと、OBJファイルのフォーマットがわかっていないとプログラムも作れんなぁ。
上記のサイトにフォーマットの説明もあった。
なになに、基本「行」でひとつのデータになるのね。mtlibはマテリアルデータファイルの指定か。マテリアルは別のファイルになっているのか。
gは、グループ。
vが頂点座標(XYZ)。
vtは、テクスチャマッピングの座標(UV)。
vnは、法線(XYZ)。
usemtlでマテリアル名を指定。
fでポリゴン。
だいだいわかった。
しかし、Javaで書いたら「遅そう」。と思いつつも、なんとか完成。
とりあえず、初音ミクのOBJ形式データをassets/miku.objで作成して読み込ませてみた。案の定遅い。しかもバグっていてちゃんと表示されないし。
OpenGL ESでは、三角形のポリゴンしか表示できない。四角形もあるじゃないの。
なんか、テクスチャ座標番号の入っていないところもあるし。
なんやかんやいろいろと修正。ついでにparseFloatが遅いので、C/C++で作成。少し速くなった。
でどうなったかというと、今のところ、こんな感じです。
スケールを自動調整しないと、だめだなぁ。いくらなんでもでかすぎ。
ガンダムも表示してみた。
日光の当たり具合で、後ろ向きじゃないと逆行で真っ黒になってしまう。
ガンダムは、地面にめりこんでるなぁ。初音ミクは浮いてるし。標高データの精度が悪いっていうことか。これはいたしかたなしか...
どちらのデータもOBJファイルで1.3M程度の大きさ。頂点数もshortで収まっているので、2万個程度。メモリ的には大丈夫らしい。VBOにはまだしていないが、いずれはするつもり。描画速度はそれほど悪くない。読み込みには2秒程かかる。
テクスチャマッピングはしない方向で考えている。
ファイル選択したい
ここからが、本題。長い前振りであった。
外部にあるOBJファイルを選択して、AREarthroidに読み込ませたいと思っている。OBJファイルをインポートして、ローカルファイルにバイナリで保存しておけば、読み込み速度も改善されるでしょう。
それはよいとして、問題はどうやってファイル選択をするかである。画像ファイルなら、暗黙的インテントでピックアップすればよかったが、OBJファイルってテキストファイル。どういったインテントを投げればいいのやら... MIMEタイプをtext/plainにすればいいだけなのか?...
ファイルマネージャ的なアプリがインストールされていれば、そこに向かってインテントを投げてやればよさそうな気がするが、Android標準のファイルマネージャっていうのがありません(よね?)。
OBJファイルは、どこからかダウンロードしてくるであろうから、/download以下のファイルをリストするアクティビティでも作るか。/downloadならダウンロードアプリを起動すればいいかも?
ということで、ファイル選択の方法で行き詰っている。
初音ミクのOBJデータは、以下のURLにあった「Blenderデータ」を使って、適当にポーズを付けてエクスポートして作成。
キオ式アニキャラ3D act.3
http://kiomodel3.sblo.jp/
ガンダムの方は、以下のサイトにあったのを使わせてもらっている。
SeaGate Blog
http://pub.ne.jp/seagate/
他にも3Dデータがいろいろあるなぁ。Androidアプリも開発しているのか。とても参考になりそう。
「かんたんAndroidアプリ作成入門」には、インテントの使い方も載ってます。
かんたんAndroidアプリ作成入門 (プログラミングの教科書)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2013/04/16
- メディア: 単行本(ソフトカバー)
関連記事
Android 4.0対応AREarthroid Android 4.0対応 TRANSLUCENTがだめ
OpenGLの記事を最初から読みたいなら、以下からどうぞ。
Androidアプリ開発 OpenGLを使う GLSurfaceView
Android 4.0対応AREarthroid Android 4.0対応 TRANSLUCENTがだめ
OpenGLの記事を最初から読みたいなら、以下からどうぞ。
Androidアプリ開発 OpenGLを使う GLSurfaceView
サイト内を検索
Copyright Atsushi Asai Google+朝井淳
[データベースの気持ちがわかる]SQLはじめの一歩 (WEB+DB PRESS plus)
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2015/03/03
- メディア: 単行本(ソフトカバー)
Access クエリ 徹底活用ガイド ~仕事の現場で即使える
- 作者: 朝井 淳
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/25
- メディア: 大型本
コメント 0