コピー2008.06.09さて、前回までの3つのエントリで、FLARToolKitのサンプルを改造してMetasequoiaファイルを表示出来ていると思うが、今までのサンプルは表示するモデルをハードコーディングしていて、モデルを動的に変更すると言う機能が無かった。そこでこの連載記事の最後として、サンプルを改造して外部で作成した任意のモデルを表示する機能を付けてみたいと思う。それが出来れば、自由度がかなり高まる。そのために必要な変更は以下の2つ。モデルを外部から設定できるインタフェースを作成するサンプル自体ではなく、モデルを作って渡す側がメインクラスとなれるようにする1つ目はすぐに分かると思うが、2つ目は意味が分からないかもしれないので少し説明する。サンプルクラスは、ビルド時にメインクラスになる事を前提として作られている。そのため、メインクラスにしか存在しない変数を使ったり、サイズ(幅と高さ)が固定値で出来ている。メインクラスにしない場合、メインクラスにしか存在しない変数を使えば実行時エラーになるし、サイズは可変な方が便利に決まっている。その辺りを変えて行こうと言うわけだ。Animation」をモデルとして使ってくれるだろう。Animationについてはこちらを参照して下され。rev570でGreatWhiteにDAEアニメーションが実装されました。Knip氏がMLにポストしてくれたのでテスト。doc)Metasequoia以外のモデルも表示出来るように改造さて、ある程度ActionScript3.0を知っている人であれば既にお分かりの通り、このサンプルをちょっと改造して、this._transGrpに設定するモデルを外部から変更可能にすれば、どんなモデルでも簡単に表示できるようになる。俺の作ったモデル変更可能なAR系コンテンツは、そうやって作っている。この変更の手順は以下の2つ。前々回のエントリで解説した、赤い正方形の枠とピンクの立方体を登録する部分を削除して初期状態では何も表示されないようにする。DisplayObject3D;外部インタフェースとなる、以下のような関数を追加する。"model");}removeChildByNameをtry節で囲っているのは、名前に該当する子が無い時に例外を出したような気がするので、念のためだ。必要なければ削除して問題ない。メインクラス特有機能の排除これで外部からモデルの変更が可能になったので、次はメインクラス特有の部分を削除する。Compile」にするクラスにのみ使用できる変数を使用しているので、その部分を取り除いてやらないと外部から利用できない。その変数はコンストラクタ中で使われている。240);}最初の2行にある「this.stage」が、メインのクラス以外だとnullになるので、削除しておく必要がある。この2行はFlashコンテンツがビルド時に設定した大きさ以外になった時の処理の方法(1行目)と、Flashコンテンツの画質(2行目)を設定してある。今回であれば、コンテンツサイズが変更されたら中身も一緒に拡大縮小するようにして、画質は「低」である。FLARToolKitではメインの処理(マーカー検出とモデル表示)が重いので、画質は「低」がいいのかもしれない。サイズ変更可能にするFLARToolKitでは、以下に示すような処理手順で、Webカメラの映像と3Dモデルを合成している。Webカメラからの入力をVideoオブジェクト(_video)で受け取る。Videoオブジェクトが解析用のBitmap領域(_capture)に現在の映像を書き込む。FLARToolKitが現在の映像からマーカーを検出する。解析用のBitmap領域(_capture)をそのままコンテンツの出力として表示する。Papervision3Dの表示をコンテンツの出力に上書きする。サイズ変更を可能にする場合は、その辺を注意して「Videoの出力(ここでは_captureに出力される画像)」とPapervision3Dの表示領域(_viewport)」の大きさを合わせてやる必要がある。サンプルではこの辺りはどうなっているのか?ちょっと見てみよう。サンプル「FLARToolKitTest2」のコンストラクタで、幅320×高さ240を指定してARAppBase#initを呼び出す。240);ARAppBase#initで、メンバ_widthに320を、_heightに240を設定する。canvasHeight;必要なパラメータファイル(Data以下にある奴)の読み込み完了後、ARAppBase#_onLoadCodeで幅320×高さ240を指定してVideoを作成し、入力としてWebカメラを指定する。this._height);this._video.attachCamera(this._webcam);解析用のBitmap領域(_capture)を、幅320×高さ240を指定して新規に作成する。true);FLARToolKitTest2#_onInitで、解析用のBitmap領域(_capture)の幅と高さを2倍の640×480に指定する。480;FLARToolKitTest2#_onInitで、Papervision3Dの表示領域である_viewportを幅320×高さ240を指定して新規に作成し、縦横のスケールを2倍に拡大する事で640×480にする。240;このようになっている。基本的には、320×240の表示領域を縦横2倍に広げて640×480っぽく見せかけていると言う状態だ。これを自由に変更できるようにするにはどうすればよいか?まず、コンストラクタで幅と高さを受け取るようにしてみる。受け取った幅と高さはARAppBase#initにそのまま渡す。_height);}FLARToolKitTest2#_onInitで_captureの幅と高さを再指定するのを止め、_viewportも2倍に広げずに元の_captureと同じ大きさで新規作成する。Viewport3D;こんな風に、拡大表示とかの気遣いを排除すればよい。2;とかすればいいだけだし。作ったサンプルを使うと言う事で外部から操作可能にしたサンプルクラスを使う方法。{this.addChild(ar);});これでよし。FLARToolKitTest2のEvent.INITは、パラメータファイルとかパターンファイルとかを全部詠んで準備が出来た時に出されるので、こうしておけば妙なnull参照とかで悩まされることも無くなる。本当はパラメータファイルやパターンファイルを指定可能にしたりとか、色々とすべき事があるんだろうが、そこはまた別の話ってことで。mqo;おまけ:fpsの棒グラフは要らないって人は・・・FLARToolKitTest2#_onInitの、以下のコードを削除すればよい。FPSMeter());今回はちょっと散文的になってしまった。自分的メモとしての側面も強かったかなと言う感じ。これで一旦この記事は終了。帰ってきたら、またまとめ記事書きます。何か、やる気がしないとかペタンク作るとか言ってる間に、色々と面白いものが出てるし。10は暫く兵どもにお任せすればいいと言うお...ActionScript俺は口うるさい姑か?的fcshを英語版で動かす話。Flash)を読んでみた。1箇所気になったのでメモ。RSSを順番に流すと言うネタがあった。パラメータファイルを外部からロードすることになっている。俺は埋め込みたいので、いつも違う方法を使っている。実際埋め込みをやると結構長いコードになるの...ActionScript聖闘士聖矢のアレを作ってみたが、絵心が無いので誰か続き頼む。trick7さんがTeraFire(ブログ記事)とTeraClock(ブログ記事)という非常に面白いライブラリを公開されてたので、ちょっと使ってみた。ガスコンロにしか見えないdemoはこちら。Frameworkを、FlashDevelopだけで使ってしまおうと言う挑戦。見るだけでも・・・と思い、ひとまず見れそうな、JSFLインストールパッケージ版をダウンロード、展開してみた。Flashって意外と変わってるのね。Piのイメージが壊れてたら、Rubyをインストールできない。Piのイメージが壊れてたら、Rubyをインストールできない。tuperaに支配された東京を描くディストピア映画!あと磯子滅ぶ!俺はおしっこちょっぴりもれてない!まだグレイテスト・ショーマン見てないの!?タイトルとURLをコピーしました。