2011年7月26日 星期二

web 3D學習

在網路上有HTML5 webGL跟Unity 3D還有Flash 3D可以開發3D遊戲

不過因為自己是在開發flash遊戲,所以就先找了一套Papervision3D來玩看看

PV3D網路上的資原其實中文的不多,也有人提到PV3D很久沒更新了,不過也許哪天還會再更新也說不一定

 二話不說,直接貼原始碼這樣比較快~XD

 以下原始碼部份轉載自http://milkmidi.blogspot.com/ 奶綠茶大的原始碼
/*******************************************************************************************************

 package{
    //Flash類別
    import flash.display.*;   
    import flash.events.*;
    import flash.utils.getTimer;
    //PV3D類別
    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.scenes.Scene3D;
    import org.papervision3d.objects.*;
    import org.papervision3d.materials.*;
    import org.papervision3d.objects.DisplayObject3D;   
    //匯入材質色彩材質
    import org.papervision3d.materials.ColorMaterial;
    //容器類別
    import org.papervision3d.objects.primitives.Plane;
    //匯入BasicView類別,PV3D的整合型視窗類別,包含(scene)場景,(camera)攝影機,(Render)3D算圖引擎,(viewport3D)目前可視視窗
    import org.papervision3d.view.BasicView;   

    public class Pv3dTest1 extends MovieClip {
        //Pv3dTest1類別, 繼承MovieClip。
        private var view:BasicView;
        /**
        * 宣告view變數為BasicView物件。
        * BasicView是繼承Sprite物件,可被加入至顯示物件容器裡。
                */   
                /**
                * 建構函式  
                */
        public function Pv3dTest1():void{                     
            //執行PV3D baseView初始化
            init3D();
            //執行PV3D物件初始化
            init3DObject();           
        }
        /**
        *init3D函式,建構BasicView物件、設定Camera參數
        */
        private function init3D():void{          
            /**
            * 建構BasicView物件
            * 參數值(viewport寬度, viewport高度, 是否自動對齊場景中間, 是否開啟滑鼠感應功能,camera類別)
            * PV3D的Camera有二種,
            * Target:目標Camera,不論鏡頭怎麼移動,永遠看著目標點。
            * Free:自由Camera,可以任意的移動和旋轉鏡頭。
            * viewport寬度和viewport高度設定為0的話,表示寬高是跟著整個場景的大小。
            */
            view = new BasicView(0, 0, true, true, "Target");    
           
            /**           
            * 設定攝影機Y坐標
            */
            view.camera.y = 100;
           
            //將view加入至目前的顯示物件容器
            this.addChild(view); 
           //監聽ENTER_FRAME事件,PV3D是靠ENTER_FRAME事件作3D算圖計算
            this.addEventListener(Event.ENTER_FRAME, onEventRender3D);
           
        }
        /**
        *init3DObject函式,用來建立PV3D物件、材質及偵聽事件
        */
        private function init3DObject():void{
            //建立色彩材質
            var colorMat:ColorMaterial = new ColorMaterial(0x223344);
            //建立Plane平面物件
            for (var i:int = 0; i < 5; i++) {
                    /**
                    * 建立Plane平面物件
                    * 參數說明:Plane(色彩材質,寬,高)
                    */
                var plane:Plane = new Plane(colorMat, 200, 200);
                plane.x = (i - 2) * 250;
                //將物件加入場景
                view.scene.addChild(plane);
            }
        }
        /**
        *onEventRender3D函式,偵聽影格事件
        */
        private function onEventRender3D(e:Event):void { 
                //將攝影機X坐標左右擺動
            view.camera.x = Math.sin(getTimer() / 1000) * 500;
            //Render view物件
            view.singleRender();
           
        }       
    }
}

沒有留言:

張貼留言