12.「面はすべて同一のマテリアル設定」ではないモデルファイルの読み込みに対応する
「面はすべて同一のマテリアル設定」ではないモデルファイルの読み込みに対応します。
11.のファイル読み込み処理は、アスキー形式STLファイル読み込み処理でしたが、新たに、OBJファイル読み込み処理を追加し、読み込むファイルの拡張子により、アスキー形式STLファイル読み込み処理とOBJファイル読み込み処理のどちらかが呼び出されるように変更します。
※STLファイルは、「面はすべて同一のマテリアル設定」であるモデルしか表現できませんが、OBJファイルは、「面はすべて同一のマテリアル設定」でないモデルも表現できます。
解説
以下を行います。
- モデルファイル読み込みパッケージの配置
- OBJファイル読み込みクラスの作成
- STLファイル読み込みクラスの変更
- モデルクラスのの変更
- モデルファイル読み込み処理の変更
- モデル描画処理の変更
実装
プロジェクトを開く
11.で作成したモデルビューアプロジェクトを開きます。
モデルファイル読み込みパッケージの配置
STLファイルおよびOBJファイルの読み込み処理をまとめた下記「モデルファイル読み込みパッケージ」をプロジェクトに配置します。
モデルファイル読み込みパッケージ(modelfileloader.zip)
下記手続きで「モデルファイル読み込みパッケージ」をプロジェクトに配置します。
- modelfileloader.zip をダウンロードし、適当なフォルダに解凍します。
- modelfileloader.zip を解凍するとできる、「com」フォルダを、コピーします。
- Windowsのエクスプローラを用いて、ModelViewerTutorialプロジェクトのフォルダを探します。
- プロジェクトのフォルダの下の「app\src\main\javal」フォルダに移動します。
- 「modelfileloader」フォルダを、ペーストします。
- (AndroidStudioの「Project」ペインの「app > java > com.hiramine > modelfileloader」フォルダが追加されます。)
Windowsのエクスプローラでのファイル配置の様子
Eclipseのパッケージ・エクスプローラーでのパッケーチ配置の様子
STLファイル読み込みクラスの削除
STLファイルの読み込みは、「モデルファイル読み込みパッケージ」のクラスを使用しておこないます。「STLファイル読み込みクラス」は使用しないので削除します。
「Project」ペインの「app > java > ドメイン.modelviewertutorial > StlFileLoader」を右クリックします。
右クリックメニュー「Delete」を選択します。
「削除の確認」ダイアログが表示されます。
チェックをすべて外します。
「OK」ボタンを押すと、STLFileLoaderが削除されます。
モデルファイル読み込みクラスの作成
モデルファイルの読み込み処理を担うクラスを作成します。
「Project」ペインの「app > java > ドメイン.modelviewertutorial」を右クリックします。
右クリックメニュー「New > Java Class」を選択します。
Nameに、「ModelFileLoader」、
を入力し、「OK」ボタンを押します。
ModelFileLoaderクラスの中身を以下のようにします。
「Cannot resolve symbol」エラーは、「Alt + Enter」で、必要なクラスをimportします。
モデルビューアビュークラスのモデルファイル読み込み関数の変更
モデルビューアビュークラスのモデルファイル読み込み関数を変更します。
loadModelFile関数内の
final Model model = StlFileLoader.load( strPath );
を
final Model model = ModelFileLoader.load( strPath );
に変更します。
ファイル選択アクティビティの拡張子フィルタの変更
メインアクティビティのファイル選択アクティビティを起動する処理の拡張子フィルタに関する処理を変更します。
onOptionItemSelected関数内の
intent.putExtra( FileSelectionActivity.EXTRA_EXT, "stl" );
を
intent.putExtra( FileSelectionActivity.EXTRA_EXT, "stl; obj"
);
に変更します。
リビルドし、エラー、警告がないことを確認します。
実行
Android端末にて、動作確認。
実行し、アスキー形式STLファイルだけでなくOBJファイルからモデルデータを読み込んで描画できるようになっていることを確認します。
al.objファイルの読み込み
(点、線を非描画設定)
ダウンロード
サンプルプロジェクト
(github.com上のダウンロードページ)
サンプルモデル(al.obj)
関連ページ
前項目:11. 「面はすべて同一のマテリアル設定」ではないモデルファイルの描画に対応する
次項目:13.モデルファイル読み込みの進捗表示