※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : clockmaker's [Stardust] 3Dオブジェクトの軌道にパーティクルをつける [diff(54)]

FORKED
  1. // forked from clockmaker's [Stardust] キラキラの3Dパーティクル
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.geom.Matrix;
  6.     
  7.     import idv.cjcat.stardust.common.clocks.SteadyClock;
  8.     import idv.cjcat.stardust.common.emitters.Emitter;
  9.     import idv.cjcat.stardust.common.renderers.Renderer;
  10.     import idv.cjcat.stardust.threeD.papervision3d.renderers.PV3DParticleRenderer;
  11.     
  12.     import org.papervision3d.core.geom.Particles;
  13.     import org.papervision3d.core.math.Number3D;
  14.     import org.papervision3d.materials.WireframeMaterial;
  15.     import org.papervision3d.objects.primitives.*;
  16.     import org.papervision3d.view.BasicView;
  17.     import org.papervision3d.view.layer.ViewportLayer;
  18.     
  19.     import net.hires.debug.*;
  20.     /**
  21.      * スターダストを使った、3Dパーティクルデモ
  22.      * 詳細はこちらを参考ください
  23.      * http://clockmaker.jp/blog/2009/12/as3-stardust/
  24.      * @author yasu
  25.      */    
  26.     [SWF(width=465, height=465, frameRate=60)]
  27.     public class KiraKiraParticle extends BasicView {
  28.         // コンストラクタ
  29.         public function KiraKiraParticle() {
  30.             // PV3Dのパーティクル
  31.             particles = new Particles();
  32.             // ビューポートレイヤーにすると、ビットマップデータの加工がやりやすいよ
  33.             viewportLayerForParticle = particles.createViewportLayer(viewport);
  34.             scene.addChild(particles);
  35.             
  36.             //地面
  37.             earth = new Plane(new WireframeMaterial(0x999999, .5), 5000500066)
  38.             earth.y = -500;
  39.             earth.rotationX = 90;
  40.             scene.addChild(earth);
  41.             // パーティクルシステムの構築
  42.             emitter = new MyEmitter(new SteadyClock(3)); // エミッターに1フレームに発生させたい数値を指定
  43.             particleRenderer = new PV3DParticleRenderer(particles);
  44.             particleRenderer.addEmitter(emitter);
  45.             // エンターフレームイベントの登録
  46.             addEventListener(Event.ENTER_FRAME, loop);
  47.             // 背景
  48.             opaqueBackground = 0x0;
  49.             stage.quality = StageQuality.LOW; //画質を低に
  50.             
  51.             // キラキラロジック
  52.             canvas = new BitmapData(465 / 4465 / 4false, 0x000000);
  53.             var bmp:Bitmap = new Bitmap(canvas, PixelSnapping.NEVER, false);
  54.             bmp.scaleX = bmp.scaleY = 4;
  55.             bmp.smoothing = true;
  56.             bmp.blendMode = BlendMode.ADD;
  57.             addChild(bmp);
  58.             mtx = new Matrix();
  59.             mtx.translate(-viewport.width / 2, -viewport.height / 2);
  60.             mtx.scale(0.250.25);
  61.             mtx.translate(viewport.width / 4, viewport.height / 4);
  62.         }
  63.         // キラキラ
  64.         private var canvas:BitmapData;
  65.         // 地面
  66.         private var earth:Plane;
  67.         // エミッター
  68.         private var emitter:Emitter;
  69.         // レンダラー
  70.         private var particleRenderer:Renderer;
  71.         // パーティクルのラッパー
  72.         private var particles:Particles;
  73.         //モーションの角度
  74.         private var rot:Number = 0;
  75.         // ビューポート
  76.         private var viewportLayerForParticle:ViewportLayer;
  77.         // キラキラのキャプチャ変換行列
  78.         private var mtx:Matrix;
  79.         // エンターフレームイベント
  80.         private function loop(e:Event):void {
  81.             rot += 3;
  82.             // 円周上を動いているかのようにみせる
  83.             MyEmitter(emitter).point.x = 400 * Math.sin(rot * Number3D.toRADIANS);
  84.             MyEmitter(emitter).point.y = 300;
  85.             MyEmitter(emitter).point.z = 300 * Math.cos(rot * Number3D.toRADIANS);
  86.             // パーティクルの方向を変える
  87.             MyEmitter(emitter).sphereCap.rotationX = 90;
  88.             MyEmitter(emitter).sphereCap.rotationZ = -rot - 90;
  89.             // カメラをマウス座標にする
  90.             camera.x += (1000 * Math.sin(mouseX / stage.stageWidth * Math.PI * 2) - camera.x) * 0.1;
  91.             camera.y += (600 * mouseY / stage.stageHeight - camera.y) * 0.1;
  92.             camera.z += (1000 * Math.cos(mouseX / stage.stageWidth * Math.PI * 2) - camera.z) * 0.1;
  93.             // エミッター更新
  94.             emitter.step();
  95.             // Papervision3Dのレンダリング
  96.             singleRender();
  97.             
  98.             // キラキラ
  99.             canvas.fillRect(canvas.rect, 0x0);
  100.             canvas.draw(viewportLayerForParticle, mtx);            
  101.         }
  102.     }
  103. }
  104. import idv.cjcat.stardust.common.actions.Age;
  105. import idv.cjcat.stardust.common.actions.DeathLife;
  106. import idv.cjcat.stardust.common.actions.ScaleCurve;
  107. import idv.cjcat.stardust.common.clocks.Clock;
  108. import idv.cjcat.stardust.common.initializers.Life;
  109. import idv.cjcat.stardust.common.math.UniformRandom;
  110. import idv.cjcat.stardust.threeD.actions.Accelerate3D;
  111. import idv.cjcat.stardust.threeD.actions.Move3D;
  112. import idv.cjcat.stardust.threeD.emitters.Emitter3D;
  113. import idv.cjcat.stardust.threeD.initializers.Position3D;
  114. import idv.cjcat.stardust.threeD.initializers.Velocity3D;
  115. import idv.cjcat.stardust.threeD.papervision3d.initializers.PV3DParticle;
  116. import idv.cjcat.stardust.threeD.zones.SinglePoint3D;
  117. import idv.cjcat.stardust.threeD.zones.SphereCap;
  118. import org.papervision3d.materials.special.ParticleMaterial;
  119. /**
  120.  * カスタムエミッター
  121.  * @author yasu
  122.  */
  123. class MyEmitter extends Emitter3D {
  124.     public var point:SinglePoint3D = new SinglePoint3D(); // パーティクルの発生位置
  125.     public var sphereCap:SphereCap = new SphereCap(0001040); // パーティクルの拡散
  126.     public function MyEmitter(clock:Clock = null) {
  127.         super(clock);
  128.         
  129.         // マテリアル
  130.         var mat:ParticleMaterial = new ParticleMaterial(0xFFCCBB, 116);
  131.         
  132.         // パーティクルの属性を定義
  133.         addInitializer(new Position3D(point)); // 発生位置
  134.         addInitializer(new PV3DParticle([mat]));
  135.         addInitializer(new Life(new UniformRandom(1200)));
  136.         addInitializer(new Velocity3D(sphereCap));
  137.         
  138.         // パーティクルのアクションを定義
  139.         addAction(new Age()); // 寿命を有効化
  140.         addAction(new DeathLife()); // 消えるを有効化
  141.         addAction(new Accelerate3D(0.05)); // 加速を有効化
  142.         addAction(new Move3D()); // 移動を有効化
  143.         addAction(new ScaleCurve(2020)); //スケール変更を有効化
  144.     }
  145. }
