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

このエントリをはてなブックマークに追加このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加このエントリをkwoutに追加
2011年12月22日 木曜日1:39:04

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

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

nanoblock モノトーンnanoblock モノトーン
Amazon価格:¥ 1,966
発売日: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でかなり違う。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.tarotaro.android.ar"
      android:versionCode="1"
      android:versionName="1.0">

    <application android:icon="@drawable/icon" android:label="@string/app_name"
                 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                 android:debuggable="true">

        <activity android:name=".DFusionSampleAndroidActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="landscape"
                  android:configChanges="orientation|keyboard|keyboardHidden">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.autofocus"/>
</manifest>

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

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

package org.tarotaro.android.ar;

import ti.dfusionmobile.tiComponent;
import android.app.Activity;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;
import android.widget.FrameLayout;

public class DFusionSampleAndroidActivity extends Activity {
    private FrameLayout _frameLayout;
    private tiComponent _tiComponent;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.e(this.getClass().getName(),"onCreate");
        super.onCreate(savedInstanceState);
        _tiComponent = new tiComponent(this);
    }
   
    @Override
    public void onStart() {
        Log.i(this.getClass().getName(),"onStart");
        _frameLayout = new FrameLayout(this);
        _tiComponent.initialize(_frameLayout);
        _tiComponent.activateAutoFocusOnDownEvent(true);
        setContentView(_frameLayout);
        super.onStart();
       
        ApplicationInfo appInfo = null;
        PackageManager packMgmr = getApplicationContext().getPackageManager();
        try {
            appInfo = packMgmr.getApplicationInfo(getPackageName(), 0);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
            throw new RuntimeException("Unable to locate assets, aborting...",e);
        }
        String dpdfile = appInfo.sourceDir + "/assets/Scenario/Scenario_a/Sample.dpd";
        _tiComponent.loadScenario(dpdfile);
        _tiComponent.playScenario();
    }
    @Override
    public void onResume() {
        Log.i("MainActivity", "onResume");
        super.onResume();
        // we re-create the GL Context and reload the scenario
        _tiComponent.onResume();
        // play the scenario
        _tiComponent.playScenario();
    }

    @Override
    public void onPause() {
        Log.i("MainActivity", "onPause");
        super.onPause();
        // we pause the scenario
        _tiComponent.pauseScenario();
        // we notify the onPause event to the component :
        // medias are released but the library is not unloaded.
        _tiComponent.onPause();
    }

    @Override
    public void onStop() {
        Log.i("MainActivity", "onStop");
        super.onStop();
        // the component is closed, media are unloaded
        // 3d view and videocapture are destroyed.
        _tiComponent.terminate();
    }

    @Override
    public void onDestroy() {
        Log.i("MainActivity", "onDestroy");
        super.onDestroy();
        // delete everything.
        _frameLayout = null;
        _tiComponent = null;
    }
}

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

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

nanoblock モノトーンnanoblock モノトーン
Amazon価格:¥ 1,966
発売日: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オーサリングツールでのエクスポータを用意すべき。

TrackBack URL :

コメントする

HTML convert time: 1.949 sec.