アナグリフロード! 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;
}
}