在Nebula3中載入自定義模型的思路

2021-08-24 17:12:01 字數 2596 閱讀 2179

nebula3

中目前還是沒有地形…

不過冒似國外的引擎除了cryengine

外對於地形都不重視…..

之前看了下wow

的地形組織方式,

一直在想怎麼把它加進來

模模糊糊地感覺到,

它應該是把model

當成了最基本的渲染單位

地形是不是也需要包裝成模型呢?

也就是說,

地形對於引擎來說是個上層概念,

不應該放到graphics

內部去管理.

嗯, 雖說地形也是一種特殊的模型,

但它的管理方式相對來說太過於特殊了,

不知道還能不能跟模型走一條管線.

先看看植被是怎麼組織的:

(這裡不討論其原理,

因為這個系統是依賴nebula maya toolkit

的)(另:

這設計簡直是**集權….

幾乎每個類都要跟renderer

打交道-_-)

嗯, 這裡的渲染單位是grasspatch,

它包裝了乙個internalmodelentity,

然後扔給internalstage

就完成它的使命了.

下面主要看看這個graphicsentity

是怎麼生出來的:

internalmodelentity

是場景管理中的基本圖形物件(

同級的還有攝像機和燈光),

這裡面包含了乙個managedmodel.

managedmodel

是對於實際資源(model)

的管理包裝,

見資源子系統

. 根據資源的使用反饋來動態調整資源的細節等級.

資源的管理/

載入都是在這一模組中進行的

model

就代表實際的模型了,

它由一系列層次結構的modelnode

組成.

在這裡只有shapenode,

即靜態圖形.

通常情況下這就已經可以用來表示乙個三維世界了.

至於粒子/

動畫之類的,

那是另外的modelnode

派生子類.

shapenode

中包裝的是managedmesh,

不過這個就不用手動去構造了, n3

提供乙個memorymeshloader,

直接從vb/ib

進行構造.

由於shapenode

是繼承於statenode,

那它同時也包含了渲染所需要的材質(shader, shader parameters, textures)

vertexbuffer

和indexbuffer

的構造就簡單多了,

之前寫的幾個小例子都是直接從記憶體載入的.

那麼,

反過就是internalmodelentity

的自定義構造流程: 1.

把頂點資料載入到記憶體,

利用memoryvertexbufferloader

建立出vertexbuffer. indexbuffer

同理,

還有它倆相關的primitivegroup…(

看來都比傾向於乙個大buffer

存資料,

多次draw) 2.

建立shapenode,

利用memorymeshloader

載入1中的資料到例項中,

同時設定shader

和相應引數(

紋理也是shader

引數的一種,

渲染狀態是包含在fx

中的,

所以也屬於shader) 3.

建立managedmodel,

建立乙個model,

把model

設定給managedmodel.

然後把2

中的shapenode attach

到model,

並利用乙個emptyresourceloader

來完成資源狀態的切換(

因為資料已經有了,

需要把資源狀態切換到」

載入完成」

才能使用) 4.

建立internalmodelentity,

利用setmanagedmodel

把3的結果給塞進去 5.

internalgraphicsserver::instance()->getdefaultview()->getstage()

得到預設的場景後,

把internalmodelentity

通過attachentity

加入場景,

之後就不用操心了.

場景管理器會自己去畫.

知道了這些,

寫個自定義模型格式的modelloader

就很容易了, 嘿嘿

不知道把terrain tile

當成modelentity

可不可行,

這樣的話連攝像機裁剪都省了-_-.

來管理地形的lod…

嗯, 如果這個思路可行的話,

地形完全可以做成addon

自定義程序在apache中載入方式

之前乙個apache模組工作了好多年,它需要在apache啟動時同時啟動乙個子程序和該模組通訊,模組攔截請求中一些資訊由該程序子程序收集然後做處理。在http.conf中使用customlog subprocesspath k start f conf 來啟動這個子程序。昨天有一兄弟公司在部署該模組...

Python 在Python中新增自定義模組

一般來說,我們會將自己寫的python模組與python自帶的模組分開存放以達到便於維護的目的。python 執行環境在查詢庫檔案時是對 sys.path 列表進行遍歷,如果我們想在執行環境中註冊新的類庫,主要有以下三種方法 在sys.path列表中新增新的路徑。設定pythonpath環境變數。將...

crossphp框架中,在模板中載入其他模板

這裡說我自己做的專案的應用場景 要求是用layui框架的layer元件,實現彈出層效果,用原聲php無疑很容易做到,但是如果應用到crossphp框架流程就會非常麻煩 這裡簡單講一下大致的步驟 1.在乙個模板檔案中應用layui的layer元件實現彈出框 2.從我們自己定義的路徑上可以很容易的看出,...