SATCHが日本語情報出してくれたので、改めてD’Fusion StudioにチャレンジしてAndroidアプリを作れた!

  • このエントリーをはてなブックマークに追加
  • 80

SATCHが公開されて、AR界隈が盛り上がっている・・・のかは知らんが、
ひとまず俺は乗り遅れた。
しかも、Total ImmersionのD’Fusion StudioというSATCHでも使われている
フリーの製品をいち早く取り込んだら乗り遅れると言う皮肉な事態。

しかもSATCHは12/20からずっとメンテ中で新規登録が出来ない。
しかし嘆くことは無い!
何とSATCHのサイトには、D’Fusion Studioの日本語チュートリアルがあるのだ!
これは便利!!
と言うことで、早速これを参考に、SATCHに頼らないD’Fusionによる
ARアプリ開発をやってみよう。

ナノブロック モノトーン

ナノブロック モノトーン

定価:¥ 3,024

Amazon価格:¥ 5,480

カテゴリ:おもちゃ&ホビー

発売日:2008-10-31



では、D’Fusion Studioでの開発を始める。
まず、こちらのサイトからD’Fusion Studioをダウンロードする。
また、併せてユーザ登録もする。
ここで登録したIDとメアドはSATCHで使えないので注意。

ダウンロードが終わったら、SATCHの開発ガイド
SATCH Developers|Step1. ARコンテンツ制作
を見ながらインストールする。
ただ、このとき使うIDとパスワードはSATCHのではなく、先ほど登録したものを使う。

で、そのままSATCHのチュートリアルを進め、
SATCH Developers|1.8 ARコンテンツエクスポート
までくると、あれ?となる筈だ。
そう。
出力するPlatformの追加に「android」なんてない。
あるのはWindowsとかMacだ。

そこで、以下の手順を踏もう。

1.Targetを追加。
まず、「@Home」と書いてある選択リストから「Add Target」を選ぶ。

すると、Target追加ダイアログが出てくる。その中にmobileと言うのがあるので、
選んでOKを押す。

するとTargetにmobileが増えるので、選択する。

2.Platformsを選択
ここまで来るとチュートリアルに近づいている。
mobileをTargetにしておくと、Platformsの方にはandroidがある。
これを選べばよい。無かったら、Add Platformを選べば追加できる。

これで完了。Android用にエクスポートする。
ちなみに、今回はAndroidでアプリを作る時のクラス名を
「org.tarotaro.android.ar.DFusionSampleAndroidActivity」
にすることにする。そのため、アプリケーションIDは
「org.tarotaro.android.ar」
になる。ここだけ注意だ。

次はAndroidでARアプリを作るとしよう。
先ほどのTotal Immersionのサイトにログインした状態で、DOWNLOADから
D’Fusion Studio Suiteを選択すると、色々ダウンロードできるページに飛ぶ。
この中から、D’Fusion Mobile SDK for Android 3.2をダウンロードしよう。
ダウンロードして解凍すると、英語の開発ガイドとライブラリが入っている。
とりあえずざっと読んだ所だと、エクスポートした時に出来る「dfk」ってファイルが
コンテンツキーになっていて、エクスポートした段階ではテスト用のキーがもらえる。
で、D’Fusion PROを使っている人は、テスト用のキーをTI社に送ると、本番用の
キーファイルがもらえるらしい。後、商用利用は本番用限定との事。
商用利用するためにはPRO版必須なのは厳しいかも。
SATCHでもコンテンツ登録とかするみたいだけど、それがこの本番用キーの
入手になるのかな。だとするとSATCHはその辺りが嬉しいとも言えるね。

さて、今回はテスト用のキーのままで行くのだが、次はどうするかと言うと、
SATCH Developers|Step2. アプリケーション開発
の、アプリケーション開発 for Androidを見て、開発環境を作る
で、環境が出来たら、
SATCH Developers|2.2.2アプリ生成
を見て、2.2.2.2まで真似る。ここまでは全く一緒だ。
ちなみに
プロジェクト名は「DFusion_Sample_Android」、
パッケージ名は「org.tarotaro.android.ar」、
Activity名は「DFusionSampleAndroidActivity」
にしてみた。
で、次がいよいよ違う。ライブラリが違うからね。

