PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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