Papervision3Dの応用とクラス拡張

2009年1月29日(木)
楊 上弘
基本使用方法と3Dモデルデータの読み込み方法

基本使用方法と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()となります。モデルデータからのアニメーション再生はかなり機能が限られていますが、将来的にこれも改善されると思います。

DROP DEAD主催。大学卒業後、Webアプリケーション開発、Webデザイン職を経て、現在はフリーランスでサイトデザイン/Flashオーサリング/CG映像制作などを行っている。http://www.drop-dead.co.uk

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています