ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

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

2010.01.07[木] Android OpenGLでobjファイルを読み込む編 part 1

ポリゴン表示とテクスチャ表示ができたら、次にやりたくなるのは自分でモデリングしたオブジェクトを表示させることでしょう?ということで頑張ります。

モデリングソフトはWindowsでは色々あるけど、Linuxで動作するのはBlenderくらいだよなー、インターフェース独特だったよなー、モデリング機能だけで良いからLightWaveのModelerもしくはMetasequoiaみたいなのないかなーと右往左往。

ファイル形式は、シンプルで必要十分な情報を兼ね備えたobjが好ましいです。昔OpenGLでモデル表示したときに、ファイルフォーマットを調べて読み込めば良いとかいうとこまで頭が回らず、方眼紙に表示したいモデルの三面図を鉛筆で書いて必死にvertexデータとfaceデータをメモ帳に書き写して、それを読み込むようにしていた頃が懐かしいです。そんなこんなでobjのvとfを見たときに、これしかないと思った次第です。

話は戻ってモデリングソフトですが、Windows、MacOS X、Linuxで動作するMisfit Model 3Dというソフトを発見しました。GUIツールキットにはQT(キュートです、キュート!)が使われているらしいです。

Xubuntu9.10では、synapticパッケージマネージャからmm3dで検索すると出てきます。簡単にインストールできます。
ポリゴンモデリング、テクスチャに対応しており、アニメーションもできるそうですが、画面がとてもシンプルでわかりやすい。更にWavefrontが開発したobjファイルフォーマットを出力可能ということで、高機能ではないものの、今回の目的に合致した素晴らしいソフトです。

obj ファイルフォーマット


で、てきとーに作ったobjファイルを読み込ませることにしました。
でも、実行環境はAndroidなので、普通のPCみたくファイルを読み込むことができませんでした。今回はそこを重点的にメモ書きしておきます。

アプリケーションが元々もっているデータは、リソースとしてアクセスするようにします(これでよいのか?)。
テクスチャもres/drawable/hoge.pngという感じで設置していたので、同じ表示物?ということでres/drawable/hogepiyo.objみたいな形でobjファイルを設置しておきます。

このファイルへのアクセスですが、

context.getResourcesで得られるResourcesオブジェクトに色々なメソッドが用意されています。
で、ファイルを読むためにInputStreamを返してくれるopenRawResourceというのがあるんですが、Rawって何……? Raw画像? あれ……。

InputStream is = context.getResources().openRawResource(R.drawable.hogepiyo.obj);
でinputStreamオブジェクトを新規に作成し、
BufferedReader br = new BufferedReader(new InputStreamReader(is));
でBufferedReaderを作ります。内心、なんだか、こんなにnewして良いのだろうかと不安になります。openRawResourceで読み込んで良いのかとても気がかりです。

でも読み込んでしまえたのだから仕方ない(ぁ

InputStreamReaderは、InputStreamで読み込んだバイトの羅列を文字データとして読み直します。objファイルはasciiなので、ISO-8859-1を指定してもしなくてもきっと大丈夫です(このファイルフォーマットで読み込んでくれなきゃ死んじゃうなんてときは、引数の二番目に文字コードを指定してあげてください)。

BufferedReaderは、バッファを使うことで高速化される(らしい)です。測ったことないのでほんとなのかは知りません。

バッファ上のテキストデータは、read(),readLine()などと言ったメソッドで取得できます。一文字ずつだったり、長さや位置を指定したり、一行ずつだったり。

きちんと読み込めているかどうかを確認するために以下のコードを書き加える。

String line;
try {
while ((line = br.readLine()) != null){
Log.i("readLine", line);
}
}catch(IOException e){
//ぎゃー
}

シェルから、

$adb logcat

しておき、きちんとデータが表示されればとりあえず読み込み完了です。

openRawResourceが気になる……(つづく)
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/27-46586a9d

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

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