noswf

[Stardust] キラキラの3Dパーティクル forked from: [Stardust] キラキラの3Dパーティクル [diff(4)]

  1. // forked from clockmaker's [Stardust] キラキラの3Dパーティクル
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.geom.Matrix;
  6.     
  7.     import idv.cjcat.stardust.common.clocks.SteadyClock;
  8.     import idv.cjcat.stardust.common.emitters.Emitter;
  9.     import idv.cjcat.stardust.common.renderers.Renderer;
  10.     import idv.cjcat.stardust.threeD.papervision3d.renderers.PV3DParticleRenderer;
  11.     
  12.     import org.papervision3d.core.geom.Particles;
  13.     import org.papervision3d.core.math.Number3D;
  14.     import org.papervision3d.materials.WireframeMaterial;
  15.     import org.papervision3d.objects.primitives.*;
  16.     import org.papervision3d.view.BasicView;
  17.     import org.papervision3d.view.layer.ViewportLayer;
  18.     
  19.     import net.hires.debug.*;
  20.     /**
  21.      * スターダストを使った、3Dパーティクルデモ
  22.      * 詳細はこちらを参考ください
  23.      * http://clockmaker.jp/blog/2009/12/as3-stardust/
  24.      * @author yasu
  25.      */    
  26.     [SWF(width=465, height=465, frameRate=60)]
  27.     public class KiraKiraParticle extends BasicView {
  28.         // コンストラクタ
  29.         public function KiraKiraParticle() {
  30.             // PV3Dのパーティクル
  31.             particles = new Particles();
  32.             // ビューポートレイヤーにすると、ビットマップデータの加工がやりやすいよ
  33.             viewportLayerForParticle = particles.createViewportLayer(viewport);
  34.             scene.addChild(particles);
  35.             
  36.             //地面
  37.             earth = new Plane(new WireframeMaterial(0x999999, .5), 5000500066)
  38.             earth.y = -500;
  39.             earth.rotationX = 90;
  40.             scene.addChild(earth);
  41.             // パーティクルシステムの構築
  42.             emitter = new MyEmitter(new SteadyClock(3)); // エミッターに1フレームに発生させたい数値を指定
  43.             particleRenderer = new PV3DParticleRenderer(particles);
  44.             particleRenderer.addEmitter(emitter);
  45.             // エンターフレームイベントの登録
  46.             addEventListener(Event.ENTER_FRAME, loop);
  47.             // 背景
  48.             opaqueBackground = 0x0;
  49.             stage.quality = StageQuality.LOW; //画質を低に
  50.             
  51.             // キラキラロジック
  52.             canvas = new BitmapData(465 / 4465 / 4false, 0x000000);
  53.             var bmp:Bitmap = new Bitmap(canvas, PixelSnapping.NEVER, false);
  54.             bmp.scaleX = bmp.scaleY = 4;
  55.             bmp.smoothing = true;
  56.             bmp.blendMode = BlendMode.ADD;
  57.             addChild(bmp);
  58.             mtx = new Matrix();
  59.             mtx.translate(-viewport.width / 2, -viewport.height / 2);
  60.             mtx.scale(0.250.25);
  61.             mtx.translate(viewport.width / 4, viewport.height / 4);
  62.         }
  63.         // キラキラ
  64.         private var canvas:BitmapData;
  65.         // 地面
  66.         private var earth:Plane;
  67.         // エミッター
  68.         private var emitter:Emitter;
  69.         // レンダラー
  70.         private var particleRenderer:Renderer;
  71.         // パーティクルのラッパー
  72.         private var particles:Particles;
  73.         //モーションの角度
  74.         private var rot:Number = 0;
  75.         // ビューポート
  76.         private var viewportLayerForParticle:ViewportLayer;
  77.         // キラキラのキャプチャ変換行列
  78.         private var mtx:Matrix;
  79.         // エンターフレームイベント
  80.         private function loop(e:Event):void {
  81.             rot += 3;
  82.             // 円周上を動いているかのようにみせる
  83.             MyEmitter(emitter).point.x = 400 * Math.sin(rot * Number3D.toRADIANS);
  84.             MyEmitter(emitter).point.y = 300;
  85.             MyEmitter(emitter).point.z = 300 * Math.cos(rot * Number3D.toRADIANS);
  86.             // パーティクルの方向を変える
  87.             MyEmitter(emitter).sphereCap.rotationX = 90;
  88.             MyEmitter(emitter).sphereCap.rotationZ = -rot - 90;
  89.             // カメラをマウス座標にする
  90.             //camera.x += (1000 * Math.sin(mouseX / stage.stageWidth * Math.PI * 2) - camera.x) * 0.1;
  91.             //camera.y += (600 * mouseY / stage.stageHeight - camera.y) * 0.1;
  92.             //camera.z += (1000 * Math.cos(mouseX / stage.stageWidth * Math.PI * 2) - camera.z) * 0.1;
  93.             // エミッター更新
  94.             emitter.step();
  95.             // Papervision3Dのレンダリング
  96.             singleRender();
  97.             
  98.             // キラキラ
  99.             canvas.fillRect(canvas.rect, 0x0);
  100.             canvas.draw(viewportLayerForParticle, mtx);            
  101.         }
  102.     }
  103. }
  104. import idv.cjcat.stardust.common.actions.Age;
  105. import idv.cjcat.stardust.common.actions.DeathLife;
  106. import idv.cjcat.stardust.common.actions.ScaleCurve;
  107. import idv.cjcat.stardust.common.clocks.Clock;
  108. import idv.cjcat.stardust.common.initializers.Life;
  109. import idv.cjcat.stardust.common.math.UniformRandom;
  110. import idv.cjcat.stardust.threeD.actions.Accelerate3D;
  111. import idv.cjcat.stardust.threeD.actions.Move3D;
  112. import idv.cjcat.stardust.threeD.emitters.Emitter3D;
  113. import idv.cjcat.stardust.threeD.initializers.Position3D;
  114. import idv.cjcat.stardust.threeD.initializers.Velocity3D;
  115. import idv.cjcat.stardust.threeD.papervision3d.initializers.PV3DParticle;
  116. import idv.cjcat.stardust.threeD.zones.SinglePoint3D;
  117. import idv.cjcat.stardust.threeD.zones.SphereCap;
  118. import org.papervision3d.materials.special.ParticleMaterial;
  119. /**
  120.  * カスタムエミッター
  121.  * @author yasu
  122.  */
  123. class MyEmitter extends Emitter3D {
  124.     public var point:SinglePoint3D = new SinglePoint3D(); // パーティクルの発生位置
  125.     public var sphereCap:SphereCap = new SphereCap(0001040); // パーティクルの拡散
  126.     public function MyEmitter(clock:Clock = null) {
  127.         super(clock);
  128.         
  129.         // マテリアル
  130.         var mat:ParticleMaterial = new ParticleMaterial(0xFFCCBB, 116);
  131.         
  132.         // パーティクルの属性を定義
  133.         addInitializer(new Position3D(point)); // 発生位置
  134.         addInitializer(new PV3DParticle([mat]));
  135.         addInitializer(new Life(new UniformRandom(1200)));
  136.         addInitializer(new Velocity3D(sphereCap));
  137.         
  138.         // パーティクルのアクションを定義
  139.         addAction(new Age()); // 寿命を有効化
  140.         addAction(new DeathLife()); // 消えるを有効化
  141.         addAction(new Accelerate3D(0.05)); // 加速を有効化
  142.         addAction(new Move3D()); // 移動を有効化
  143.         addAction(new ScaleCurve(2020)); //スケール変更を有効化
  144.     }
  145. }
