Away3D 4 Line3D

by bradsedito
♥0 | Line 73 | Modified 2012-04-19 02:48:08 | MIT License
play

ActionScript3 source code

/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/dGgQ
 */

package {
    import away3d.arcane;
    import away3d.cameras.lenses.PerspectiveLens;
    import away3d.containers.View3D;
    import away3d.debug.AwayStats;
    import away3d.entities.SegmentSet;
    import away3d.primitives.WireframeAxesGrid;
    import away3d.primitives.LineSegment;
    import away3d.materials.ColorMaterial;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.geom.Vector3D;

    use namespace arcane; 

    [SWF(width="700", height="700", frameRate="60")]

    public class MainLine extends Sprite {

        private var _count : Number = 0;
        private var view: View3D;
        private var grid : WireframeAxesGrid;
        private var lines : SegmentSet;

        private var distance : Number;
        private var lastVector : Vector3D;
        private var lastColor : Number;
        private var nextVector : Vector3D;
        private var newColor : Number;
        private var tempColor : Number;

        public function MainLine() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            setupView3D();

            lines=new SegmentSet();
            view.scene.addChild(lines);
            grid=new  WireframeAxesGrid(10,500,.25,0x666666,0x666666,0x666666);
            view.scene.addChild(grid);

            lastVector=new Vector3D(Math.sin(_count) *distance,Math.sin(_count * .54) * distance,Math.cos(_count) *distance);
            lastColor=0;

        }

        private function setupView3D() : void {
            view = new View3D();
            view.width=1000;
            view.height=700;
            view.antiAlias = 2;
            view.backgroundColor = 0x333333;
            view.camera.z = -1500;
            view.camera.y = 1000;
            view.camera.x = -1500;
            view.camera.lookAt(new Vector3D(0, 150, 0));
            view.camera.lens.near=.02;
            view.camera.lens.far=500000;
            (view.camera.lens as PerspectiveLens).fieldOfView=45;

            addChild(view);
            /*addChild(new AwayStats(view));
            var sign:SignAway=new SignAway();sign.y=700-280;
            addChild(sign);*/
            addEventListener(Event.ENTER_FRAME, _handleEnterFrame);

        }

        private function _handleEnterFrame(ev : Event) : void {

            _count += .1;
            if(_count<350){
                distance=500*Math.sin(_count/10)-250;
                tempColor=(Math.abs(distance)/250)/3*0xFF;
                nextVector=new Vector3D(Math.sin(_count)*distance,Math.sin(_count*.48 ) * distance,Math.cos(_count) *distance);
                newColor= tempColor << 16 | tempColor*.7 << 8 | 0;
                lines.addSegment(new LineSegment(lastVector, nextVector,lastColor,newColor,2+tempColor/100));
                lastVector=nextVector;
                lastColor=newColor;
            }
            view.camera.x = Math.sin(_count*.05) * 2000;
            view.camera.y = 900;
            view.camera.z = Math.cos(_count*.05 ) * 2000;
            view.camera.lookAt(new Vector3D(0, 0, 0));
            view.render();
        }
    }
}