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: forked from: forked from: [PV3D] Field of Blur

Papervision3Dで被写界深度
* 参照: http://clockmaker.jp/blog/2008/07/pv3d_gw_blur/
Get Adobe Flash player
by aksoft 01 Jul 2010
    Embed
/**
 * Copyright aksoft ( http://wonderfl.net/user/aksoft )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/eOo4
 */

// forked from aksoft's forked from: forked from: forked from: [PV3D] Field of Blur
// forked from sw_lucchini's forked from: forked from: [PV3D] Field of Blur
// forked from sw_lucchini's forked from: [PV3D] Field of Blur
// forked from clockmaker's [PV3D] Field of Blur
/**
* Papervision3Dで被写界深度
* 参照: http://clockmaker.jp/blog/2008/07/pv3d_gw_blur/
*/
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.filters.*;
    
    import caurina.transitions.Tweener;
    
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.objects.primitives.*
    import org.papervision3d.core.effects.view.ReflectionView;
    
        [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#000000")]
    
    public class Main extends ReflectionView 
    {    
        // const vars
        static private const OBJ_LENGTH   :int = 10;
        static private const CIRCLE_RANGE :int = 1000;
        
        // 3d vars
        private var list :Array = []
        private var wrap :DisplayObject3D;
        
        private var num:int;
        private var rot:Number;

        /**
         * Constructor
         */
        public function Main()
        {
            //camera
            camera.x         = 0;
            camera.y         = 0;
            camera.z         = 0;
            camera.rotationX = 0;
            
            surfaceHeight = -100;
            viewportReflection.alpha = 0.7;
            viewportReflection.filters = [new BlurFilter(8, 8, 3)];
            
            // wrap
            wrap = new DisplayObject3D();
            scene.addChild(wrap);
            
            for (var i:int = 0; i < OBJ_LENGTH; i++)
            {
                var rot:Number = 90 * i / OBJ_LENGTH ;
                
                var m:ColorMaterial = new ColorMaterial(0x0066CC);
                m.doubleSided = true;
                
                var o:Plane = new Plane(m, 100 , 100);
                o.x = -80;
                o.y = 0;
                o.z = CIRCLE_RANGE * Math.cos(rot * Math.PI / 180);
                o.rotationY = 90;
                o.useOwnContainer = true; //ココ重要
                
                                // 配列に追加 & wrapの子供にする
                list.push(wrap.addChild(o));
            }
            
            stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyHandler);
            addEventListener(Event.ENTER_FRAME, loop);
        }
        
        private function KeyHandler(e:KeyboardEvent):void
        {
            switch(e.keyCode){
                case 40:
                camera.z-1;
                case 38:
                rot = ++num;
                Tweener.addTween(wrap,{
                    rotationZ:  rot,
                    time:        1,
                    transition: "liner"
                });
                break;
                    
                case 37:
                rot = ++num;
                Tweener.addTween(wrap,{
                    rotationY:  rot,
                    time:        1,
                    transition: "liner"
                });
                break;
                case 39:
                rot = --num;
                Tweener.addTween(wrap,{
                    rotationY:  rot, 
                    time:        1,
                    transition: "liner"
                });
                break;
            }
        }
        
        // loop
        private function loop(event:Event):void
        {
            singleRender();
                        
                        // 被写界深度
            for (var i:int = 0; i < list.length; i++)
            {
                var o:DisplayObject3D = list[i] as DisplayObject3D;
                var blur:Number = Math.ceil((CIRCLE_RANGE - o.sceneZ) / 100); 
                //o.filters = [new BlurFilter(blur, blur, 2)];
            }
        }
    }
}