note.x

Papervision3Dメモ #27

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] 原点にカメラがあるとフリーズする件」にて。


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

Leave a Reply