Papervision3Dの応用とクラス拡張
基本使用方法と3Dモデルデータの読み込み方法
Papervision3Dは、現在もっとも利用されているFlash3Dエンジンです。今回はこのPapervision3Dを機能拡張できるクラスについて紹介します。
まず、開発環境から準備していきます。今回のサンプルをこちらからダウンロードできますので、ご利用ください(811_1.zip/5.00 MB)。今回利用する拡張クラスは、Papervision3Dのマイナーチェンジによってスクリプトが動かなくなる場合があります。あらかじめサンプル内には動作確認をしたPapervision3D Public Beta2.0 white great Version(2008/11/30)を含めています。最新のバージョンは、Google Codeからダウンロード(http://code.google.com/p/papervision3d/downloads/list)できます。
サンプルの「p1/3dmodel/PaperBase.as」を見ていきます。このサンプルは3DソフトでモデリングしたDAEデータを読み込んで表示させるものです。Papervisionの基本的なフレームワークBasicViewを継承していて、ASファイルの設定はドキュメントクラスにて設定しています。
このプログラムの概要は以下になります。
1.BasicViewを設定(3D空間の作成、3Dシーンの作成)
2.カメラ設定
3.モデルデータ読み込み
4.シーンレンダリング
まず、BasicViewを継承して、設定していきます(11行目)。
Public class PaperBase extends BasicView
そして、コンストラクタ内で設定します(19行目)。
BasicView(width, height, scaleToStage, interactive, cameraType)
ステージサイズ指定なし、ステージサイズにスケール、マウスアクションなし、ターゲットカメラを設定します。
super(0,0,true,false,”TARGET”);
これで3Dシーンの設定完了しました。このBasicViewを設定するだけでScene3D、CameraObject3D、Viewport3D、BasicRenderEngineなどが一緒に生成され、従来の設定と違ってかなり楽に作業が行えます。
次にカメラの設定を行います。BasicViewを使用することによって生成されるカメラオブジェクトはcameraで呼び出せます。これを設定します(52-54行目)。
モデルデータの読み込みます。Papervision3DではDAEモデルデータを読み込むためのクラスが2つ用意されています。COLLADAとASColladaを使用したDAEです。2つの違いはDAEのクラスにアニメーションを表現するクラスが用意されている点です。あとでアニメーションを使用するのでDAEでモデルデータを読み込んでいきます。
まずDAEを作成アニメーションがないためfalseにして、loadでDAEのパスを設定していきます。今回はマテリアルデータがモデルデータに含まれているため特に指定することはありません(57行目)。
skeleton = new DAE(false);
skeleton.load("modeldata/skeleton.DAE");
skeleton.scale = 10;
コンテナを作成して中にいれていきます(61行目)。そして、シーンに追加し、レンダリングをスタートさせます(64行目-66行目)。
startRendering();
BasicViewを使用するとONENTER_FRAMEのイベントを代わりにonRenderTickというイベントを使用することができます。このイベントは、startRendering();でスタート、stopRendering();でストップします。
シーンのレンダリングをします(71-72行目)。カメラのポジションを設定、マウスの動きによってカメラのポジションを変更します。
最後にシーンをレンダリングします。
super.onRenderTick(event);
これは従来のrender.renderScene();の代わりになります。OnRenderTickはrenderSingle();で呼び出しているので、renderSingle();と設定しても動きます。
3Dモデルアニメーションの再生と停止
ここでは、あらかじめアニメーションがつけられたモデルデータを読み込み、再生と停止させます。サンプルフォルダ内「p1/animation/paperBase.as」を開いてください。
ここでは先ほどのサンプルにないアニメーションデータの読み込みを紹介します。アニメーションデータの読み終わった時に再生させるためまず、Listenerを設定します(88行目)
skeleton.addEventListener(FileLoadEvent.ANIMATIONS_COMPLETE,_onAnimation);
そして、データをチェックし、アニメーションが読み込み完了後にDAEを再生します(94行目-104行目)。DAEのアニメーションは、再生がDAE.play()、停止がDAE.stop()となります。モデルデータからのアニメーション再生はかなり機能が限られていますが、将来的にこれも改善されると思います。