类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二
我們今天今天真是進入SceneView::draw()函數(shù)。
1、判斷主相機是否為隱藏狀態(tài)也就是(camera->getNodeMask()==0),隱藏狀態(tài)就會退出這個draw函數(shù)。
2、開始初始化osg::state類,上一節(jié)我們對osg::state類進行了簡單的介紹。這里就是設置了state的framestamp以及displaySetting的設定。再就是初始化opengl的擴展功能工作通過state->initializeExtensionProcs()函數(shù)進行。
3、初始化一個文理對象管理器,主要功能就是維護了一個map,保存紋理,生成新的紋理對象以及刪除紋理對象等。以及初始化一個glBuffer的管理對象(在osg::BufferObject中的GLBufferObjectManager類)。
4、判斷這個draw函數(shù)是否為第一次進入,通過_initCalled來判斷。如果是第一次進入則就需要進行對所有的場景圖形中的對象進行初始化操作,通過nodevisitor進行。如果我們在渲染過程成加載未初始化的數(shù)據(jù),這需要調用update和cull自動調用。
5、為了支持多管道系統(tǒng),將推遲刪除OpenGL顯示列表和紋理對象,直到OpenGL上下文是最初創(chuàng)建對象時的正確上下文。 在這里,我們知道我們所處的上下文,以便刷新適當?shù)木彺妗榇?#xff0c;SceneView 類提供了一個成 員變量_requiresFlush,用以避免多個圖形線程同時執(zhí)行對象的清理工作。
6、下一步就是場景繪制的核心工作了,OSG 為立體顯示提供的支持也在這里體現(xiàn)出來 。針對不同的立體顯示設置(DisplaySettings::getStereoMode),此處均提供 了詳盡的處理流程(譬如 ANAGLYPHIC 互補色顯示,OSG 將負責使用紅色掩碼渲染左眼 視圖,使用補色青色掩碼渲染右眼視圖),感興趣的朋友不妨在這里細細品味,甚至把您所 設計的立體顯示方案于其中實現(xiàn)。立體渲染我們會在以后的osg+hololens中介紹。現(xiàn)在我們僅針對非立體顯示的情形進行介紹
1)首先是設置渲染臺(RenderStage)的讀/寫緩存(通常包括 GL_NONE, GL_FRONT_LEFT,GL_FRONT_RIGHT,GL_BACK_LEFT,GL_BACK_RIGHT,GL_FRONT, GL_BACK,GL_LEFT,GL_RIGHT,GL_FRONT_AND_BACK 以及 GL_AUX 輔助緩存), 其中的值是根據(jù)攝像機的 setDrawBuffer 和 setReadBuffer 函數(shù)來設定的。
2)確保顏色掩碼的每個顏色通道都是被激活的(使用 osg::ColorMask) 。
3)執(zhí)行“前序渲染”渲染臺的繪制(RenderStage::drawPreRenderStages) 。
4)執(zhí)行當前渲染臺(即渲染樹的根節(jié)點)的繪制(RenderStage::draw),無疑這是場景 繪制的核心部分。 在結束了渲染樹的繪制之后,SceneView::draw 函數(shù)還負責恢復所有的 OpenGL 狀態(tài)(使 用 State::popAllStateSets 函數(shù)),判斷是否在繪制過程中出現(xiàn)了 OpenGL 繪圖命令錯誤,并將 錯誤信息打印出來。
這里我們就會發(fā)現(xiàn)draw和cull的套路是一樣的,我們需要進入RenderStage::draw中繼續(xù)探究。
原文鏈接 探索未知種族之osg類生物---渲染遍歷之draw函數(shù)二
總結
以上是生活随笔為你收集整理的类的初始化列表_探索未知种族之osg类生物---渲染遍历之draw函数二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面板没了_LCD面板疯狂涨价 白菜价的5
- 下一篇: apimodel 可以重复吗_【惠蓉保】