forked from: 朝ワンの方へ

by tepe forked from 朝ワンの方へ (diff: 14)
♥0 | Line 42 | Modified 2011-05-23 23:27:34 | MIT License
play

ActionScript3 source code

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

// forked from clockmaker's 朝ワンの方へ
package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.system.*;
    
    import org.papervision3d.lights.PointLight3D;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.shaders.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.view.BasicView;
    
    [SWF(width=465, height=465, frameRate=60)]

    public class AsaWon extends BasicView {
        
        static private const IMAGE_URL:String = 
            "http://clockmaker.jp/labs/090701_wonda/wonderfl.jpg";//テクスチャ
        
        private var rot:Number = 0 // 角度
        private var cylinder:Cylinder;
        private var loader:Loader = new Loader();
        private var light:PointLight3D = new PointLight3D();
        
        public function AsaWon() {
            //stage.quality = "medium"
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, init);//ロード完了イベント追加
            loader.load(new URLRequest(IMAGE_URL), new LoaderContext(true));//ロード
        }
        
        //ロード完了後
        public function init(e:Event):void {
            
            // 球面のポリゴンに貼り付けるテクスチャ(フラットポリゴンを使用)を作成します
            var fileMat:BitmapMaterial = new BitmapMaterial(Bitmap(loader.content).bitmapData);
            var shader:GouraudShader = new GouraudShader(light, 0xFFFFFF, 0x0);
            var shadedMat:ShadedMaterial = new ShadedMaterial(fileMat, shader);//マテリアル
            // (マテリアル,幅,高さ,横分割数,縦分割数)
            cylinder = new Cylinder(shadedMat, 250, 800, 20, 10);//ポリゴン
            scene.addChild(cylinder);
            
            startRendering();
        }
        
        
        override protected function onRenderTick(event:Event=null):void {
            // マウスの位置に応じて角度を設定
            var targetRot:Number = ( mouseX / stage.stageWidth ) * 720
            rot += (targetRot - rot) * 0.02;
            
            // 角度に応じてカメラの位置を設定
            camera.x = 1000 * Math.sin(rot * Math.PI / 180);
            camera.z = 1000 * Math.cos(rot * Math.PI / 180);
            camera.y += (800 * mouseY / stage.stageHeight - 400 - camera.y) * 0.1;
            
            //回転
            //cylinder.yaw(1)
            //cylinder.pitch(1);
            cylinder.roll(1);
            
            // 常にカメラの位置にライトを設置する
            light.copyPosition(camera);
            
            super.onRenderTick(event);
        }
        
    }
}