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

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

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


forked from : sake's レインボーロード! forked from: nengafl [diff(187)]

FORKED

forked from: レインボーロード! forked from: nengafl forked from: forked from: レインボーロード! forked from: nengafl [diff(5)]

  1. // forked from uwi's forked from: レインボーロード!  forked from: nengafl
  2. // forked from sake's レインボーロード!  forked from: nengafl
  3. // forked from nengafl's nengafl
  4. /*
  5.    PV3Dで簡単に綺麗な図形を作ってみよう!
  6.    PV3Dを使うと3Dを超簡単に扱えます。
  7.    そこで、PV3Dで簡単に綺麗な図形を作ってみましょう。
  8.    簡単な数式とパラメータだけで綺麗な図形が完成!
  9.    下で定義してある定数のp, q, a, l, m をいじってみてください。
  10.    
  11.    また、for文の中の数式を書き換えるとさらに形が変わります。
  12.    単純に、sin → cos みたいに書き換えてみてもおもしろいかも!
  13. */
  14.  
  15.  
  16. package
  17. {
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BlendMode;
  21.     import flash.events.Event;
  22.     import flash.geom.Matrix;
  23.     import frocessing.color.*;
  24.     import org.papervision3d.core.geom.Pixels;
  25.     import org.papervision3d.core.geom.renderables.Pixel3D;
  26.     import org.papervision3d.view.BasicView;
  27.     import org.papervision3d.view.layer.BitmapEffectLayer;
  28.         import org.papervision3d.objects.*;
  29.         import org.papervision3d.core.math.*;
  30.     [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]
  31.     public class Nengafl extends BasicView
  32.     {
  33.         // 計算に使うパラメータ
  34.         // このあたりを適当に変えてみるだけでも面白いです!
  35.         //----------------------------------------------------------------
  36.         private const p:int=10;
  37.         private const q:int=25;
  38.         private const a:int=50;
  39.         private const l:Number=2;
  40.         private const m:Number=1.1;
  41.         //----------------------------------------------------------------
  42.         private var pixels:Pixels;
  43.         private var canvas:BitmapData;
  44.         private var mtx:Matrix;
  45.         // コンストラクタ
  46.         public function Nengafl()
  47.         {
  48.             super(00truefalse);
  49.             graphics.beginFill(0x000000);
  50.             graphics.drawRect(00465465);
  51.             graphics.endFill();
  52.             
  53.             // レイヤー作成。PV3Dでエフェクト使うときはこれを最初に作ります
  54.             var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465465true0"clear_pre"true);
  55.             layer.clearBeforeRender=true;
  56.             viewport.containerSprite.addLayer(layer);
  57. //            camera.z=-500;
  58.             // Pixelsの初期化
  59.             pixels=new Pixels(layer);
  60.             scene.addChild(pixels);
  61.             var cc:ColorHSV=new ColorHSV();
  62.             // パラメータと数式でPixelの位置を計算する
  63.                         for(var i : Number = 0;i < 720;i+=0.2){
  64.                             var t : Number = i * Math.PI / 120;
  65.                 // 数式に従ってx, y, z を計算。ここを適当に変えてみても面白いです。
  66.                 // 簡単にsin → cos に変えてみるとか!
  67.                 var xx:Number=(2 + Math.cos(q / p * t)) * Math.cos(t) * a;
  68.                 var yy:Number=Math.sin(q / p * t) * a * 1.6;
  69.                 var zz:Number=(2 + Math.cos(q / p * t)) * Math.sin(t) * a;
  70.                 // 綺麗なグラデーションになるように色を設定
  71.                 // こういうときはHSVを使うのが便利です
  72.                 cc.hsv(i, 11);
  73.                 var color:uint=cc.value32;
  74.                 for (var j:int=0; j < 15; j++)
  75.                 {
  76.                     // x, y, z を l~mの範囲で散らします。
  77.                     // l~mの区間の乱数を出す計算:(m - l) * Math.random() + l
  78.                     var px:Pixel3D=new Pixel3D(color, xx * ((m - l) * Math.random() + l), yy * ((m - l) * Math.random() + l), zz * ((m - l) * Math.random() + l));
  79.                     pixels.addPixel3D(px);
  80.                 }
  81.             }
  82.             // キラキラロジック
  83.             canvas=new BitmapData(465 / 4465 / 4false, 0x000000);
  84.             var bmp:Bitmap=new Bitmap(canvas, "never"true);
  85.             bmp.scaleX=bmp.scaleY=4;
  86.             bmp.smoothing=true;
  87.             bmp.blendMode=BlendMode.ADD;
  88.             addChild(bmp);
  89.             mtx=new Matrix(0.25000.25);
  90.             // PV3Dの描写開始!
  91.             startRendering();
  92.                         _rider = new DisplayObject3D();
  93.                 _rider.x =(2 + Math.cos(q / p * _t)) * Math.cos(_t) * a;
  94.                 _rider.y =Math.sin(q / p * _t) * a * 1.6;
  95.                 _rider.z =(2 + Math.cos(q / p * _t)) * Math.sin(_t) * a;
  96.                         _camera = new RidingCamera(_rider, new Number3D(010), null);
  97.         }
  98.                 private var _t : Number = 0.0;
  99.                 private var _rider : DisplayObject3D;
  100.         // フレームイベント用関数
  101.                 override protected function onRenderTick(e : Event = null) : void
  102.                 {
  103.                     // キラキラを描写
  104.             canvas.fillRect(canvas.rect, 0x000000);
  105.             canvas.draw(viewport, mtx);
  106.             // Y軸でローテーション
  107. //            pixels.rotationY+=0.2;
  108.                         _t += 0.01;
  109.                 var xx:Number=(2 + Math.cos(q / p * _t)) * Math.cos(_t) * a;
  110.                 var yy:Number=Math.sin(q / p * _t) * a * 1.6;
  111.                 var zz:Number=(2 + Math.cos(q / p * _t)) * Math.sin(_t) * a;
  112.                         _rider.x = xx;
  113.                         _rider.y = yy;
  114.                         _rider.z = zz;
  115.                         RidingCamera(_camera).move(00);
  116.                         super.onRenderTick(e);
  117.         }
  118.         }
  119. }
  120. import org.papervision3d.core.math.*;
  121. import org.papervision3d.objects.*;
  122. import org.papervision3d.cameras.*;
  123. // ジンバルロックを解消した以外はCamera3Dと同じ
  124. class QCamera3D extends Camera3D
  125. {
  126.     public var _up : Number3D; // カメラの上の向きの単位ベクトル
  127.     protected var _front : Number3D;
  128.     private var _prevDir : Number3D;
  129.     private var _ltarg : DisplayObject3D;
  130.     
  131.     public function QCamera3D(up : Number3D, front : Number3D = null)
  132.     {
  133.         super();
  134.         _up = null;
  135.         _ltarg = new DisplayObject3D();
  136.         init(up, front);
  137.     }
  138.     
  139.     // prevDirからcurDirへ向ける回転を_upにかけるだけ。カメラ自体に操作はしない
  140.     public function rotate(curDir : Number3D) : void
  141.     {
  142.         if(_prevDir != null){
  143.             var n : Number3D = Number3D.cross(_prevDir, curDir);
  144. //            if(n.moduloSquared > 0.00000001){
  145.             if(n.moduloSquared != 0){
  146.                 n.normalize();
  147.                 var angle : Number = Math.acos(Number3D.dot(_prevDir, curDir));
  148.                 if(_front != null){
  149.                     var a : Array = applyQuaternion([_front, _up], n, angle);
  150.                     _front = a[0];
  151.                     _up = a[1];
  152.                 }else{
  153.                     _up = applyQuaternion([_up], n, angle)[0];
  154.                 }
  155.             }
  156.             _prevDir.copyFrom(curDir);
  157.         }else{
  158.             _prevDir = curDir.clone();
  159.         }
  160.     }
  161.     
  162.     // カメラの右方向へx[rad], 上方向へy[rad]回転させる
  163.     public function rotateXY(x : Number, y : Number) : void
  164.     {
  165.         if(_front == null)return;
  166.         
  167.         // X方向の移動
  168.         _front = applyQuaternion([_front], _up, -x)[0];
  169.         
  170.         // Y方向の移動
  171.         var right : Number3D = Number3D.cross(_up, _front);
  172.         right.normalize();
  173.         var ret : Array = applyQuaternion([_front, _up], right, y);
  174.         _front = ret[0];
  175.         _up = ret[1];
  176.     }
  177.     
  178.     public function head() : void
  179.     {
  180.         if(_front != null){
  181.             // まわりくどい
  182.             var ltpos : Number3D = this.position.clone();
  183.             ltpos.plusEq(_front);
  184.             _ltarg.position = ltpos;
  185.             this.lookAt(_ltarg, _up);
  186.         }
  187.     }
  188.     
  189.     public function init(up : Number3D = null, front : Number3D = null) : void
  190.     {
  191.         if(up != null){
  192.             _up = up.clone();
  193.             _up.normalize();
  194.         }
  195.         if(front != null){
  196.             _front = front.clone();
  197.             _front.normalize();
  198.         }else{
  199.             _front = null;
  200.         }
  201.         _prevDir = null;
  202.     }
  203.     
  204.     // axisを軸にangle回転させる変換を、srcsの要素それぞれに適用する
  205.     public static function applyQuaternion(srcs : Array, axis : Number3D, angle : Number) : Array
  206.     {
  207.         var q : Quaternion = Quaternion.createFromAxisAngle(
  208.             axis.x / axis.modulo, 
  209.             axis.y / axis.modulo, 
  210.             axis.z / axis.modulo,
  211.             angle
  212.             );
  213.         var qc : Quaternion = Quaternion.conjugate(q);
  214.         
  215.         var ret : Array = [];
  216.         for each(var src : Number3D in srcs){
  217.             var qSrc : Quaternion = new Quaternion(src.x, src.y, src.z, 0);
  218.             var qDst : Quaternion = Quaternion.multiply(qc, qSrc);
  219.             qDst.mult(q);
  220.             ret.push(new Number3D(qDst.x, qDst.y, qDst.z));
  221.         }
  222.         return ret;
  223.     }
  224.     
  225. }
  226. // ゲットライド!
  227. class RidingCamera extends QCamera3D
  228. {
  229.     private var _ride : DisplayObject3D;
  230.     private var _prevPos : Number3D;
  231.     
  232.     public function RidingCamera(ride : DisplayObject3D, up : Number3D, front : Number3D = null)
  233.     {
  234.         super(up, front);
  235.         _ride = ride;
  236.         _prevPos = _ride.position.clone();
  237.     }
  238.     
  239.     public function move(up : Number = 0, back : Number = 0) : void
  240.     {
  241.         var curDir : Number3D = Number3D.sub(_ride.position, _prevPos);
  242.         curDir.normalize();
  243.         if(_front == null){
  244.             _front = curDir.clone();
  245.         }
  246.         rotate(curDir);
  247.         
  248.         var curPos : Number3D = _ride.position.clone();
  249.         var temp : Number3D;
  250.         temp = _up.clone();
  251.         temp.multiplyEq(up);
  252.         curPos.plusEq(temp);
  253.         temp = _front.clone();
  254.         temp.multiplyEq(-back);
  255.         curPos.plusEq(temp);
  256.         this.position = curPos;
  257.         
  258.         head();
  259.         _prevPos.copyFrom(_ride.position);
  260.     }
  261. }