ダウンロードしたD’Fusion Mobile SDK for Android 3.2の中の、
DFusionMobile_Android_0/DFusionMobile_Android/SDK以下にある
dfusionmobilesdk.jarとlibtiAndroidAR2.soを、以下のように配置する。

つまり、SATCHで言う「satch.jar」の代わりに「dfusionmobilesdk.jar」を使い、
libsatchAndroid.soが無い状態だ。
で、解説でsatch.jarにやっているようにdfusionmobilesdk.jarをビルドパスに追加する。

そして次に、AndroidManifest.xmlを開いて編集するのだが、これはSATCHとD’Fusionでかなり違う。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.      package="org.tarotaro.android.ar"
  4.      android:versionCode="1"
  5.      android:versionName="1.0">
  6.  
  7.  
  8.     <application android:icon="@drawable/icon" android:label="@string/app_name"
  9.                  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
  10.                  android:debuggable="true">
  11.         <activity android:name=".DFusionSampleAndroidActivity"
  12.                  android:label="@string/app_name"
  13.                  android:screenOrientation="landscape"
  14.                  android:configChanges="orientation|keyboard|keyboardHidden">
  15.             <intent-filter>
  16.                 <action android:name="android.intent.action.MAIN" />
  17.                 <category android:name="android.intent.category.LAUNCHER" />
  18.             </intent-filter>
  19.         </activity>
  20.     </application>
  21.     <uses-permission android:name="android.permission.CAMERA"/>
  22.     <uses-feature android:name="android.hardware.camera"/>
  23.     <uses-feature android:name="android.hardware.autofocus"/>
  24. </manifest>

見て分かるとおり、大分少ない。
SATCHは利用者の位置情報やら何やらを収集するが、D’Fusionはしないからだ。
カメラ機能だけをONにしている。
ここも、SATCHとD’Fusionの大きな違いだ。利用規約に位置情報取得について
書かないといけないなど、SATCHは使ってもらうのに気を遣うのだが、元々の
D’Fusionはそうでもないのだ。
SATCHの利用規約に同意するとD’Fusionそのままの機能は使えないのだろうか?
この辺りのライセンスの扱いは気になる。

