探索未知種族之osg類生物 器官初始化一

2021-09-11 06:45:24 字數 1783 閱讀 7867

我們把viewerbase::frame()比作osg這類生物的肺,首先我們先來大概的看一下『肺』長什麼樣子,有哪幾部分組成。在這之前得對一些固定的零件進行說明,例如_done代表osg的viewer是否被刪除釋放記憶體;_firstframe代表是否是第一次進入frame函式。那麼接下來我們會發現frame函式表面上組成結構非常簡單,邏輯上也非常的清晰---先判斷當前的viewer是否被刪除,也就是判斷是否died,如果已經died,那麼肺的功能就不會進行。然後判斷這個osg小孩是否剛剛出生,是的話就要執行一些初始化工作---嚎啕大哭。最後剩下的四個函式就是乙個正常的osg生物的肺周而復始進行的工作。

我們一步步來,首先看看剛剛生下來的osg寶寶為什麼會哭,對osg整體產生了什麼樣的影響。進入第乙個函式viewerinit(),viewerbase::viewerinit是純虛函式,代表他的實現由他的子類完成,上一節我們研究了osg生物兩種存在形式時,就已經定義了目前正在進行工作的viewer是哪乙個,所以我們直接到os**iewer::viewer(是viewerbase的子類)下看看他的viewerinit函式。經過複雜的拆解工作,終於發現viewerinit是在os**iewer::viewer的標頭檔案中定義並且實現的。並且它的功能非常簡單就是簡單的呼叫init()方法。而這個init方法又是在那個類裡面定義的呢。viewer類分別繼承了os**iewer::viewerbase以及os**iewer::view。init既然在os**iewer::viewerbase和os**iewer::viewer中都沒有記錄,那麼肯定是在os**iewer::view中定義和實現的。我們這裡就有乙個疑問viewer和view到底有什麼區別。從名字上我們有乙個大概的區分viewer視景器,view檢視風景。簡單的理解viewer就是view的操作器,os**iewer::view就是持有場景中的一張景色。仔細的你們一定會發現os**iewer::view繼承自osg::view以及osgga::guiactionadapter. osgga::guiactionadapter我們先不進行詳解要不就跑偏太遠了,先介紹osg::view.osg::view我們看作是場景中一系列相機的掌管者。好了。我們這些就先說到這裡,趕緊趁著剛剛開啟的osg的肺還有失去動力之前回去繼續看看。

進入os**iewer::view::init()函式,這是乙個新的身體零件,和研究frame()函式的思路一樣,我們先認識它內部的固定零件:_eventqueue代表空的osg內的事件佇列—這個我們以後再介紹,_cameramanipulator代表相機的操作方式—這個我們都會在進入frame()函式之前進行單獨的指定。所以我們大體上也就大體了解了os**iewer::view初始化工作,就是建立乙個名叫osgga::guieventadapter::frame的事件並放到_eventqueue中,以及對_cameramanipulator相機操作方式的初始化。不同的攝像機操作模式就會有不同的init函式,我們就對cameramanipulator::init()函式不進行介紹了--- 很簡單。

這樣我們就完成了對viewerbase::frame()函式中第乙個功能介紹完畢,總結一下。viewer::viewerinit()函式就是完成了osg中事件佇列的初始化以及相機操作器的初始化工作。當然這些工作之前,也就是進入frame函式之前必須先完成viewer以及相機的定義。但是osg庫非常強大,即是你沒有定義viewer以及camera他就會預設的按照約定的模式建立一組他們出來。

探索未知種族之osg類生物 渲染遍歷之裁剪二

上一節我們大致上過了一遍sceneview cull 函式,通過研究,我們發現上圖中的這一部分的 才是整個cull過程的核心部分。所以今天我們來仔細的研究一下這一部分。1 cullvisitor pushstateset函式 a currentstategraph currentstategraph...

iOS isa指標初始化過程 類結構探索

isa 指標各位域所指代含義union isa t isa t uintptr t value bits value class cls uintptr t bits if defined isa bitfield struct endif nonpointer 標記是否是nonpointerisa...

opencv之Mat類初始化

早期的 opencv 中,使用 iplimage 和 cvmat 資料結構來表示影象。iplimage 和 cvmat 都是 c 語言的結構。使用這兩個結構的問題是記憶體需要手動管理,開發者必須清楚的知道何時需要申請記憶體,何時需要釋放記憶體。這個開發者帶來了一定的負擔,開發者應該將更多精力用於演算...