Egret3D 研究報告(一)初試

瘋光無線發表於2016-01-08

 

瞭解的朋友應該知道我最近一直都在鼓吹webgl.

今天有一點時間,加了一個Egret3D的群,就開始了這個坑。

耳聽為虛,眼見為實。讓我們蕩起雙槳,一起去刷一下egret

開啟姿勢

至於以什麼姿勢開啟,就讓我用截圖來解釋吧。

由於我是vs重度愛好者,egretWing用起來實在是苦不堪言,於是我又安裝了

基本的姿勢問題,請詢Egret各種社群,我們就來談一談程式碼。

Egret3D基本概念

第一眼看到的程式碼是這樣的,我勒個擦,讓建構函式直接解決問題,這如果是我的兄弟,已經可以領辭退補助了。

不談審美與愛好的問題,這個我們下一步會實際動手改一改,然我們看一下egret3D怎麼玩。

Egret3DDrive.requestContext3D是真正的入口。

提供視口引數,初始化webgl物件,然後回撥。(這種東西寫在構造裡我依然看不下去)

 

然後初始化一個view3D物件,view3D物件差不多就是一個場景的概念。

場景的組織也使用場景圖的概念,view3d下面的節點可以組成一棵樹。

 

Cameracontroller這東西不屬於很核心的程式碼,不理他也沒所謂。就是一個控制攝像機轉頭的滑鼠操作。反正是update驅動的。實際專案開發中面對各種各樣的需求,不太會直接套用這個,把他作為一個示例就可以了。

 

然後view3D.renden 就行了(喂,確認不是拼錯了麼,應該是render吧)

 

然後就是最最常規的update驅動。(幀驅動,主迴圈,不太清楚的同學可以參考博主的c#入門文字)

 

Egret3D的場景樹

 

有這個view3D,就可以構成一個場景樹,既然是場景樹結構,那我們來看看他的結點構成

和Unity的場景樹單一結點型別,但是關聯到GameObject可以用元件聚合改變場景結點功能的設計不同。

其實unity這種設計現在的引擎用的比較多。

Egret3d使用一個更古老的設計方法,結點多型。

結點基類是

每個Object3D下面都可以再掛n個位元組點。

 

然後有五個型別繼承自他

分別是

1.billboard(朝向攝像機的面片)

2.Entity(一個空節點,設計意圖不明)

3.Mesh(模型結點)

4. 攝像機

5. 燈光們

因為此時還沒有官方文件,原諒我直接看原始碼

Egret3D的資源管理

Egret3D設計了AssetsManager,但是擴充套件性並不強,沒有提供統一的二進位制和字串資源下載方式。

設計了三種格式 ESM, EAM, ECA,分別是模型,動畫模型,攝像機動畫,但是未見諸文件。

最關鍵的場景圖,居然沒有設計存取格式。

 

小結

Egret3D還處於一個比較早期的階段,基礎建築尚不成熟。

  1. 存在renden這樣的拼寫錯誤
  2. 沒有文件
  3. 資源管理不完善,沒有提供統一的二進位制資源和字串資源下載方式,不易擴充套件
  4. 場景節點沒有預留擴充套件性,連一個userdata:any 都沒留
  5. 天空盒初始化介面不統一,資源不來自TextureLoader

從設計上還是模仿as3的介面設計,但是畢竟是中國人在建設的開源引擎。

從感情上我更願意幫助egret3d去建設,更勝於使用相對成熟的babylon.js.

這個blog系列的後續部分我們會一點一滴的去改善和建設Egret3D。

 

相關文章