天天看點

Flash 顯示全景圖

Papervision3D基本原理

Papervision3D

PV3D是一個開源的遵循MIT協定的使用AS3代碼寫成的3D引擎。這篇文章旨在教會各位如何使用PV3D完成一個HELLOWORD式的3D程式,同時也是這篇教程的最近更新。PV3D2.0 Alpha(也稱GW)對于初學者來說使用PV3D最大的障礙在于如何安裝PV3D,由于對版本控制軟體不熟是造成無法完成PV3D安裝的主要原因,第一部分的三節闡述了這個問題,但是不是這篇文章的主要内容,如果你對版本控制軟體不熟悉的話,那麼你可以看看這部分。

【筆者注:】安裝PV3D完全沒有必要使用版本控制軟體,PV3D說白了就是一個FLEX的庫,如果你知道如何在FLEX中使用和導入庫,那麼你完全沒有必要使用版本控制軟體,筆者的做法是到GOOGLE CODE網站去下載下傳一個ZIP包,軟後解壓縮到一個檔案夾,将該檔案夾包含在我的項目的庫目錄中就可以了,至于說更新,那麼重新下載下傳一個就搞定了。

       再者版本控制軟體的使用教程,網上多如牛毛,我在這裡也就不再累述了。第一節的三個部分都不做翻譯,在譯文中直接略去,望大家諒解

省略PV3D安裝部分。

Papervision3D at the following link then skip to the “Foundation of Papervision3D” section:

·   Revision 435: /trunk/branches/GreatWhite/src

If you don’t know what to do with that link, then continue on reading the links in the first three sections.

Download

First, you need to download Papervision3D using subversion. Follow the instructions at either of these sites:

·   How Can I Download Papervision3D?

·   Downloading Papervision3D Alpha Great White

Classpath類路徑

:為PV3D設定一個源代碼檔案夾

·   如果使用的是Flash:

·   關于如何設定和修改源檔案路徑

·   如果使用的是FLEX:

·   準備一個PV3D的項目

Document Class檔案類

Create a document class to hold the required ActionScript:建立一個源檔案

·    如果使用的是Flash:

·   使用AS3.0建立一個新的文檔類

·   Using Flex: 如果使用的是FLEX:

·   建立一個新的AS工程

·   使用FLASHDEVELOP 內建環境

·   建立一個PV3D項目

Foundation of Papervision3D PV3D基礎

.我盡量使得代碼看起來簡單以适應那些新上手AS3.0的使用者,但是我還是要假定你們知道類的基礎,如何寫方法,如何執行個體化對象等等,如果還不懂得這些的話,那麼你可以參看OREILY的AS3.0程式設計基礎一書,對你非常有幫助,當我執行個體化對象的時候,我同時還假定了你自己會去導入那些我遺漏的包。

每個Papervision3D程式都要依賴于4個類,Viewport3D, Scene3D, Camera3D ,和BasicRenderEngine. 

先看一下,下面就是經典的papervision3D程式格式:

package{ 

import flash.display.Sprite; 

import org.papervision3d.cameras.Camera3D; 

import org.papervision3d.render.BasicRenderEngine; 

import org.papervision3d.scenes.Scene3D; 

import org.papervision3d.view.Viewport3D; 

public class Main extends Sprite{ 

private var viewport:Viewport3D; 

private var scene:Scene3D; 

private var camera:Camera3D; 

private var renderer:BasicRenderEngine; 

public function Main(){ 

initPapervision3D(); 

private function initPapervision3D():void{ 

viewport = new Viewport3D(); 

addChild(viewport); 

scene = new Scene3D(); 

camera = new Camera3D(); 

renderer = new BasicRenderEngine(); 

renderer.renderScene(scene, camera, viewport); 

}

Viewport3D:(3D視窗)

Viewport3D就象是papervision3D世界中的一個視窗.視窗允許你看到外面,但他們沒提供其它函數.你可以定位一個視窗在牆上,改變它的寬度和高度,同樣的道理也存在于Viewport3D上,你可以改變Viewport3D的x,y,width,height.,它的功能就是在它裡面放一個3D場景.要使用Viewport3D,建立它并将它放在舞台上. 

private var viewport:Viewport3D = new Viewport3D(); 

檢視下面的Viewport3D的省缺參數,你可以根據自已的喜好來調節. 

Viewport3D(viewportWidth:Number = 640, viewportHeight:Number = 480, 

autoScaleToStage:Boolean = false, interactive:Boolean = false, 

autoClipping:Boolean = true, autoCulling:Boolean = true)

Scene3D:(3D場景)

繼續使用視窗的比喻,一個Scene3D将包含你通過視窗看到的所有東西.地面,天空及之間的所有東西.然而,這個Scene3D仍然是一個空的3D空間,你不得不添加地面,天空,樹等到你的Scene3D.下面建立了一個Scene3D. 

private var scene:Scene3D = new Scene3D();

Camera3D(3D照相機)

一個視窗和窗外的世界是漂亮的, 但如果沒有一個人來興賞它們的漂亮則毫無意義.你很幸運,Papervision3D開發者建立了照相機,捕獲這一切的動作.一個Camera3D允許你根據你想捕獲的動作設定其x,y,z屬性.想象一下第一人稱的槍和飛行模似器.(一個三維遊戲,譯者注).你移動你的角色圍繞周圍的空間調整目前的位置. 同樣的主意也可用于Camera3D,你可以在整個場景移動相機調節目前位置.