ActionScript3的3D引擎 - Papervision3D

fmms 12年前發布 | 35K 次閱讀 圖形/圖像處理 Papervision3D

    Papervision3D是一個基于ActionScript的開源項目,目的在于實現更加炫麗美觀、功能強大的Flash 3D Web應用程序。尤其是去年ActionScript 3發布了之后,ActionScript的效率得到了大幅度提升,基于此的Papervision3D無論是在效率、功能上都有了很大的提高。隨著現在Web 2.0、Web-Game及休閑類競技網絡游戲的發展,相信Papervision3D的應用將會越來越廣泛。
  同時在Flash 大量應用的今天,Flash在 3D領域的應用相對貧乏,但是如果能在Flash Player中播放,體積小,與用戶交互能力強,效果逼真的3D web應用程序,無疑將給用戶帶來全新的體驗。
  資料:
  主頁:http://www.papervision3d.org
  Google code:http://code.google.com/p/papervision3d/
  Google code SVN:http://papervision3d.googlecode.com/svn/trunk/ 
       PV3D的大量例子:http://blog.davr.org/pv3d-examples/

以下是一篇: 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();
addChild(viewport);
查看下面的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,你可以在整個場景移動相機調節當前位置.

Papervision3D提供三個照相機來實現不同的功能.

Camera3D:需要一個看著的目標,無論在任何位置都看著這個目標.

FreeCamera3D:在3D空間的每一個角度和方向自由移動.包含的方法如:yaw(), pitch(), and roll()來調節相機的視角,而moveForward(), moveBackward(); moveLeft(), moveRight(), moveUp(), and moveDown() 基于視覺調整相機的位置.例如,你將相機放到一個站立的人面前,然后調用moveBackward(),你將移動并遠離人的臉.另一方面,如果你將相機定位到人的頭上,調用 pitch()向下傾斜看到人的頭發,然后調用moveBackward()方法,你將遠離人的頭發到天空中去.
FrustumCamera3D:象FreeCamera3D一樣的移動,但只能是視窗中提供的對象,你可以調節遠距離和近距離.

BasicRenderEngine
在papervision3D世界中你是神.你可以隨心所欲地開始和停止引擎.BasicRenderEngine通過你選擇的Viewport3D中Camera3D的位置的Scene3D.
private var renderer:BasicRenderEngine = new BasicRenderEngine();
//通常在場景的 Event.ENTER_FRAME 事件中
renderer.renderScene( scene, camera,
viewport );
即使你有多個場景,視窗或照相機,你也只需用一個BasicRenderEngine來渲染3D效果:
//A snippet of multiple scenes, cameras, and viewport handled by one
renderer renderer.renderScene( scene, camera, viewport );
renderer.renderScene( scene2, camera2, viewport2 );

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!