看看总体进度
第22天通过CUllvisitor创建了渲染树和状态树,并进行必要的剔除。
接下来进行排序和优化
RenderStage::sort函数时按照前序渲染台,当前渲染台和后续渲染台的顺序进行,其中前序渲染台和后续渲染台通过Camera::setRenderOrder实现,保存了指定摄像机及其场景子树和渲染树结构。
渲染树及其各个分支中数据的排序工作实际上时通过RenderBin::sortImplementation函数实现的,如果希望能实现自定义的渲染树排序动作,通过RenderBin::setSortCallback函数为根节点渲染台,(可以从摄像机的SceneView对象中取得)设置新的排序回调即可。
抄一抄继续,注意需要排序的对象仅仅时渲染树中各个渲染元(RenderBin)中保存的状态节点StateGraph或者渲染叶RenderLeaf,渲染元之间不需要进行排序(那样会打乱实际的绘制顺序)
StateSet对象的渲染细节可以设置为RenderBin(不透明体)和DepthSortedBin(透明体,按深度排序),对于设置为RenderBin或者缺省形式的渲染状态来说,再次进行排序的意义不大;因此OSG事实上仅针对DepthSortedBin渲染元中的各个渲染叶RenderLeaf进行排序,
可以用
RenderBin::setSortMode
加以指定排序类型
接下来查找状态树StateGraph中有没有无效的节点,并删除
设置用户变度的方式
场景筛选阶段进行了构建玩状态树和渲染数,剔除,排序后;接下来进行绘制了。这里用的单线程模型
可知,单线程渲染才行,
顺利进入
同样其他函数的删除集合
比如
对于非立体显示的情况
重点在RenderStage::draw()中,
运行摄像机第24天再详细,所以这里不扩展。
继续往下走
drawInner()会在下一天电子书中讲,所以这里暂时不展开。
copyTexture()也是电子书后面详细讲,这里暂时不展开。