In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

アナグリフロード! forked from: nengafl

wonderfl本刊行記念イベント没ネタ
/**
 * Copyright umhr ( http://wonderfl.net/user/umhr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/5B2M
 */

//wonderfl本刊行記念イベント没ネタ

// forked from sake's レインボーロード!  forked from: nengafl
// forked from nengafl's nengafl

package {
	import flash.display.Sprite;
	import flash.events.Event;
	
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.geom.ColorTransform;
	import flash.geom.Rectangle;
	
	[SWF(backgroundColor="0x000000")]
	public class Main extends Sprite{
		private var _red:Nengafl;
		private var _blue:Nengafl;
		private var _bitmapData:BitmapData;
		public function Main(){
			_red = new Nengafl(-50);
			this.addChild(_red);
			_blue = new Nengafl(50);
			this.addChild(_blue);
			
			_bitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,false,0x000000);
			addChild(new Bitmap(_bitmapData));
			addEventListener(Event.ENTER_FRAME, loop);
		}
		
		private function loop(e:Event):void {
			_red.onFrame(null);
			_blue.onFrame(null);
			
			_bitmapData.lock();
			_bitmapData.fillRect(new Rectangle(0,0,stage.stageWidth,stage.stageHeight), 0x000000);
			_bitmapData.draw(_red, null,new ColorTransform(1,0,0,1,0,0,0,0));
			_bitmapData.draw(_blue, null,new ColorTransform(0,1,1,1,0,0,0,0), "add");
			_bitmapData.unlock();
		}
		
	}
}
// forked from sake's レインボーロード!  forked from: nengafl
// forked from nengafl's nengafl
/*
PV3Dで簡単に綺麗な図形を作ってみよう!

PV3Dを使うと3Dを超簡単に扱えます。
そこで、PV3Dで簡単に綺麗な図形を作ってみましょう。
簡単な数式とパラメータだけで綺麗な図形が完成!
下で定義してある定数のp, q, a, l, m をいじってみてください。

また、for文の中の数式を書き換えるとさらに形が変わります。
単純に、sin → cos みたいに書き換えてみてもおもしろいかも!
*/


	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.events.Event;
	import flash.geom.Matrix;
	import frocessing.color.FColor;
	import org.papervision3d.core.geom.Pixels;
	import org.papervision3d.core.geom.renderables.Pixel3D;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.layer.BitmapEffectLayer;
	
	[SWF(backgroundColor="0x000000")]
	class Nengafl extends BasicView
	{
		// 計算に使うパラメータ
		// このあたりを適当に変えてみるだけでも面白いです!
		//----------------------------------------------------------------
		private const p:int=3;
		private const q:int=7;
		private const a:int=100;
		private const l:Number=0.9;
		private const m:Number=1.1;
		//----------------------------------------------------------------
		
		private var pixels:Pixels;
		private var canvas:BitmapData;
		private var mtx:Matrix;
		
		// コンストラクタ
		public function Nengafl(dX:Number)
		{
			super(0, 0, true, true);
			
			// レイヤー作成。PV3Dでエフェクト使うときはこれを最初に作ります
			var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465, 465, true, 0, "clear_pre", true);
			layer.clearBeforeRender=true;
			viewport.containerSprite.addLayer(layer);
			camera.x = dX/5;
			camera.z=-500;
			
			// Pixelsの初期化
			pixels=new Pixels(layer);
			scene.addChild(pixels);
			
			var c:int=0;
			var cc:FColor=new FColor;
			
			// パラメータと数式でPixelの位置を計算する
			for (var i:Number=0; i <= 6 * Math.PI; i+=0.02)
			{
				// 数式に従ってx, y, z を計算。ここを適当に変えてみても面白いです。
				// 簡単にsin → cos に変えてみるとか!
				var xx:Number=(2 + Math.cos(q / p * i)) * Math.cos(i) * a;
				var yy:Number=Math.sin(q / p * i) * a * 1.6;
				var zz:Number=(2 + Math.cos(q / p * i)) * Math.sin(i) * a;
				
				// 綺麗なグラデーションになるように色を設定
				// こういうときはHSVを使うのが便利です
				cc.hsv(c, 1, 1);
				var color:uint=0xFFFFFFFF;//cc.value32;
				
				for (var j:int=0; j < 15; j++)
				{
					// x, y, z を l~mの範囲で散らします。
					// l~mの区間の乱数を出す計算:(m - l) * Math.random() + l
					var px:Pixel3D=new Pixel3D(color, xx * ((m - l) * random() + l), yy * ((m - l) * random() + l), zz * ((m - l) * random() + l));
					pixels.addPixel3D(px);
				}
				c++;
			}
			// キラキラロジック
			canvas=new BitmapData(465 / 4, 465 / 4, false, 0x000000);
			/*
			var bmp:Bitmap=new Bitmap(canvas, "never", true);
			bmp.scaleX=bmp.scaleY=4;
			bmp.smoothing=true;
			bmp.blendMode=BlendMode.ADD;
			addChild(bmp);
			*/
			mtx=new Matrix(0.25, 0, 0, 0.25,dX/20);
			
			// PV3Dの描写開始!
			startRendering();
			
			// フレームイベント追加
			//addEventListener(Event.ENTER_FRAME, onFrame);
		}
		
		// フレームイベント用関数
		public function onFrame(e:Event):void
		{
			// キラキラを描写
			canvas.fillRect(canvas.rect, 0x000000);
			canvas.draw(viewport, mtx);
			
			// Y軸でローテーション
			pixels.rotationY+=0.2;
		}
		private var num:Number = 1;
		public function random():Number{
			num = (num*1664525+1013904223)%0x100000000;
			return num/0x100000000;
		}
	}