不過因為自己是在開發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();
}
}
}
沒有留言:
張貼留言