了解的朋友應該知道我最近一直都在鼓吹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還處於一個比較早期的階段,基礎建築尚不成熟。
- 存在renden這樣的拼寫錯誤
- 沒有文檔
- 資源管理不完善,沒有提供統一的二進制資源和字符串資源下載方式,不易擴展
- 場景節點沒有預留擴展性,連一個userdata:any 都沒留
- 天空盒初始化接口不統一,資源不來自TextureLoader
從設計上還是模仿as3的接口設計,但是畢竟是中國人在建設的開源引擎。
從感情上我更願意幫助egret3d去建設,更勝於使用相對成熟的babylon.js.
這個blog系列的后續部分我們會一點一滴的去改善和建設Egret3D。