探索未知種族之osg類生物---渲染遍歷之裁剪一
前言
上面我們用了四節課的內容,講解了一些osg概念性的內部原理。希望大家可以再看今天的講解之前先再仔細的研究一下前四節的內容。這樣你就會對整個osg的渲染過程有一個更加清晰的認知,有助於理解下面兩個函數cull()和draw()。
osg::Util::SceneView::cull()
好,相信大家已經又複習了上面幾節的內容,那我們就進行sceneView的第一個重要功能osg::Util::SceneView::cull()函數。場景的篩選函數 cull 主要完成了以下幾個工作。
1、通過_camera->getNodeMask()==0來判斷主相機下的根節點是否可見,如果不可見則不用進行cull操作。
2、進行視圖的渲染信息(_renderInfo)的初始化
3、通過updateUniforms();更新一些osg內設的 osg::Uniform 著色器變數(osg_FrameNumber,osg_FrameTime等)。因為opengl中Uniform表示這個變數可以被所有的shader訪問到,所以我們在編寫 GLSL 程序時調用這些變數獲取 OSG 提供的一些場景和時間方面的信息。
4、對篩選訪問器(_cullVisitor),狀態樹根節點(_stateGraph)和渲染樹根節點(_renderStage)進行初始化操作。
5、通過_displaySettings->getStereo()來判斷是否進行立體渲染(例如VR等),那麼此時 OSG 會針對左/右眼(osg::DisplaySettings::LEFT_EYE/RIGHT_EYE)以其它各種設置做出適當的處理,相關的函數包括 SceneView 類成員 computeLeftEyeProjection,computeLeftEyeView,computeRightEyeProjection,computeRightEyeView 等。這些就等我們研究到osg與vr(ar)結合的時候我們再仔細的研究。
6、(不是立體渲染)進行普通渲染,通過cullStage進行cull操作。我們進入SceneView::cullStage內。