Nebula3學習筆記 1 序

2021-08-22 17:16:23 字數 1360 閱讀 2120

前言

目前這個引擎只是乙個預覽版, 很多功能仍在開發當中

硬體需求: 顯示卡支援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...