forked from: [Blender][Papervision3D]

by hakerlab forked from [Blender][Papervision3D] (diff: 1)
♥0 | Line 94 | Modified 2015-10-20 19:39:54 | MIT License
play

ActionScript3 source code

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

// forked from romatica's [Blender][Papervision3D]
package {
    /*
    title   : [blenderの練習]
    @author :  itoz 
    
    ドラッグでrotationYが変わるよ
    colladaの読み込みイベント
    colladaテクスチャの読み込みイベントを取得しているけど特に何をしているわけでもないよ
    
    右腰のあたりに変なメッシュが残ってしまった
    次回はこれにアニメーションつけてみる
    
    */
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.view.Viewport3D;
    import org.papervision3d.render.BasicRenderEngine;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.objects.DisplayObject3D;
    import org.papervision3d.events.FileLoadEvent;
    import org.papervision3d.objects.parsers.Collada;
    import caurina.transitions.Tweener;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.display.Stage;
    public class AmazonSan extends Sprite {
            private var _scene:Scene3D;
        private var _camera:Camera3D;
        private var _viewport:Viewport3D;
        private var _render:BasicRenderEngine;
        private var _collada:Collada;
        private var _wrap:DisplayObject3D;
        private var mouseDownX:Number;
        private var mouseDownY:Number;;
        private var isDragging:Boolean = false;
        public function AmazonSan() {
            setCamera();
            _render = new BasicRenderEngine();
            _scene = new Scene3D();
            _viewport = new Viewport3D(0,0,true,true);
            addChild(_viewport);
            _wrap = new DisplayObject3D();
            _wrap.y=-550;
            _scene.addChild(_wrap);
            init()
        }
        private function init():void {
            addEventListener(Event.ENTER_FRAME,render);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownHandler);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);
            addCollada();
        }
        private function onMouseMoveHandler(e:MouseEvent):void {
            var xx:Number = (mouseX - mouseDownX);
            if (isDragging) {
                _wrap.rotationY -=xx;
                mouseDownX = mouseX;
                mouseDownY = mouseY;
            }
        }
        private function onMouseDownHandler(e:MouseEvent) :void {
            isDragging =true;
            mouseDownX = mouseX;
            mouseDownY = mouseY;

        }
        private function onMouseUpHandler(e:MouseEvent) :void {
            isDragging =false;
        }
        private function setCamera() :void {
            _camera = new Camera3D();
            _camera.x=550;
            _camera.y=0;
            _camera.z = -1500;
            _camera.target = DisplayObject3D.ZERO;
        }
        private function addCollada() :void {
            _collada = new Collada();
            //COLLADA読み込みイベント
            _collada.addEventListener( FileLoadEvent.LOAD_COMPLETE, onColladaLoadComplete );
            _collada.addEventListener( FileLoadEvent.LOAD_PROGRESS, onColladaLoadProgress);
            _collada.addEventListener( FileLoadEvent.LOAD_ERROR, onColladaLoadError );
            //テクスチャ読み込みイベント
            _collada.addEventListener( FileLoadEvent.COLLADA_MATERIALS_DONE,onTextureLoadComplete);
            //読み込み開始
            _collada.load("http://www.romatica.com/work/amazon-san/AmazonCollada.dae");
            //-----------------------------------------------------------------------------------------
            _wrap.addChild(_collada);
        }
        //------------------------------------------------------------------------------------------
        //COLLADAテクスチャ読み込みイベント完了
        private function onTextureLoadComplete(e):void  {
            //trace("★"+e);
        }
        //------------------------------------------------------------------------------------------
        //COLLADA読み込みイベント
        private function onColladaLoadProgress(e:Event) :void {
            //trace("onColladaLoadProgress >" + e.bytesLoaded +"/"+e.bytesTotal);
        }
        private function onColladaLoadComplete(e:FileLoadEvent) :void {
            //trace("onColladaLoadComplete >" + e);
        }
        private function onColladaLoadError(e:FileLoadEvent) :void {
            //trace("onColladaLoadError >" + e);
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////////
        //
        // レンダリング
        //
        private function render(e:Event) :void {
            if (!isDragging) {
                motionDO3D();
            }
            _camera.y= (mouseY/stage.stageHeight)*3000-1500
            _render.renderScene(_scene,_camera,_viewport);
        }
        private function motionDO3D():void {
            _wrap.rotationY -=1;
        }
    }
}