noswf
  1. // forked from clockmaker's [Stardust] キラキラの3Dパーティクル
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.geom.Matrix;
  6.     
  7.     import idv.cjcat.stardust.common.clocks.SteadyClock;
  8.     import idv.cjcat.stardust.common.emitters.Emitter;
  9.     import idv.cjcat.stardust.common.renderers.Renderer;
  10.     import idv.cjcat.stardust.threeD.papervision3d.renderers.PV3DParticleRenderer;
  11.     
  12.     import org.papervision3d.core.geom.Particles;
  13.     import org.papervision3d.core.math.Number3D;
  14.     import org.papervision3d.materials.WireframeMaterial;
  15.     import org.papervision3d.objects.primitives.*;
  16.     import org.papervision3d.view.BasicView;
  17.     import org.papervision3d.view.layer.ViewportLayer;
  18.     
  19.     import net.hires.debug.*;
  20.     /**
  21.      * スターダストを使った、3Dパーティクルデモ
  22.      * 詳細はこちらを参考ください
  23.      * http://clockmaker.jp/blog/2009/12/as3-stardust/
  24.      * @author yasu
  25.      */    
  26.     [SWF(width=465, height=465, frameRate=60)]
  27.     public class KiraKiraParticle extends BasicView {
  28.         // コンストラクタ
  29.         public function KiraKiraParticle() {
  30.             // PV3Dのパーティクル
  31.             particles = new Particles();
  32.             // ビューポートレイヤーにすると、ビットマップデータの加工がやりやすいよ
  33.             viewportLayerForParticle = particles.createViewportLayer(viewport);
  34.             scene.addChild(particles);
  35.             
  36.             //地面
  37.             earth = new Plane(new WireframeMaterial(0x999999, .5), 5000500066)
  38.             earth.y = -500;
  39.             earth.rotationX = 90;
  40.             scene.addChild(earth);
  41.             // パーティクルシステムの構築
  42.             emitter = new MyEmitter(new SteadyClock(3)); // エミッターに1フレームに発生させたい数値を指定
  43.             particleRenderer = new PV3DParticleRenderer(particles);
  44.             particleRenderer.addEmitter(emitter);
  45.             // エンターフレームイベントの登録
  46.             addEventListener(Event.ENTER_FRAME, loop);
  47.             // 背景
  48.             opaqueBackground = 0x0;
  49.             stage.quality = StageQuality.LOW; //画質を低に
  50.             
  51.             // キラキラロジック
  52.             canvas = new BitmapData(465 / 4465 / 4false, 0x000000);
  53.             var bmp:Bitmap = new Bitmap(canvas, PixelSnapping.NEVER, false);
  54.             bmp.scaleX = bmp.scaleY = 4;
  55.             bmp.smoothing = true;
  56.             bmp.blendMode = BlendMode.ADD;
  57.             addChild(bmp);
  58.             mtx = new Matrix();
  59.             mtx.translate(-viewport.width / 2, -viewport.height / 2);
  60.             mtx.scale(0.250.25);
  61.             mtx.translate(viewport.width / 4, viewport.height / 4);
  62.         }
  63.         // キラキラ
  64.         private var canvas:BitmapData;
  65.         // 地面
  66.         private var earth:Plane;
  67.         // エミッター
  68.         private var emitter:Emitter;
  69.         // レンダラー
  70.         private var particleRenderer:Renderer;
  71.         // パーティクルのラッパー
  72.         private var particles:Particles;
  73.         //モーションの角度
  74.         private var rot:Number = 0;
  75.         // ビューポート
  76.         private var viewportLayerForParticle:ViewportLayer;
  77.         // キラキラのキャプチャ変換行列
  78.         private var mtx:Matrix;
  79.         // エンターフレームイベント
  80.         private function loop(e:Event):void {
  81.             rot += 3;
  82.             // 円周上を動いているかのようにみせる
  83.             MyEmitter(emitter).point.x = 400 * Math.sin(rot * Number3D.toRADIANS);
  84.             MyEmitter(emitter).point.y = 300;
  85.             MyEmitter(emitter).point.z = 300 * Math.cos(rot * Number3D.toRADIANS);
  86.             // パーティクルの方向を変える
  87.             MyEmitter(emitter).sphereCap.rotationX = 90;
  88.             MyEmitter(emitter).sphereCap.rotationZ = -rot - 90;
  89.             // カメラをマウス座標にする
  90.             camera.x += (1000 * Math.sin(mouseX / stage.stageWidth * Math.PI * 2) - camera.x) * 0.1;
  91.             camera.y += (600 * mouseY / stage.stageHeight - camera.y) * 0.1;
  92.             camera.z += (1000 * Math.cos(mouseX / stage.stageWidth * Math.PI * 2) - camera.z) * 0.1;
  93.             // エミッター更新
  94.             emitter.step();
  95.             // Papervision3Dのレンダリング
  96.             singleRender();
  97.             
  98.             // キラキラ
  99.             canvas.fillRect(canvas.rect, 0x0);
  100.             canvas.draw(viewportLayerForParticle, mtx);            
  101.         }
  102.     }
  103. }
  104. import idv.cjcat.stardust.common.actions.Age;
  105. import idv.cjcat.stardust.common.actions.DeathLife;
  106. import idv.cjcat.stardust.common.actions.ScaleCurve;
  107. import idv.cjcat.stardust.common.clocks.Clock;
  108. import idv.cjcat.stardust.common.initializers.Life;
  109. import idv.cjcat.stardust.common.math.UniformRandom;
  110. import idv.cjcat.stardust.threeD.actions.Accelerate3D;
  111. import idv.cjcat.stardust.threeD.actions.Move3D;
  112. import idv.cjcat.stardust.threeD.emitters.Emitter3D;
  113. import idv.cjcat.stardust.threeD.initializers.Position3D;
  114. import idv.cjcat.stardust.threeD.initializers.Velocity3D;
  115. import idv.cjcat.stardust.threeD.papervision3d.initializers.PV3DParticle;
  116. import idv.cjcat.stardust.threeD.zones.SinglePoint3D;
  117. import idv.cjcat.stardust.threeD.zones.SphereCap;
  118. import org.papervision3d.materials.special.ParticleMaterial;
  119. /**
  120.  * カスタムエミッター
  121.  * @author yasu
  122.  */
  123. class MyEmitter extends Emitter3D {
  124.     public var point:SinglePoint3D = new SinglePoint3D(); // パーティクルの発生位置
  125.     public var sphereCap:SphereCap = new SphereCap(0001040); // パーティクルの拡散
  126.     public function MyEmitter(clock:Clock = null) {
  127.         super(clock);
  128.         
  129.         // マテリアル
  130.         var mat:ParticleMaterial = new ParticleMaterial(0xFFCCBB, 116);
  131.         
  132.         // パーティクルの属性を定義
  133.         addInitializer(new Position3D(point)); // 発生位置
  134.         addInitializer(new PV3DParticle([mat]));
  135.         addInitializer(new Life(new UniformRandom(1200)));
  136.         addInitializer(new Velocity3D(sphereCap));
  137.         
  138.         // パーティクルのアクションを定義
  139.         addAction(new Age()); // 寿命を有効化
  140.         addAction(new DeathLife()); // 消えるを有効化
  141.         addAction(new Accelerate3D(0.05)); // 加速を有効化
  142.         addAction(new Move3D()); // 移動を有効化
  143.         addAction(new ScaleCurve(2020)); //スケール変更を有効化
  144.     }
  145. }