次に、Javaで書かれたActivityを編集する。以下の様な感じだ。
ちなみにこれはSDKについてる開発ガイドに乗っているコードをつないで作った。

  1. package org.tarotaro.android.ar;
  2.  
  3. import ti.dfusionmobile.tiComponent;
  4. import android.app.Activity;
  5. import android.content.pm.ApplicationInfo;
  6. import android.content.pm.PackageManager;
  7. import android.content.pm.PackageManager.NameNotFoundException;
  8. import android.os.Bundle;
  9. import android.util.Log;
  10. import android.widget.FrameLayout;
  11.  
  12. public class DFusionSampleAndroidActivity extends Activity {
  13.     private FrameLayout _frameLayout;
  14.     private tiComponent _tiComponent;
  15.     /** Called when the activity is first created. */
  16.     @Override
  17.     public void onCreate(Bundle savedInstanceState) {
  18.         Log.e(this.getClass().getName(),"onCreate");
  19.         super.onCreate(savedInstanceState);
  20.         _tiComponent = new tiComponent(this);
  21.     }
  22.    
  23.     @Override
  24.     public void onStart() {
  25.         Log.i(this.getClass().getName(),"onStart");
  26.         _frameLayout = new FrameLayout(this);
  27.         _tiComponent.initialize(_frameLayout);
  28.         _tiComponent.activateAutoFocusOnDownEvent(true);
  29.         setContentView(_frameLayout);
  30.         super.onStart();
  31.        
  32.         ApplicationInfo appInfo = null;
  33.         PackageManager packMgmr = getApplicationContext().getPackageManager();
  34.         try {
  35.             appInfo = packMgmr.getApplicationInfo(getPackageName(), 0);
  36.         } catch (NameNotFoundException e) {
  37.             e.printStackTrace();
  38.             throw new RuntimeException("Unable to locate assets, aborting...",e);
  39.         }
  40.         String dpdfile = appInfo.sourceDir + "/assets/Scenario/Scenario_a/Sample.dpd";
  41.         _tiComponent.loadScenario(dpdfile);
  42.         _tiComponent.playScenario();
  43.     }
  44.     @Override
  45.     public void onResume() {
  46.         Log.i("MainActivity", "onResume");
  47.         super.onResume();
  48.         // we re-create the GL Context and reload the scenario
  49.         _tiComponent.onResume();
  50.         // play the scenario
  51.         _tiComponent.playScenario();
  52.     }
  53.  
  54.     @Override
  55.     public void onPause() {
  56.         Log.i("MainActivity", "onPause");
  57.         super.onPause();
  58.         // we pause the scenario
  59.         _tiComponent.pauseScenario();
  60.         // we notify the onPause event to the component :
  61.         // medias are released but the library is not unloaded.
  62.         _tiComponent.onPause();
  63.     }
  64.  
  65.     @Override
  66.     public void onStop() {
  67.         Log.i("MainActivity", "onStop");
  68.         super.onStop();
  69.         // the component is closed, media are unloaded
  70.         // 3d view and videocapture are destroyed.
  71.         _tiComponent.terminate();
  72.     }
  73.  
  74.     @Override
  75.     public void onDestroy() {
  76.         Log.i("MainActivity", "onDestroy");
  77.         super.onDestroy();
  78.         // delete everything.
  79.         _frameLayout = null;
  80.         _tiComponent = null;
  81.     }
  82. }

これも、SATCHとは異なっている。
ただまぁ、コアな部分は似ているというか同じだ。
あと、SATCHはActivityクラスを2つに分けていたが、別に必要ない。
これ1個で動く。

と言うことでビルドして、デバッグ開始。
Xoomをつないでデバッグしてみたんだが、スクリーンショットが取れなかった。
そのため、実記を写真に撮った。少し写りが悪い。
あと、チュートリアルのフライヤーを印刷するのが面倒だったため、
手元にあったnanoblock モノトーンパックの裏の写真を認識用に使った。

ナノブロック モノトーン

ナノブロック モノトーン

定価:¥ 3,024

Amazon価格:¥ 5,480

カテゴリ:おもちゃ&ホビー

発売日:2008-10-31


まずタブレット全体を写したもの。

なんかカメラの映像が小さい。何処でミスったかな・・・?
何か、ARコンテンツ作る時のAndroid用のカメラ設定が小さかったのか?

まぁいいや。次にアップ。とりあえず、出来ていることがわかる。

こんな感じ。かなりご機嫌にアニメーションしているし、絵の認識も素晴らしい。

さて・・・。
現状、SATCHとD’Fusionは共存できそうに無い状況(D’Fusion Studio2つインストールできなさそう)なので、
選択にはなると思う。でも、SATCHが無くても充分な気がする。
後は、ライセンスだとかの微妙な部分でTotal Immersion社がちゃんと教えてくれるかとか、
お金が幾らかかるかとか、日本語の情報があるかとか、そういうところでの
相談なんじゃないかなーと思う。

あと、SATCHはイベントで散々簡単にするだの日常にするだの開発者以外も
作れるだの言ってたが、D’Fusion Studioから全くハードル下がってない。
手順はほとんど同じ。
3Dデータのエクスポーターも3DS MaxとMayaとか、全然フレンドリーじゃない。
無料のSATCHを楽しむためには超高い3Dオーサリングツールが必要ですとか、
何か「割のいいバイトがあるけど、やるためにまず高い教材が必要」的な
詐欺の匂いすら感じる。
BlenderとかMetasequoiaとか、仕様をオープンにしてコミュニティに貢献して、
各種3Dオーサリングツールでのエクスポータを用意すべき。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク