Anaglyph っぽいものをつくってみた 赤と青のメガネのやつをかけて見てみてね a24 forked:4favorite:14lines:187license : MIT License modified : 2010-01-11 16:49:04 Embed Tweet // // っぽいものをつくってみた // 赤と青のメガネのやつをかけて見てみてね // package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; [SWF(backgroundColor="#FFFFFF", frameRate=60)] public class Main extends MovieClip { private var anags:Array = new Array(); private var circle:CircleRotation; public function Main() { circle = new CircleRotation(); circle.blur = 8; for (var i:int = 0; i < 10; i++) { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0x333333); sp.graphics.drawRect( -35, -35, 70, 70); var anag:Anaglyph = new Anaglyph(sp, 0); addChild(anag); circle.addObject(anag); anags.push(anag); } circle.init(233, 210, 150, 80); addEventListener(Event.ENTER_FRAME, updateDepth); } private function updateDepth(e:Event):void { circle.angle ++; for (var i:int = 0; i < anags.length; i++) anags[i].depth = (anags[i].y - 233) / 10; } } } import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Sprite; import flash.filters.ColorMatrixFilter; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; class Anaglyph extends Sprite { private const COLOR_BLUE:uint = 0x08FCFA; private const COLOR_RED:uint = 0xFB0200; private var _target:DisplayObject; private var _depth:Number; private var _blueImage:Bitmap; private var _redImage:Bitmap; private var _targetImage:Bitmap; public function Anaglyph(target:DisplayObject, depth:Number ) { _target = target; _depth = depth; _targetImage = getCapture(_target); addChild(_targetImage); var blueBmd:BitmapData = convertColorTone(COLOR_BLUE); _blueImage = new Bitmap(blueBmd); _blueImage.blendMode = "multiply"; _blueImage.alpha = 0.6; addChild(_blueImage); var redBmd:BitmapData = convertColorTone(COLOR_RED); _redImage = new Bitmap(redBmd); _redImage.blendMode = "multiply"; _redImage.alpha = 0.6; addChild(_redImage); x = _target.x; y = _target.y; updateDepth(); } private function convertColorTone(color:uint):BitmapData { var bmd:BitmapData = getCaptureData(_target, false); var rgb:Object = getRGB(color); var gray:Number = 1 / 3 / 255 * 5; var filter:ColorMatrixFilter = new ColorMatrixFilter ( [gray * rgb.r, gray * rgb.r, gray * rgb.r, 0, 0, gray * rgb.g, gray * rgb.g, gray * rgb.g, 0, 0, gray * rgb.b, gray * rgb.b, gray * rgb.b, 0, 0, 0 ,0 ,0 ,0 , 0] ); bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), filter); return bmd; } private function updateDepth():void { var rect:Rectangle = _target.getRect(_target); _blueImage.x = depth + rect.left; _redImage.x = -depth + rect.top; _targetImage.x = rect.left; } public function getCapture( target:DisplayObject , transparent:Boolean = true , bgColor:uint = 0xFFFFFF ):Bitmap { return new Bitmap( getCaptureData( target , transparent , bgColor ) ); } public function getCaptureData( target:DisplayObject , transparent:Boolean = true , bgColor:uint = 0x00FFFFFF ):BitmapData { var bmpData:BitmapData = new BitmapData( target.width , target.height , transparent , bgColor ); var rect:Rectangle = target.getBounds( target ); var mtx:Matrix = new Matrix(); mtx.translate(-rect.left, -rect.top); bmpData.draw( target , mtx ); return bmpData; } public function getRGB( color:uint ):Object { return { r : color >> 16 & 0xFF , g : color >> 8 & 0xFF , b : color & 0xFF }; } public function get depth():Number { return _depth; } public function set depth(value:Number):void { _depth = value; updateDepth(); } } import flash.display.DisplayObject; import flash.events.Event; import flash.events.EventDispatcher; import flash.filters.BlurFilter; import flash.filters.GlowFilter; class CircleRotation extends EventDispatcher { private var _objs:Array; private var _sort:Array; private var _centerX:Number; private var _centerY:Number; private var _cirW:Number; private var _cirH:Number; private var _angle:Number; private var _blur:Number = 8; public function CircleRotation() { _objs = new Array(); _sort = new Array(); } public function addObject( object:DisplayObject ):void { _objs.push( object ); _sort.push( object ); } public function init( centerX:Number , centerY:Number , width:Number , height:Number ):void { _centerX = centerX; _centerY = centerY; _cirW = width; _cirH = height; _angle = 0; updata(); } private function updata():void { var num:int = _objs.length; var ang:Number = 360 / num; var target:DisplayObject; for ( var i:int = 0; i < num; i ++ ) { target = _objs[ i ]; var targetAngle:Number = _angle + ang * i; target.x = _centerX + _cirW * Math.cos( targetAngle * Math.PI / 180 ); target.y = _centerY + _cirH * Math.sin( targetAngle * Math.PI / 180 ); target.scaleX = target.scaleY = ( target.y + _cirH - _centerY ) / ( _cirH * 2 ) * 0.4 + 0.6; target.filters = [ new BlurFilter( ( 1 - target.scaleX ) * _blur , ( 1 - target.scaleY ) * _blur )]; } _sort.sortOn( "y" , Array.NUMERIC ); for ( var j:int = 0; j < num; j ++ ) { target = _sort[ j ]; target.parent.setChildIndex( target , j ); } } public function get angle():Number { return _angle; } public function set angle( value:Number ):void { _angle = value; updata(); } public function get blur():Number { return _blur; } public function set blur(value:Number):void { _blur = value; } } Code Fullscreen Preview Fullscreen s1623 Kay djankey yoshifuto invogue Murai sadamitsu matsumos clockmaker ShutheSL : anaglyph ozguraltay : anaglyphcarouselAnaglyph carousel a440hlz : beautyfl fakestar0826.. : お、さっそく paq : メガネがない! anaglyph beautyfl carousel アナグリフ color scaleY left scaleX getBounds top getRect filter filters blendMode alpha EventDispatcher addEventListener sortOn Array.NUMERIC Rectangle Object width height Boolean sort new page view favorite forked pv99 forked from: Anaglyph studiofiglio forked:0 favorite:0lines:187 (diff:1) pv91 forked from: Anaglyph amakawa forked:0 favorite:0lines:187 (diff:2) pv192 forked from: Anaglyph pakyao forked:0 favorite:1lines:187 (diff:201) pv462 forked from: Anaglyph hacker_zueijity forked:0 favorite:0lines:187 (diff:9)