前言
目前這個引擎只是乙個預覽版, 很多功能仍在開發當中
硬體需求: 顯示卡支援shadermodel3.0
作者blog:
用到的開源工程
為了避免版本之間的不相容, 已經在sdk中包含
體系結構一覽
nebula3 會跟mangalore 合為乙個整體, mangalore的各種子系統會整合到nebula3的適合它們的層中去.
nebula3 比 nebula2更趨向於使用c++.
nebula3通過引用計數和智慧型指標實現了物件生命週期的管理.
nebula3的新物件模型使用乙個4 byte的基類來代替nebula2中70+ bytes的.
rtti更高效, 更易用.
nebula3仍然不使用c++異常, rtti和stl(所有這些不是降低效能就是降低便攜性).
根據類名來建立物件更快更易用.
nebula3 避免使用c lib, 去除了附加的**層.
nebula3 使用lua 代替tcl作為標準的指令碼語言(當然也可以增加其它指令碼語言的支援)
基礎層
attr
屬性註冊
core
nebula3
的物件模型
debug
程式記憶體轉儲和基於http的除錯資訊(這個真是個好東西, 第一次聽說)
實現了http伺服器和客戶端, 這樣可以在瀏覽器中實時檢視除錯資訊
io輸入輸出系統, 很方便
math
基於c++的數學庫, 沒什麼特別的
memory
實現了定製的記憶體分配器
messaging
訊息定義
net最基本的基於tcp協議的c/s架構, 更多的功能會在高層的網路擴充套件中給出
scripting
指令碼系統
system
硬體平台和特定作業系統相關的一些特性
threading
多執行緒timing
util
工具庫, 包括各種容器, 資料結構, 還有乙個強大的string類(拋棄stl吧!)
渲染層
應用程式層
外掛程式
目前有三個, 基於ode的物理引擎, 基於sqlite的本地資料庫, 基於nebula2模型的骨骼模型系統
編譯
沒什麼好說的, 開啟.sln直接編譯就成了, 沒見過這麼簡單的開源工程^_^
Nebula3中的屬性
attr命名空間下實現了mangalore裡的動態屬性.屬性是編譯期間型別安全的key value對,這是資料庫 database 子系統的基礎.如圖,attrid相於屬性型別,而attributedefinition是屬性型別的定義,其中包含了屬性名,屬性的四位元組碼,值型別和訪問型別 讀 寫 也...
Nebula3的渲染流程
在說流程之前,有必要先看一下n3的frame子系統 每幀的渲染過程都寫進了配置檔案,預設使用的是 frame win32 dx9default.xml 陰影還有另外一套.在frameshader的配置檔案裡,宣告了一些rendertarget,還有framepass和frameposteffect....
Nebula3的多執行緒架構
nebula3的 執行在兩種根本不同的方案中.第一種方案我稱之為 fat thread 乙個fat thread在乙個執行緒中執行乙個完整的子系統 如渲染,音訊,ai,物理,資源管理 並且基本上鎖定在乙個特定的核心上.第二種型別的執行緒我叫它 job 乙個job是一些資料和用於處理這些資料的包裝成c...