瞭解的朋友應該知道我最近一直都在鼓吹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。