ARGENTO CUORE

 May the code be with you.

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

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

2010.01.08[金] Android OpenGLでobjファイルを読み込む編 part 2

数日前に、カウンターなるものをブログにつけてみました。
FC2が用意しているのをぺたっと設定してやるだけです。べんりー。
でも、11人の日が3日連続なんですよね。わーい、自分を除けば10人!?とか思ってたんですけど、これって検索エンジンのクローラーとかもカウントされるのかなー。ぬか喜び……。

さて、part2と言っても、まだ完成していないので今日できたところまでの進行を以下。
とりあえず、

・モデルの頂点データ、面データを解釈して3Dモデルを表示

まではできたんですけど、Misfit Model 3DでUVテクスチャを扱う方法がよくわからなくてハマってます……日本語のマニュアルないかなー。しばらくモデリングをたのしんでみよー。

マテリアル(テクスチャ、材質等)は、mtlファイルに保存されるのですが、頂点データと面データのみを扱うので、objのみを読み込んでいきます。

objのファイルフォーマットをテキストファイルで閲覧すると見られる以下のような
v float float float

f hoge1/piyo1/fuga1 hoge1/piyo1/fuga1 hoge1/piyo1/fuga1
という二種類の行を解釈するようにします。

vはvertex、fはfaceです。
fはスラッシュで区切られたいくつかのデータが並びますが、Misfit Model 3Dは三角ポリゴンを取り扱うように作られており、hoge1 -> hoge2 -> hoge3の順(時計回り=CW)に並ぶ座標を面として扱いますよーという意味をもっています。詳しくはOpenGLなりなんなりのCGの参考書を見れば大抵書かれているかも。piyo、fugaについては今回は無視。

v float float float <- 1番目の座標
v float float float <- 2
v float float float <- 3

と、頂点座標は書かれている順に番号がふられており、faceデータはそれと結びつけられるようになっています。

これで、座標と面データを得られるので、あとは普通にOpenGLとして描画してやればOK。
注意するのは、OpenGLはデフォルトだとCCW(反時計回り)なので、CWに変更しておく。
あと、ポリゴンは三角ポリゴンなので、GL_TRIANGLESで描画するようにしておく。TRIANGLE_STRIPが高速だと聞くけど、色々考えながらモデリングしないとダメそうなので(TRIANGLE_STRIP化するようなコンバータとかあるのかな……一筆書きみたいな……)、速度が遅すぎて気になってどうしようもなくなったら考えます……。
それ以前に、floatで扱っている座標データをintに直そうか迷い中。

ambientとか、CGソフトの材質の設定画面を見ているとすごい懐かしい。
昔授業でOpenGL習ったときとかは、こういうのいっぱいつかってなんかやってた。

けども、Androidは速度が出ないので、マテリアル設定の大半(というかテクスチャ以外?)は無視することになりそーな感じも? ベンチマークを取ったサイトとかあるかなー……。どれくらいのことをしてどれくらいのFPSが出るのか感覚がわかりません(パソコンだと、適当なマテリアルバリバリのサンプルプログラムでさえ簡単に数百FPS出るし……)。

で、若干プログラム的なメモ。
Androidでは、R.hogepiyo.fugaという形でリソースのID(int)にアクセスできますが、このfugaを動的に変更したかったので、リフレクションなるものを初使用。以下、コードです。

Class cls = R.drawable.class;
try{
Field f = cls.getField(取得したいフィールド名(String));
int res_id = f.getInt(cls);
}catch(NoSuchFieldException e){
}catch(IllegalAccessException e){}

みたいな感じで、getInt()でフィールドの値を取得してます。
これでobjファイルに書かれたmtlファイルをロードし、mtlファイルに書かれたtexture.pngファイルも読み出せます!
めでたしーめでたしー。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/28-02c7a74b

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

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

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

検索フォーム

QRコード

QRコード

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

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