スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Papervision3Dでdaeファイル読み込み

・今回作ったFlash (ペンローズの三角形)
[クリックしながらマウス動かすと回せます]




・ソースコード

package
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.ByteArray;

import org.papervision3d.core.effects.view.ReflectionView;
import org.papervision3d.core.math.Matrix3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.view.BasicView;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.objects.parsers.DAE;
import org.papervision3d.render.*;

[SWF(width="400", height="280", backgroundColor='#FFFFFF', frameRate='24')]
public class Main extends BasicView
{
// モデルデータ読み込み
[Embed(source = "penrose_tri05.dae", mimeType="application/octet-stream")]
private static var daeAsset : Class;

// テクスチャ読み込み
[Embed(source = "penrose_tri05.png")]
private static var materialAsset : Class;

// パラメータ
private var cameraPitch:Number = 90;
private var cameraYaw:Number = 270;
private var isOrbiting:Boolean = false;
private var previousMouseX:Number;
private var previousMouseY:Number;

// コンストラクタ
public function Main():void
{
super(390, 280, false, true, CameraType.FREE);

// コンテキストメニュー省略
stage.showDefaultContextMenu = false;

_init();
}

// 初期設定
private function _init():void
{
// モデル作成
var byteArray:ByteArray = new daeAsset() as ByteArray;
var dae:DAE = new DAE();
dae.load(byteArray);

// テクスチャ作成
var bitmap:Bitmap = new materialAsset() as Bitmap;
var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData, true);
dae.materials.addMaterial(bitmapMaterial, "mat1");

// モデル追加
scene.addChild(dae);

// カメラを透視投影から平行投影にする
this.camera.ortho = true;

// 初期オブジェクト位置
dae.x = 0;
dae.y = -185;
dae.z = 0;

// 初期カメラ位置
camera.x = 0;
camera.y = 0;
camera.z = -1000;
camera.fov = 45;
camera.target = DisplayObject3D.ZERO;
camera.zoom = 0.1;

// レンダリング開始
startRendering();

// イベント
stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);

}

private function onMouseDown(event:MouseEvent):void
{
isOrbiting = true;
previousMouseX = event.stageX;
previousMouseY = event.stageY;

}

private function onMouseUp(event:MouseEvent):void
{
isOrbiting = false;
}

private function onMouseMove(event:MouseEvent):void
{
var differenceX:Number = event.stageX - previousMouseX;
var differenceY:Number = event.stageY - previousMouseY;

if(isOrbiting)
{
//cameraPitch += differenceY;
cameraYaw += differenceX;

//cameraPitch %= 360;
cameraYaw %= 360;

cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;

previousMouseX = event.stageX;
previousMouseY = event.stageY;

camera.orbit(cameraPitch, cameraYaw);

}
}

}
}

・Vixar Motionでmqoファイルをdaeファイルに変換

Papervision3Dでは、mqoファイルを読み込めないのでdaeファイルに変換して読み込む。
Vixar Motionというソフトを使って変換する。

Vixar Motion
http://www.vixar.jp/motion/index.html

1. メタセコイアファイルを開く
2. ファイル名前を付けて保存で、ファイルの種類をColladaファイル(*.dae)にして保存する
3. 作成したdaeファイルをメモ帳などのテキストエディタで開く
4. マテリアル名のパスを相対パスにして、マテリアル名をメタセコイアのマテリアル名に修正する

・補足

今回作ったペンローズの三角形は透視投影(Pers)用に作ってないので、投影の設定を平行投影(Ortho)に変えています。
メタセコイアのデータいちおう置いておきます、試したい方は自由にどうぞです。 penrose_tri.txt DL
(拡張子をmqoに変えて下さい、あと投影をOrthoにしてみて下さい)

・参考URL

さくさんの日記 : Papervision3Dでのdaeモデル読み込み(実用編)
http://d.hatena.ne.jp/sakusan_net/20080702/1215003280
pv3d.org : Embedding a Collada File
http://pv3d.org/2008/12/06/embedding-a-collada-file/
スポンサーサイト

テーマ : 3DCG
ジャンル : コンピュータ

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。