note.x

[PV3D2.0] virtualMouse axis on DAE

Paint to DAE mash(要:FlashPlayer9)

WakaZさんのエントリー「PV3D | DAEファイルの読込み」

DAEのオブジェクトにはVirtualMouseは効かないようで(あたりまえ)・・・。

を読んで。

これは確かに解りにくいなー。
例えば、

var obj_dae:DAE = new DAE();
obj_dae.load("hoge.dae");
scene.addChild(obj_dae);
obj_dae.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick);

だとイベントが取れない。なんでか?

PV3Dとかだと、3Dアプリケーションで作った形状データを取り込む目的でCollada形式を使ってるけど、本来、ColladaってシーングラフをまるごとXMLで記述しようっていうフォーマット(だと思う)なので、メッシュ以外にもカメラとかライトなど、3Dアプリ上で定義した全要素を定義できる。いってみれば、

var daeObj:DAE = new DAE();
daeObj.load("hoge.dae");

で生成されたdaeObjってPV3Dのシーンみたいなもんで、ツリー構造なDisplayObject3Dの塊。なので、daeObj内にある目的のメッシュを明示的に参照しないとダメなのですな。あと、InteractiveScene3DEventを有効にする場合のお約束、マテリアルのinteractiveプロパティをtrueにするのを忘れずに。

具体的には、

vMouse = viewport.interactiveSceneManager.virtualMouse;
Mouse3D.enabled = true;

-- 中略 --

obj_dae = new DAE();
obj_dae.load( "hoge.dae" );
obj_dae.addEventListener( FileLoadEvent.LOAD_COMPLETE, compCollada );
scene.addChild(obj_dae);

function compCollada(event:Event):void
{
    //対象となるマテリアルのinteractiveプロパティをtrueに
    obj_dae.materials.getMaterialByName("ターゲットのマテリアル").interactive = true;

    //対象メッシュの参照
    var dae_rootNode:DisplayObject3D = obj_dae.getChildByName("COLLADA_Scene");
    var targetMesh:DisplayObject3D = dae_rootNode.getChildByName("ターゲットの名前");

    //対象メッシュにリスナ設定
    targetMesh.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick);
}

private function mouseClick(e:InteractiveScene3DEvent):void
{
    var axis:Point = new Point(vMouse.x, vMouse.y);
    trace(axis.x + " / " + axis.y);
}

って感じで。

上記で言うところの obj_dae内部では「COLLADA_Scene」って名前のDisplayObject3Dをルートとした階層構造(シーングラフ)ができあがってるってのを意識することが重要と。

getChildByNameで指定する名前は、ルートである「COLLADA_Scene」は固定、COLLADA_Scene以下の各メッシュは3Dアプリで付けた名前がエクスポートされてるはず。自分で作ったdaeファイルじゃない場合は、

var dae_rootNode:DisplayObject3D = obj_dae.getChildByName("COLLADA_Scene");
dae_rootNode.childrenList();

で一覧が取れる。

ということで出来上がったのが上記のデモ。
DAEでもプリミティブと同じようにペイントできるよ。


TRACKBACK

  1. ARTY + LP BLOG - 2009.04.21 17:43:10

    【PV3D】DAEオブジェクトにマウスイベントできたっぽい。やっと光が見えてきた。

    note.Xさんのすばらしいエントリー。
    PV3D2.0] virtualMouse axis on DAE

    DAEオブジェクトを読み込むことできてもマウスイベントが全然できなかった。つまり僕の知識不足なんだけども、WakaZさん…

  2. PV3D | MaterialsListに別々のInteractiveScene3DEvent

    最近Flashの制作から遠ざかってることもあって 更新が滞ってました(汗 これか…

  3. Flash 3D 試行錯誤 - 2010.06.24 18:53:26

    COLLADAオブジェクトのクリックでアニメーションを制御

    前回の予告通り、オブジェクトをクリックしてのアニメーション制御をテストしました。

    やってみたらけっこう大変でした;

    まずは完成したものを見てください。(画像をクリック…

Trackback URL : http://blog.r3c7.net/as3-software-rendering/333/trackback/

Leave a Reply