particlesの件
Rev.228でparticlesオブジェクトが追加された。AbstractParticleを継承していろんなパーティクルが作れそう。今後はStarParticleを使った「ParticleField」が「Stars」の代替オブジェクトになるみたいなので試してみつつ、Starsとの速度比較をしてみた。ビルドに用いたのはいずれもPV3D Beta 1.7(Rev.231)。表示されるパーティクルの数は揃えたつもり。
obj_Stars_fps.swf … Starsを使ったもの
obj_PF_fps.swf … ParticleFieldを使ったもの
(要:FlashPlayer9)
お〜速いじゃん。ParticleFieldはともかく、パーティクルが使えるようになったのは面白いかも。Away3Dにはパーティクル実装してなかった気がするし、独自性が出て良さげ。
ParticleFieldの使い方はStarsとほぼ同じ。色の指定がColorMaterialから直接RGB値になったくらい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package { import flash.display.*; import flash.events.*; import org.papervision3d.scenes.*; import org.papervision3d.cameras.*; import org.papervision3d.objects.*; import org.papervision3d.objects.particles.*; [SWF(backgroundColor = 0x000000)] public class obj_PF extends Sprite { // プロパティ private var container : Sprite; private var scene : MovieScene3D; private var camera : FreeCamera3D; private var objPF : ParticleField; private var valx : Number = 0; private var valy : Number = 0; // コンストラクタ public function obj_PF():void { stage.frameRate = 60; stage.quality = StageQuality.MEDIUM; stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; addEventListener(Event.ENTER_FRAME, loop3D); stage.addEventListener(Event.RESIZE, onStageResize); init3D(); } // 初期化 private function init3D():void { // コンテナ生成 container = new Sprite(); addChild(container); container.x = stage.stageWidth / 2; container.y = stage.stageHeight / 2; // シーン生成 scene = new MovieScene3D( container ); // カメラ生成 camera = new FreeCamera3D(); camera.z = 0; camera.focus = 500; camera.zoom = 1; // ParticleField生成 var starSprite:Sprite = new Sprite(); objPF = new ParticleField(900, 0xffffff, starSprite, 1000, 1000, 1000 ); scene.addChild( objPF ); } // EnterFrame private function loop3D( event:Event ):void { valx += container.mouseX / 50; valy += container.mouseY / 50; objPF.rotationY = valx; objPF.rotationX = valy; scene.renderCamera( camera ); } private function onStageResize(event:Event):void { container.x = stage.stageWidth / 2; container.y = stage.stageHeight / 2; } } } |
07/11/13追記:
カメラが原点に配置してあるとFlashPlayerのリビジョンによって問題が発生することが判明したため、上記のswfとソースを修正しました。詳細については「[Papervision3D] 原点にカメラがあるとフリーズする件」にて。