noswf

[Stardust] キラキラの3Dパーティクル forked from: [Stardust] キラキラの3Dパーティクル [diff(3)]

  1. // forked from clockmaker's [Stardust] キラキラの3Dパーティクル
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.geom.Matrix;
  6.     
  7.     import idv.cjcat.stardust.common.clocks.SteadyClock;
  8.     import idv.cjcat.stardust.common.emitters.Emitter;
  9.     import idv.cjcat.stardust.common.renderers.Renderer;
  10.     import idv.cjcat.stardust.threeD.papervision3d.renderers.PV3DParticleRenderer;
  11.     
  12.     import org.papervision3d.core.geom.Particles;
  13.     import org.papervision3d.core.math.Number3D;
  14.     import org.papervision3d.materials.WireframeMaterial;
  15.     import org.papervision3d.objects.primitives.*;
  16.     import org.papervision3d.view.BasicView;
  17.     import org.papervision3d.view.layer.ViewportLayer;
  18.     
  19.     import net.hires.debug.*;
  20.     /**
  21.      * スターダストを使った、3Dパーティクルデモ
  22.      * 詳細はこちらを参考ください
  23.      * http://clockmaker.jp/blog/2009/12/as3-stardust/
  24.      * @author yasu
  25.      */    
  26.     [SWF(width=465, height=465, frameRate=60)]
  27.     public class KiraKiraParticle extends BasicView {
  28.         // コンストラクタ
  29.         public function KiraKiraParticle() {
  30.             // PV3Dのパーティクル
  31.             particles = new Particles();
  32.             // ビューポートレイヤーにすると、ビットマップデータの加工がやりやすいよ
  33.             viewportLayerForParticle = particles.createViewportLayer(viewport);
  34.             scene.addChild(particles);
  35.             
  36.             //地面
  37.             earth = new Plane(new WireframeMaterial(0x999999, .5), 5000500066)
  38.             earth.y = -400;
  39.             earth.rotationX = 100;
  40.             scene.addChild(earth);
  41.             // パーティクルシステムの構築
  42.             emitter = new MyEmitter(new SteadyClock(3)); // エミッターに1フレームに発生させたい数値を指定
  43.             particleRenderer = new PV3DParticleRenderer(particles);
  44.             particleRenderer.addEmitter(emitter);
  45.             // エンターフレームイベントの登録
  46.             addEventListener(Event.ENTER_FRAME, loop);
  47.             // 背景
  48.             opaqueBackground = 0x0;
  49.             stage.quality = StageQuality.LOW; //画質を低に
  50.             
  51.             // キラキラロジック
  52.             canvas = new BitmapData(465 / 4465 / 4false, 0x000000);
  53.             var bmp:Bitmap = new Bitmap(canvas, PixelSnapping.NEVER, false);
  54.             bmp.scaleX = bmp.scaleY = 4;
  55.             bmp.smoothing = true;
  56.             bmp.blendMode = BlendMode.ADD;
  57.             addChild(bmp);
  58.             mtx = new Matrix();
  59.             mtx.translate(-viewport.width / 2, -viewport.height / 2);
  60.             mtx.scale(0.250.25);
  61.             mtx.translate(viewport.width / 4, viewport.height / 4);
  62.         }
  63.         // キラキラ
  64.         private var canvas:BitmapData;
  65.         // 地面
  66.         private var earth:Plane;
  67.         // エミッター
  68.         private var emitter:Emitter;
  69.         // レンダラー
  70.         private var particleRenderer:Renderer;
  71.         // パーティクルのラッパー
  72.         private var particles:Particles;
  73.         //モーションの角度
  74.         private var rot:Number = 0;
  75.         // ビューポート
  76.         private var viewportLayerForParticle:ViewportLayer;
  77.         // キラキラのキャプチャ変換行列
  78.         private var mtx:Matrix;
  79.         // エンターフレームイベント
  80.         private function loop(e:Event):void {
  81.             rot += 3;
  82.             // 円周上を動いているかのようにみせる
  83.             MyEmitter(emitter).point.x = 400 * Math.sin(rot * Number3D.toRADIANS);
  84.             MyEmitter(emitter).point.y = 300;
  85.             MyEmitter(emitter).point.z = 300 * Math.cos(rot * Number3D.toRADIANS);
  86.             // パーティクルの方向を変える
  87.             MyEmitter(emitter).sphereCap.rotationX = 90;
  88.             MyEmitter(emitter).sphereCap.rotationZ = -rot - 90;
  89.             // カメラをマウス座標にする
  90.             camera.x += (1000 * Math.sin(mouseX / stage.stageWidth * Math.PI * 2) - camera.x) * 0.1;
  91.             camera.y += (600 * mouseY / stage.stageHeight - camera.y) * 0.1;
  92.             camera.z += (1000 * Math.cos(mouseX / stage.stageWidth * Math.PI * 2) - camera.z) * 0.1;
  93.             // エミッター更新
  94.             emitter.step();
  95.             // Papervision3Dのレンダリング
  96.             singleRender();
  97.             
  98.             // キラキラ
  99.             canvas.fillRect(canvas.rect, 0x0);
  100.             canvas.draw(viewportLayerForParticle, mtx);            
  101.         }
  102.     }
  103. }
  104. import idv.cjcat.stardust.common.actions.Age;
  105. import idv.cjcat.stardust.common.actions.DeathLife;
  106. import idv.cjcat.stardust.common.actions.ScaleCurve;
  107. import idv.cjcat.stardust.common.clocks.Clock;
  108. import idv.cjcat.stardust.common.initializers.Life;
  109. import idv.cjcat.stardust.common.math.UniformRandom;
  110. import idv.cjcat.stardust.threeD.actions.Accelerate3D;
  111. import idv.cjcat.stardust.threeD.actions.Move3D;
  112. import idv.cjcat.stardust.threeD.emitters.Emitter3D;
  113. import idv.cjcat.stardust.threeD.initializers.Position3D;
  114. import idv.cjcat.stardust.threeD.initializers.Velocity3D;
  115. import idv.cjcat.stardust.threeD.papervision3d.initializers.PV3DParticle;
  116. import idv.cjcat.stardust.threeD.zones.SinglePoint3D;
  117. import idv.cjcat.stardust.threeD.zones.SphereCap;
  118. import org.papervision3d.materials.special.ParticleMaterial;
  119. /**
  120.  * カスタムエミッター
  121.  * @author yasu
  122.  */
  123. class MyEmitter extends Emitter3D {
  124.     public var point:SinglePoint3D = new SinglePoint3D(); // パーティクルの発生位置
  125.     public var sphereCap:SphereCap = new SphereCap(0001040); // パーティクルの拡散
  126.     public function MyEmitter(clock:Clock = null) {
  127.         super(clock);
  128.         
  129.         // マテリアル
  130.         var mat:ParticleMaterial = new ParticleMaterial(0xFFCCBB, 116);
  131.         
  132.         // パーティクルの属性を定義
  133.         addInitializer(new Position3D(point)); // 発生位置
  134.         addInitializer(new PV3DParticle([mat]));
  135.         addInitializer(new Life(new UniformRandom(1200)));
  136.         addInitializer(new Velocity3D(sphereCap));
  137.         
  138.         // パーティクルのアクションを定義
  139.         addAction(new Age()); // 寿命を有効化
  140.         addAction(new DeathLife()); // 消えるを有効化
  141.         addAction(new Accelerate3D(0.05)); // 加速を有効化
  142.         addAction(new Move3D()); // 移動を有効化
  143.         addAction(new ScaleCurve(2020)); //スケール変更を有効化
  144.     }
  145. }
