Papervision3Dメモ #24
InteractiveSceneManagerとかMouse3Dとか
PV3Dのsvnリポジトリに、FaceLevelInteractivityっていうブランチが出来てて、やたらハイペースでコミットされまくってたので何事かと思ってたら、RockOnFlashで紹介されてた。InteractiveMaterialをふまえた上での次のステップを開発中みたいで、Faceレベルでのマウスイベントサポート(?)とか、3Dワールド座標系→2D座標系への変換とかがサポートされるらしい…んだけど良くわかんない。とりあえずRockOnFlashの件のエントリにサンプルが紹介されてて、svn経由でソースがダウンロードできるので、これを拝借して試してみようと思ったら、FlashCS3でないとパブリッシュできないサンプルだった。ガックシ。
CS3持ってないので、Flex2SDKのみで動くように「helloMouse3D」のmain.asを改造してみた。
Mouse3dTest.swf(要:FlashPlayer9)
デモとしてはハデで楽しいんだけど、これで何作るかが問題だよなとつくづく思う。何かひらめくまでは貪欲に技術を吸収していくべ。
07/08/23追記
コメント欄でご質問いただいたので、現時点での最新版であるPV3D Rev.208を使う前提で、簡単に説明を追記してみる。
まずは、このリビジョンのMovieMaterial.asにバグがあるのでこれを修正する。これをやらないと何をやっても動かないです。
MovieMaterial.as 106行目
animatedMaterials[ this ] = initObject.animated || false;
↓
animated = initObject ? initObject.animated || false : false;
「helloMouse3D」の改造ポイントに関しては、ほとんどオリジナルと変えてない。変えたのは大きく2箇所で、オリジナルのソース中でInteractiveMovieMaterialの設定してる部分と、マウスイベントの部分。Main.as89行目で
var material:MovieMaterial = new InteractiveMovieMaterial( new canvas() );
となっている部分の「new canvas()」が、.flaファイル内で定義されているクラスっぽかったんで、
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0×0099cc);
sp.graphics.drawRect(0, 0, 500, 200);
sp.graphics.endFill();var material:InteractiveMovieMaterial = new InteractiveMovieMaterial( sp );
material.allowAutoResize = false;
ってな感じでSprite作ってInteractiveMovieMaterialに投げた。上のデモはbeginGradientFillでグラデ塗りしたけど、この辺はお好きなように。allowAutoResizeをfalseにするのはかなり重要。あと、オリジナルでは「material.smooth = true」に設定してあるけど、パフォーマンスがかなり悪くなったんで消した。
次にマウスイベント。handleMouseDown、handleMouseMove内で、
canvas.material["movie"]["surface"].graphics
となっている部分を、
canvas.material["movie"].graphics
に変更。
だいたいこんな感じです。もっとスマートな方法があると思うし、オレ自身それほどAS3やPV3Dに精通してるわけじゃないので、バカっぽい事やってる可能性大ですが参考になれば幸いです。
関連する投稿
Trackback URL : http://blog.r3c7.net/wp-trackback.php?p=92

はじめまして、Papervision3Dの初心者です、いつもこのサイトで勉強させていただきます。
早速質問をさせていただきたいが、自分もhelloMouse3Dのmain.asをFlex2SDKで動かないことに困っています。note.xさんはどうやって改造したのを知りたいので、もしよければ、ソースを公開していただけませんが、
よろしくお願い致します。
[...] note.x先生のブログでソースつきで解説されているので参考になるかも。 [...]