noswf

forked from: レインボーロード! forked from: nengafl forked from: forked from: レインボーロード! forked from: nengafl [diff(6)]

  1. // forked from uwi's forked from: レインボーロード!  forked from: nengafl
  2. // forked from sake's レインボーロード!  forked from: nengafl
  3. // forked from nengafl's nengafl
  4. /*
  5.    PV3Dで簡単に綺麗な図形を作ってみよう!
  6.    PV3Dを使うと3Dを超簡単に扱えます。
  7.    そこで、PV3Dで簡単に綺麗な図形を作ってみましょう。
  8.    簡単な数式とパラメータだけで綺麗な図形が完成!
  9.    下で定義してある定数のp, q, a, l, m をいじってみてください。
  10.    
  11.    また、for文の中の数式を書き換えるとさらに形が変わります。
  12.    単純に、sin → cos みたいに書き換えてみてもおもしろいかも!
  13. */
  14.  
  15.  
  16. package
  17. {
  18.     import flash.display.Bitmap;
  19.     import flash.display.BitmapData;
  20.     import flash.display.BlendMode;
  21.     import flash.events.Event;
  22.     import flash.geom.Matrix;
  23.     import frocessing.color.*;
  24.     import org.papervision3d.core.geom.Pixels;
  25.     import org.papervision3d.core.geom.renderables.Pixel3D;
  26.     import org.papervision3d.view.BasicView;
  27.     import org.papervision3d.view.layer.BitmapEffectLayer;
  28.         import org.papervision3d.objects.*;
  29.         import org.papervision3d.core.math.*;
  30.     [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]
  31.     public class Nengafl extends BasicView
  32.     {
  33.         // 計算に使うパラメータ
  34.         // このあたりを適当に変えてみるだけでも面白いです!
  35.         //----------------------------------------------------------------
  36.         private const p:int=10000;
  37.         private const q:int=5;
  38.         private const a:int=1000;
  39.         private const l:Number=50;
  40.         private const m:Number=50;
  41.         //----------------------------------------------------------------
  42.         private var pixels:Pixels;
  43.         private var canvas:BitmapData;
  44.         private var mtx:Matrix;
  45.         // コンストラクタ
  46.         public function Nengafl()
  47.         {
  48.             super(00truefalse);
  49.             graphics.beginFill(0x000000);
  50.             graphics.drawRect(00465465);
  51.             graphics.endFill();
  52.             
  53.             // レイヤー作成。PV3Dでエフェクト使うときはこれを最初に作ります
  54.             var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465465true0"clear_pre"true);
  55.             layer.clearBeforeRender=true;
  56.             viewport.containerSprite.addLayer(layer);
  57. //            camera.z=-500;
  58.             // Pixelsの初期化
  59.             pixels=new Pixels(layer);
  60.             scene.addChild(pixels);
  61.             var cc:ColorHSV=new ColorHSV();
  62.             // パラメータと数式でPixelの位置を計算する
  63.                         for(var i : Number = 0;i < 720;i+=0.2){
  64.                             var t : Number = i * Math.PI / 120;
  65.                 // 数式に従ってx, y, z を計算。ここを適当に変えてみても面白いです。
  66.                 // 簡単にsin → cos に変えてみるとか!
  67.                 var xx:Number=(2 + Math.cos(q / p * t)) * Math.cos(t) * a;
  68.                 var yy:Number=Math.sin(q / p * t) * a * 1.6;
  69.                 var zz:Number=(2 + Math.cos(q / p * t)) * Math.sin(t) * a;
  70.                 // 綺麗なグラデーションになるように色を設定
  71.                 // こういうときはHSVを使うのが便利です
  72.                 cc.hsv(i, 11);
  73.                 var color:uint=cc.value32;
  74.                 for (var j:int=0; j < 15; j++)
  75.                 {
  76.                     // x, y, z を l~mの範囲で散らします。
  77.                     // l~mの区間の乱数を出す計算:(m - l) * Math.random() + l
  78.                     var px:Pixel3D=new Pixel3D(color, xx * ((m - l) * Math.random() + l), yy * ((m - l) * Math.random() + l), zz * ((m - l) * Math.random() + l));
  79.                     pixels.addPixel3D(px);
  80.                 }
  81.             }
  82.             // キラキラロジック
  83.             canvas=new BitmapData(465 / 4465 / 4false, 0x000000);
  84.             var bmp:Bitmap=new Bitmap(canvas, "never"true);
  85.             bmp.scaleX=bmp.scaleY=4;
  86.             bmp.smoothing=true;
  87.             bmp.blendMode=BlendMode.ADD;
  88.             addChild(bmp);
  89.             mtx=new Matrix(0.25000.25);
  90.             // PV3Dの描写開始!
  91.             startRendering();
  92.                         _rider = new DisplayObject3D();
  93.                 _rider.x =(2 + Math.cos(q / p * _t)) * Math.cos(_t) * a;
  94.                 _rider.y =Math.sin(q / p * _t) * a * 1.6;
  95.                 _rider.z =(2 + Math.cos(q / p * _t)) * Math.sin(_t) * a;
  96.                         _camera = new RidingCamera(_rider, new Number3D(010), null);
  97.         }
  98.                 private var _t : Number = 0.0;
  99.                 private var _rider : DisplayObject3D;
  100.         // フレームイベント用関数
  101.                 override protected function onRenderTick(e : Event = null) : void
  102.                 {
  103.                     // キラキラを描写
  104.             canvas.fillRect(canvas.rect, 0x000000);
  105.             canvas.draw(viewport, mtx);
  106.             // Y軸でローテーション
  107. //            pixels.rotationY+=0.2;
  108.                         _t += 0.01;
  109.                 var xx:Number=(2 + Math.cos(q / p * _t)) * Math.cos(_t) * a;
  110.                 var yy:Number=Math.sin(q / p * _t) * a * 1.6;
  111.                 var zz:Number=(2 + Math.cos(q / p * _t)) * Math.sin(_t) * a;
  112.                         _rider.x = xx;
  113.                         _rider.y = yy;
  114.                         _rider.z = zz;
  115.                         RidingCamera(_camera).move(00);
  116.                         super.onRenderTick(e);
  117.         }
  118.         }
  119. }
  120. import org.papervision3d.core.math.*;
  121. import org.papervision3d.objects.*;
  122. import org.papervision3d.cameras.*;
  123. // ジンバルロックを解消した以外はCamera3Dと同じ
  124. class QCamera3D extends Camera3D
  125. {
  126.     public var _up : Number3D; // カメラの上の向きの単位ベクトル
  127.     protected var _front : Number3D;
  128.     private var _prevDir : Number3D;
  129.     private var _ltarg : DisplayObject3D;
  130.     
  131.     public function QCamera3D(up : Number3D, front : Number3D = null)
  132.     {
  133.         super();
  134.         _up = null;
  135.         _ltarg = new DisplayObject3D();
  136.         init(up, front);
  137.     }
  138.     
  139.     // prevDirからcurDirへ向ける回転を_upにかけるだけ。カメラ自体に操作はしない
  140.     public function rotate(curDir : Number3D) : void
  141.     {
  142.         if(_prevDir != null){
  143.             var n : Number3D = Number3D.cross(_prevDir, curDir);
  144. //            if(n.moduloSquared > 0.00000001){
  145.             if(n.moduloSquared != 0){
  146.                 n.normalize();
  147.                 var angle : Number = Math.acos(Number3D.dot(_prevDir, curDir));
  148.                 if(_front != null){
  149.                     var a : Array = applyQuaternion([_front, _up], n, angle);
  150.                     _front = a[0];
  151.                     _up = a[1];
  152.                 }else{
  153.                     _up = applyQuaternion([_up], n, angle)[0];
  154.                 }
  155.             }
  156.             _prevDir.copyFrom(curDir);
  157.         }else{
  158.             _prevDir = curDir.clone();
  159.         }
  160.     }
  161.     
  162.     // カメラの右方向へx[rad], 上方向へy[rad]回転させる
  163.     public function rotateXY(x : Number, y : Number) : void
  164.     {
  165.         if(_front == null)return;
  166.         
  167.         // X方向の移動
  168.         _front = applyQuaternion([_front], _up, -x)[0];
  169.         
  170.         // Y方向の移動
  171.         var right : Number3D = Number3D.cross(_up, _front);
  172.         right.normalize();
  173.         var ret : Array = applyQuaternion([_front, _up], right, y);
  174.         _front = ret[0];
  175.         _up = ret[1];
  176.     }
  177.     
  178.     public function head() : void
  179.     {
  180.         if(_front != null){
  181.             // まわりくどい
  182.             var ltpos : Number3D = this.position.clone();
  183.             ltpos.plusEq(_front);
  184.             _ltarg.position = ltpos;
  185.             this.lookAt(_ltarg, _up);
  186.         }
  187.     }
  188.     
  189.     public function init(up : Number3D = null, front : Number3D = null) : void
  190.     {
  191.         if(up != null){
  192.             _up = up.clone();
  193.             _up.normalize();
  194.         }
  195.         if(front != null){
  196.             _front = front.clone();
  197.             _front.normalize();
  198.         }else{
  199.             _front = null;
  200.         }
  201.         _prevDir = null;
  202.     }
  203.     
  204.     // axisを軸にangle回転させる変換を、srcsの要素それぞれに適用する
  205.     public static function applyQuaternion(srcs : Array, axis : Number3D, angle : Number) : Array
  206.     {
  207.         var q : Quaternion = Quaternion.createFromAxisAngle(
  208.             axis.x / axis.modulo, 
  209.             axis.y / axis.modulo, 
  210.             axis.z / axis.modulo,
  211.             angle
  212.             );
  213.         var qc : Quaternion = Quaternion.conjugate(q);
  214.         
  215.         var ret : Array = [];
  216.         for each(var src : Number3D in srcs){
  217.             var qSrc : Quaternion = new Quaternion(src.x, src.y, src.z, 0);
  218.             var qDst : Quaternion = Quaternion.multiply(qc, qSrc);
  219.             qDst.mult(q);
  220.             ret.push(new Number3D(qDst.x, qDst.y, qDst.z));
  221.         }
  222.         return ret;
  223.     }
  224.     
  225. }
  226. // ゲットライド!
  227. class RidingCamera extends QCamera3D
  228. {
  229.     private var _ride : DisplayObject3D;
  230.     private var _prevPos : Number3D;
  231.     
  232.     public function RidingCamera(ride : DisplayObject3D, up : Number3D, front : Number3D = null)
  233.     {
  234.         super(up, front);
  235.         _ride = ride;
  236.         _prevPos = _ride.position.clone();
  237.     }
  238.     
  239.     public function move(up : Number = 0, back : Number = 0) : void
  240.     {
  241.         var curDir : Number3D = Number3D.sub(_ride.position, _prevPos);
  242.         curDir.normalize();
  243.         if(_front == null){
  244.             _front = curDir.clone();
  245.         }
  246.         rotate(curDir);
  247.         
  248.         var curPos : Number3D = _ride.position.clone();
  249.         var temp : Number3D;
  250.         temp = _up.clone();
  251.         temp.multiplyEq(up);
  252.         curPos.plusEq(temp);
  253.         temp = _front.clone();
  254.         temp.multiplyEq(-back);
  255.         curPos.plusEq(temp);
  256.         this.position = curPos;
  257.         
  258.         head();
  259.         _prevPos.copyFrom(_ride.position);
  260.     }
  261. }
noswf
Get Adobe Flash Player