forked from: flash on 2010-12-2

by shapevent
♥0 | Line 65 | Modified 2010-12-06 10:13:44 | MIT License
play

ActionScript3 source code

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

// forked from starlizhi's flash on 2010-12-2
package {
    import away3d.cameras.HoverCamera3D;
    import away3d.containers.ObjectContainer3D;
    import away3d.containers.View3D;
    import away3d.core.base.Face;
    import away3d.core.base.Mesh;
    import away3d.core.base.Vertex;
    import flash.display.Sprite;
    import flash.events.Event;
    
    /**
     * help me. why sort wrong?
     */
    public class Test1 extends Sprite {
        private var view:View3D;
        private var mesh:Mesh;
        private var obj:ObjectContainer3D;

        public function Test1(){
            view = new View3D();
            view.x = stage.stageWidth / 2;
            view.y = stage.stageHeight / 2;
            addChild(view);
            obj = new ObjectContainer3D();
            mesh = new Mesh();
            obj.addChild(mesh);
            var data:Array = [[[0, 0], [0, 1]], [[0, 1], [1, 0]], [[1, 0], [0, 0]]];
            for each (var l:Array in data){
                var p1:Array = l[0];
                var p2:Array = l[1];
                addFace(p1, p2);
            }
            mesh.bothsides = true;
            mesh.x = -mesh.objectWidth / 2;
            mesh.y = -mesh.objectHeight / 2;
            mesh.z = -mesh.objectDepth / 2;
            view.scene.addChild(obj);
            addEventListener(Event.ENTER_FRAME, update);
            
            camera = new HoverCamera3D();
            camera.distance = 1000;
            camera.tiltAngle = 10;
            camera.panAngle = 180;
            view.camera = camera;
        }

        private var vs:Array = [];
        private var camera:HoverCamera3D;

        private function addFace(p1:Array, p2:Array):void {

            var cellW:Number = 100;
            var cellH:Number = 100;
            mesh.addFace(new Face(getV(p1[0] * cellW, 0, p1[1] * cellW), getV(p1[0] * cellW, cellH, p1[1] * cellW), getV(p2[0] * cellW, 0, p2[1] * cellW)));
            mesh.addFace(new Face(getV(p2[0] * cellW, 0, p2[1] * cellW), getV(p1[0] * cellW, cellH, p1[1] * cellW), getV(p2[0] * cellW, cellH, p2[1] * cellW)));
        }

        public function getV(x:Number, y:Number, z:Number):Vertex {
            for each (var v:Vertex in vs){
                if (v.x == x && v.y == y && v.z == z){
                    return v;
                }
            }
            v = new Vertex(x, y, z);
            vs.push(v);
            return v;
        }

        private function update(e:Event):void {
            view.render();
            camera.panAngle = (stage.mouseX - stage.stageWidth / 2) / 5;
            camera.tiltAngle = (stage.mouseY - stage.stageHeight / 2) / 5;
            camera.hover();
        }

    }

}