noswf
  1. // forked from clockmaker's [Stardust] キラキラの3Dパーティクル
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.geom.Matrix;
  6.     
  7.     import idv.cjcat.stardust.common.clocks.SteadyClock;
  8.     import idv.cjcat.stardust.common.emitters.Emitter;
  9.     import idv.cjcat.stardust.common.renderers.Renderer;
  10.     import idv.cjcat.stardust.threeD.papervision3d.renderers.PV3DParticleRenderer;
  11.     
  12.     import org.papervision3d.core.geom.Particles;
  13.     import org.papervision3d.core.math.Number3D;
  14.     import org.papervision3d.materials.WireframeMaterial;
  15.     import org.papervision3d.objects.primitives.*;
  16.     import org.papervision3d.view.BasicView;
  17.     import org.papervision3d.view.layer.ViewportLayer;
  18.     
  19.     import net.hires.debug.*;
  20.     /**
  21.      * スターダストを使った、3Dパーティクルデモ
  22.      * 詳細はこちらを参考ください
  23.      * http://clockmaker.jp/blog/2009/12/as3-stardust/
  24.      * @author yasu
  25.      */    
  26.     [SWF(width=465, height=465, frameRate=60)]
  27.     public class KiraKiraParticle extends BasicView {
  28.         // コンストラクタ
  29.         public function KiraKiraParticle() {
  30.             // PV3Dのパーティクル
  31.             particles = new Particles();
  32.             // ビューポートレイヤーにすると、ビットマップデータの加工がやりやすいよ
  33.             viewportLayerForParticle = particles.createViewportLayer(viewport);
  34.             scene.addChild(particles);
  35.             
  36.             //地面
  37.             earth = new Plane(new WireframeMaterial(0x999999, .5), 5000500066)
  38.             earth.y = -500;
  39.             earth.rotationX = 90;
  40.             scene.addChild(earth);
  41.             // パーティクルシステムの構築
  42.             emitter = new MyEmitter(new SteadyClock(3)); // エミッターに1フレームに発生させたい数値を指定
  43.             particleRenderer = new PV3DParticleRenderer(particles);
  44.             particleRenderer.addEmitter(emitter);
  45.             // エンターフレームイベントの登録
  46.             addEventListener(Event.ENTER_FRAME, loop);
  47.             // 背景
  48.             opaqueBackground = 0x0;
  49.             stage.quality = StageQuality.LOW; //画質を低に
  50.             
  51.             // キラキラロジック
  52.             canvas = new BitmapData(465 / 4465 / 4false, 0x000000);
  53.             var bmp:Bitmap = new Bitmap(canvas, PixelSnapping.NEVER, false);
  54.             bmp.scaleX = bmp.scaleY = 4;
  55.             bmp.smoothing = true;
  56.             bmp.blendMode = BlendMode.ADD;
  57.             addChild(bmp);
  58.             mtx = new Matrix();
  59.             mtx.translate(-viewport.width / 2, -viewport.height / 2);
  60.             mtx.scale(0.250.25);
  61.             mtx.translate(viewport.width / 4, viewport.height / 4);
  62.         }
  63.         // キラキラ
  64.         private var canvas:BitmapData;
  65.         // 地面
  66.         private var earth:Plane;
  67.         // エミッター
  68.         private var emitter:Emitter;
  69.         // レンダラー
  70.         private var particleRenderer:Renderer;
  71.         // パーティクルのラッパー
  72.         private var particles:Particles;
  73.         //モーションの角度
  74.         private var rot:Number = 0;
  75.         // ビューポート
  76.         private var viewportLayerForParticle:ViewportLayer;
  77.         // キラキラのキャプチャ変換行列
  78.         private var mtx:Matrix;
  79.         // エンターフレームイベント
  80.         private function loop(e:Event):void {
  81.             rot += 3;
  82.             // 円周上を動いているかのようにみせる
  83.             MyEmitter(emitter).point.x = 400 * Math.sin(rot * Number3D.toRADIANS);
  84.             MyEmitter(emitter).point.y = 300;
  85.             MyEmitter(emitter).point.z = 300 * Math.cos(rot * Number3D.toRADIANS);
  86.             // パーティクルの方向を変える
  87.             MyEmitter(emitter).sphereCap.rotationX = 90;
  88.             MyEmitter(emitter).sphereCap.rotationZ = -rot - 90;
  89.             // カメラをマウス座標にする
  90.             camera.x += (1000 * Math.sin(mouseX / stage.stageWidth * Math.PI * 2) - camera.x) * 0.1;
  91.             camera.y += (600 * mouseY / stage.stageHeight - camera.y) * 0.1;
  92.             camera.z += (1000 * Math.cos(mouseX / stage.stageWidth * Math.PI * 2) - camera.z) * 0.1;
  93.             // エミッター更新
  94.             emitter.step();
  95.             // Papervision3Dのレンダリング
  96.             singleRender();
  97.             
  98.             // キラキラ
  99.             canvas.fillRect(canvas.rect, 0x0);
  100.             canvas.draw(viewportLayerForParticle, mtx);            
  101.         }
  102.     }
  103. }
  104. import idv.cjcat.stardust.common.actions.Age;
  105. import idv.cjcat.stardust.common.actions.DeathLife;
  106. import idv.cjcat.stardust.common.actions.ScaleCurve;
  107. import idv.cjcat.stardust.common.clocks.Clock;
  108. import idv.cjcat.stardust.common.initializers.Life;
  109. import idv.cjcat.stardust.common.math.UniformRandom;
  110. import idv.cjcat.stardust.threeD.actions.Accelerate3D;
  111. import idv.cjcat.stardust.threeD.actions.Move3D;
  112. import idv.cjcat.stardust.threeD.emitters.Emitter3D;
  113. import idv.cjcat.stardust.threeD.initializers.Position3D;
  114. import idv.cjcat.stardust.threeD.initializers.Velocity3D;
  115. import idv.cjcat.stardust.threeD.papervision3d.initializers.PV3DParticle;
  116. import idv.cjcat.stardust.threeD.zones.SinglePoint3D;
  117. import idv.cjcat.stardust.threeD.zones.SphereCap;
  118. import org.papervision3d.materials.special.ParticleMaterial;
  119. /**
  120.  * カスタムエミッター
  121.  * @author yasu
  122.  */
  123. class MyEmitter extends Emitter3D {
  124.     public var point:SinglePoint3D = new SinglePoint3D(); // パーティクルの発生位置
  125.     public var sphereCap:SphereCap = new SphereCap(0001040); // パーティクルの拡散
  126.     public function MyEmitter(clock:Clock = null) {
  127.         super(clock);
  128.         
  129.         // マテリアル
  130.         var mat:ParticleMaterial = new ParticleMaterial(0xFFCCBB, 116);
  131.         
  132.         // パーティクルの属性を定義
  133.         addInitializer(new Position3D(point)); // 発生位置
  134.         addInitializer(new PV3DParticle([mat]));
  135.         addInitializer(new Life(new UniformRandom(1200)));
  136.         addInitializer(new Velocity3D(sphereCap));
  137.         
  138.         // パーティクルのアクションを定義
  139.         addAction(new Age()); // 寿命を有効化
  140.         addAction(new DeathLife()); // 消えるを有効化
  141.         addAction(new Accelerate3D(0.05)); // 加速を有効化
  142.         addAction(new Move3D()); // 移動を有効化
  143.         addAction(new ScaleCurve(2020)); //スケール変更を有効化
  144.     }
  145. }
noswf
Get Adobe Flash Player