Tag: PV3D

ED-209をpapervision3Dで表示できた。

「ED-209」をpapervision3Dで表示させるという当初の目標が達成できた。
【操作に関して】
・ドラッグ操作で動かせます。
・カメラの動きをいじくれます。
・オブジェクトの大きさ、位置をいじれます。
ほぼpapervision3Dの確認用に設置したパラメータです。
ED209をflashで
最初はドキュメントクラスでやっていたのですが、うまくいかなかったので(勉強不足)flashに書き込みました。
想定外だったのがマウスイベントでオブジェクトを動かすイベント。viewに対してマウスイベントを設定すると画面全体に対してイベントが有効になると思っていたのですが、オブジェクトだけだったみたいです。今回はflashで画面いっぱいの四角形のMovieClipを作って(ソースのboxがそれ)、それにイベントを割り当てました。これが無いとED-209の上にカーソルがある時はドラッグ操作ができますが、外れるとドラッグできません。またオブジェクトのポリゴンが欠けまくるのも問題。対処方法があるみたいですが、うまくいきませんでした。

⇒PV3DのQuadTreeを試してみました

またpapervision3D用のcolladaファイルの作成に関しては.obj型式ファイルをメタセコイアに読み込み.mqoで書き出し、VixerMotionというソフトで.mqoファイルを読み込み、daeで書き出ししています。メタセコに取り込みに関しては以下のエントリーを参照してみてください。
⇒メタセコイアに読み込み

あとasの関数って日本語使えるみたいなので日本語にしてみました。問題なく動作しているのがなんか信じられない。

import flash.events.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.render.*;
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.parsers.Collada;

//*******セットアップ
//viewport
var viewport:Viewport3D;
viewport = new Viewport3D(0,0,true);
box.addChild(viewport);

//render
var renderer:BasicRenderEngine;
renderer = new BasicRenderEngine();

//scene
var scene:Scene3D;
scene = new Scene3D();

//camera
var camera:Camera3D;
camera = new Camera3D();
camera.x = cameraXNum.value;
camera.y = cameraYNum.value;
camera.z = cameraZNum.value;
camera.focus = 500;
camera.zoom = 1;

//collada
var ed209:Collada;
ed209 = new Collada(“http://www.uxic.net/wp-content/uploads/2009/03/ed209.dae”);
scene.addChild(ed209);

ed209.scaleX = 0.05;
ed209.scaleY = 0.05;
ed209.scaleZ = 0.05;

addEventListener(Event.ENTER_FRAME, レンダリング);
function レンダリング(event:Event):void {
renderer.renderScene(scene, camera, viewport);
}

//*******カメライベント
cameraXNum.addEventListener(Event.CHANGE, カメラX);
cameraYNum.addEventListener(Event.CHANGE, カメラY);
cameraZNum.addEventListener(Event.CHANGE, カメラZ);
scaleNum.addEventListener(Event.CHANGE, 大きさ);
function カメラX(event:Event):void {
camera.x = cameraXNum.value;
}
function カメラY(event:Event):void {
camera.y = cameraYNum.value;
}
function カメラZ(event:Event):void {
camera.z = cameraZNum.value;
}
function 大きさ(event:Event):void {
ed209.scaleX = ed209.scaleY = ed209.scaleZ = scaleNum.value;
}

XNum.addEventListener(Event.CHANGE, ED209X);
function ED209X(event:Event):void {
ed209.x = XNum.value;
}
YNum.addEventListener(Event.CHANGE, ED209Y);
function ED209Y(event:Event):void {
ed209.y = YNum.value;
}
ZNum.addEventListener(Event.CHANGE, ED209Z);
function ED209Z(event:Event):void {
ed209.z = ZNum.value;
}

//*******マウスイベント
mouseObject.addEventListener(MouseEvent.MOUSE_DOWN, グリグリスタート);
mouseObject.addEventListener(MouseEvent.MOUSE_UP, グリグリエンド);

var guriX:Number;
var guriY:Number;
var guriZ:Number;//使わないかも
var yawX:Number;
var pitchY:Number;

function グリグリスタート(event:MouseEvent):void {
guriX = stage.mouseX;
guriY = stage.mouseY;
addEventListener(MouseEvent.MOUSE_MOVE, グリグリ中);
}
function グリグリ中(event:MouseEvent):void {
//マウスによる差分値を取得
yawX = stage.mouseX – guriX;
pitchY = stage.mouseY – guriY;

//差分を代入
ed209.yaw( yawX / 2 * -1);
ed209.pitch( pitchY / 5);
}
function グリグリエンド(event:MouseEvent):void {
removeEventListener(MouseEvent.MOUSE_MOVE, グリグリ中);
}

ED209のレンダリング

modoのレイヤー構造が最近やっと分かってきたので、今まで放置していたED209のカラーを設定してレンダリングしてみました。う〜ん。何度見てもカワイイデザインです。出来上がってからしばらく色んな角度から何度もレンダリングしてしまいました。
ED209
モデルは本来papervision3D用に制作していたもので、このやり方がそもそも正解かも分からないのですがメッシュも別々で念のため入れ子にはせず、メッシュ(UVマップ)も可動部分ごとに分けていたので手間どりました。手と足はコピーしてます。もう少しモデルに重量感を持たせられるように勉強しないと。

今後はcolladaの書き出しを研究してみてできればpapervison3Dで表示させたいです。具体的にはメタセコでdxfを読み込んで専用形式で保存し、Vixer motionでcollada書き出しできればな〜と。

© 2017 UXIC.net

Theme by Anders NorenUp ↑