forked from: Away3D Material

by aaharu forked from Away3D Material (diff: 137)
Away3DでBitmapMaterialにワイヤーフレームを表示すりにはどうすればいいか、ソースコード覗いてたら、
materialのdebugをtrueにするのが一番手っ取り早いのね。

ライブラリの中身書き換えてもできるだろうけど、すこしめんどくさい。
♥0 | Line 83 | Modified 2010-11-27 04:56:58 | MIT License
play

ActionScript3 source code

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

// forked from aaharu's Away3D Material
/*
Away3DでBitmapMaterialにワイヤーフレームを表示すりにはどうすればいいか、ソースコード覗いてたら、
materialのdebugをtrueにするのが一番手っ取り早いのね。

ライブラリの中身書き換えてもできるだろうけど、すこしめんどくさい。
*/

package {
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import away3d.cameras.HoverCamera3D;
    import away3d.containers.Scene3D;
    import away3d.containers.View3D;
    import away3d.events.MouseEvent3D;
    import away3d.lights.DirectionalLight3D;
    import away3d.materials.BitmapMaterial;
    import away3d.primitives.Sphere;
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    public class Main extends Sprite {
        private var scene:Scene3D;
        private var camera:HoverCamera3D;
        private var view:View3D;
        // ライト
        private var light:DirectionalLight3D;
        private var isMouseDown:Boolean = false;
        // カメラ移動用変数
        private var lastPanAngle:Number;
        private var lastTiltAngle:Number;
        private var lastMouseX:Number;
        private var lastMouseY:Number;
        
        private var sphere:Sphere;
        
        /**
         * constructor
         */
        public function Main() {
            if(stage) {
                initEngine();
            } else {
                addEventListener(Event.ADDED_TO_STAGE, onAdded);
            }
        }
        
        private function onAdded(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);
            initEngine();
        }
        
        private function initEngine():void {
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
            stage.addEventListener(Event.RESIZE, onResize);
            
            scene = new Scene3D();
            // カメラ初期設定
            camera = new HoverCamera3D();
            camera.zoom = 2;
            camera.focus = 200;
            camera.distance = 150;
            camera.minTiltAngle = -90;
            camera.panAngle = -10;
            camera.tiltAngle = 20;
            
            view = new View3D({camera: camera, scene: scene, stats: true, x: stage.stageWidth / 2, y: stage.stageHeight / 2});
            addChild(view);
            LoadModel();
        }
        
        private function LoadModel():void {
            sphere = new Sphere();
            var material:BitmapMaterial = new BitmapMaterial(new BitmapData(100, 100, true, 0xffff00ff));
            material.debug = true;
            sphere.material = material;
            scene.addChild(sphere);
        }
        
        private function onEnterFrame(e:Event):void {
            if(isMouseDown) {
                camera.panAngle = 0.35 * (stage.mouseX - lastMouseX) + lastPanAngle;
                camera.tiltAngle = 0.35 * (stage.mouseY - lastMouseY) + lastTiltAngle;
            }
            camera.hover();
            view.render();
        }
        
        private function onResize(event:Event = null):void {
            view.x = stage.stageWidth / 2;
            view.y = stage.stageHeight / 2;
        }
        
        private function onMouseDown(e:MouseEvent):void {
            lastPanAngle = camera.panAngle;
            lastTiltAngle = camera.tiltAngle;
            lastMouseX = stage.mouseX;
            lastMouseY = stage.mouseY;
            isMouseDown = true;
        }
        
        private function onMouseUp(e:MouseEvent):void {
            isMouseDown = false;
        }
    }
}