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

Dummy3D camera / なんつって3D

ただ単に映像から赤フィルタと青フィルタを取得してずらしてるだけなので、
正確な3D画像の作り方ではありませんが。。
3Dメガネを持ってる人は試してみて下さい!僕は案外3Dに見えましたが個人差あると思います。

それぞれのフィルタに両目の間隔分の傾きを与えてやれば1つのカメラから疑似2点撮影みたいにいけるんじゃないかと思ってるのですが、まだ試せてません。
Get Adobe Flash player
by rettuce 10 Nov 2010
/**
 * Copyright rettuce ( http://wonderfl.net/user/rettuce )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/1G0D
 */

package 

{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BitmapDataChannel;
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.ColorMatrixFilter;
    import flash.filters.ConvolutionFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.utils.ByteArray;
    import flash.media.Camera;
    import flash.media.Video;
    
    [SWF(width = 465, height = 465, backgroundColor = 0x000000, frameRate = 30)]
    /**
     * ...
     * @author rettuce
     */
    public class DocumentClass extends Sprite 
    {
        private var _bm:Bitmap;
        private var _bmd:BitmapData;
        private var _bmB:Bitmap;
        private var _bmdB:BitmapData;
        private var _video:Video;        
        
        public function DocumentClass()
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);        
        }
        
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            imageProcessing();
        }
        
        private function imageProcessing():void
        {
            _bmd = new BitmapData(stage.stageWidth, stage.stageHeight);
            _bmdB = new BitmapData(stage.stageWidth, stage.stageHeight);            

            _bm = new Bitmap(R_filter(_bmd));
            _bmB = new Bitmap(B_filter(_bmdB));
          
            _bm.x += 3;
            _bmB.x -= 3;            

            _bm.alpha = 0.5;
            _bmB.alpha = 1;            

            addChildAt(_bm, 0);
            addChildAt(_bmB, 0);            
            cameraSet();
        }        

        // Rフィルター
        public function R_filter(s:BitmapData):BitmapData {
            var d:BitmapData = new BitmapData(s.width, s.height, true, 0xff000000);
            d.copyChannel( s, s.rect, new Point(), 1, 1 );
            return d;
        }
        // Gフィルター
        public function G_filter(s:BitmapData):BitmapData {
            var d:BitmapData = new BitmapData(s.width, s.height, true, 0xff000000);
            d.copyChannel( s, s.rect, new Point(), 2, 2 );
            return d;
        }
        // Bフィルター
        public function B_filter(s:BitmapData):BitmapData {
            var d:BitmapData = new BitmapData(s.width, s.height, true, 0xff000000);
            d.copyChannel( s, s.rect, new Point(), 4, 4 );    
            return d;
        }
        
        // camera
        private function cameraSet():void
        {
            var camera:Camera = Camera.getCamera();
            if (camera == null) {
                // カメラが存在しない
                var txt : TextField = new TextField();
                txt.textColor = 0xFFFFFF;
                txt.text = 'カメラが認識できません';
                addChild(txt);
                return;
            } else {
                // カメラの設定
                camera.setMode(stage.stageWidth, stage.stageHeight, 30);
                _video = new Video(camera.width, camera.height);
                // videoにアタッチ
                _video.attachCamera(camera);
                // 表示オブジェクトに追加
                addEventListener(Event.ENTER_FRAME, function(e:Event):void { 
                    _bm.bitmapData.lock();
                    _bmd.draw(_video);
                    _bm.bitmapData = R_filter(_bmd);
                    _bm.bitmapData.unlock();
                    
                    _bmB.bitmapData.lock();
                    _bmdB.draw(_video);
                    _bmB.bitmapData = B_filter(_bmdB);
                    _bmB.bitmapData.unlock();
                } );
            }
        }
        
    }
}