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: forked from: アナグリフ版: リンゴもどき

ワンダフル本のイベント見て、物凄くテンション上がってしまって。
自分も何かリンゴ作りたくなりました。
で、カージオイドを回転させればリンゴに見えるかなーって思って。

・・・あんまリンゴに見えませんね。
もっとリンゴっぽくしたい!
Get Adobe Flash player
by quisimodo 01 Aug 2013
    Embed
/**
 * Copyright quisimodo ( http://wonderfl.net/user/quisimodo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/h33l
 */

// forked from plankton's forked from: アナグリフ版: リンゴもどき
// forked from umhr's アナグリフ版: リンゴもどき
// forked from sake's リンゴもどき
/*
ワンダフル本のイベント見て、物凄くテンション上がってしまって。
自分も何かリンゴ作りたくなりました。
で、カージオイドを回転させればリンゴに見えるかなーって思って。

・・・あんまリンゴに見えませんね。
もっとリンゴっぽくしたい!
*/
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 ringo extends Sprite{
        private var _red:main;
        private var _blue:main;
        private var _bitmapData:BitmapData;
        public function ringo(){
            _red = new main(-10);
            this.addChild(_red);
            _blue = new main(100);
            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();
        }
        
    }
}

    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.geom.Matrix;
    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(width="465", height="465", backgroundColor="0x000000", frameRate="900")]
    class main extends BasicView
    {
        private var pixels:Pixels;
        private var canvas:BitmapData;
        private var mtx:Matrix;
        private var rotateX:Number;
        private var rotateY:Number;
        
        public function main(dX:Number)
        {
            super(0, 0, true, true);
            
            var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465, 465, true, 0, "clear_pre", true);
            layer.clearBeforeRender=true;
            viewport.containerSprite.addLayer(layer);
            camera.x = dX/60;
            camera.z=-22;
            pixels=new Pixels(layer);
            scene.addChild(pixels);
            
            rotateX=rotateY=0;
            
            // りんごの実の部分(カージオイドの回転体)
            for (var i:uint=0; i <= 1000; i++)
            {
                var theta01:Number=i * Math.PI / 250 * 6;
                var theta02:Number=random() * Math.PI;
                
                var r:Number=(-Math.cos(theta01) - Math.sin(theta01) * Math.cos(theta01)) * 7;
                
                var yy:Number=(-Math.sin(theta01) - Math.sin(theta01) * Math.sin(theta01)) * 7 + 4;
                var xx:Number=r * Math.cos(theta02);
                var zz:Number=r * Math.sin(theta02);
                
                var color:uint=(0xff << 24 | 0xff * random() << 16 | 0xff << 8 | 0xff * random());
                color = ARGBtone(color,4);
                var px:Pixel3D=new Pixel3D(color, xx, yy, zz);
                pixels.addPixel3D(px);
            }
            
            // へたの部分(適当な曲線のグラフを散らしてみる)
            for (var j:Number=0; j <= 2; j+=7.0)
            {
                yy=4 * Math.sqrt(j) + 5;
                color=(0xff << 24 | 0x90 << 16 | 0x98 * random() << 8 | 0x00);
                color = ARGBtone(color,4);
                
                var n:int=0;
                while (n < 10)
                {
                    px=new Pixel3D(color, j * (0.2 * random() + 0.9), yy * (0.2 * random() + 0.9), 0.6 * random() - 0.3);
                    pixels.addPixel3D(px);
                    n++;
                }
            }
            
            // キラキラー
            
            canvas=new BitmapData(465 >> 2, 465 >> 2, false, 0x000000);
            /*
            var bmp:Bitmap=new Bitmap(canvas, "never", true);
            bmp.scaleX=bmp.scaleY=4;
            bmp.smoothing=true;
            bmp.blendMode="add";
            addChild(bmp);
            */
            mtx=new Matrix(0.25, 0, 0, 0.25);
            
            startRendering();
            addEventListener(Event.ENTER_FRAME, onFrame);
        }
        
        private function onFrame(e:Event):void
        {
            canvas.fillRect(canvas.rect, 0x000000);
            canvas.draw(viewport, mtx);
            
            // ローテーション
            rotateX+=(-viewport.containerSprite.mouseX - rotateX) * 0.05;
            rotateY+=(-viewport.containerSprite.mouseY - rotateY) * 0.05;
            pixels.rotationY=rotateX;
            pixels.rotationX=rotateY;
        }
        private function ARGBtone(ARGB:uint, tone:Number):uint {
            var a:int = ARGB >> 24 & 0xff;//16bit右にずらす。 
            var r:int = ARGB >> 16 & 0xff;//16bit右にずらす。 
            var g:int = ARGB >> 8 & 0xff;//8bit右にずらして、下位8bitのみを取り出す 
            var b:int = ARGB & 0xff;//下位8bitのみを取り出す
            r  = Math.min(r * tone,0xFF);
            g  = Math.min(g * tone,0xFF);
            b  = Math.min(b * tone,0xFF);
            a = a << 24;
            r = r << 16;
            g = g << 8;
            return a+r+g+b;
        }

        private var num:Number = 1;
        public function random():Number{
            num = (num*1664525+1013904223)%0x100000000;
            return num/0x100000000;
        }
    }