介绍
RenderBin是osg::StateSet的一个属性,用于设置渲染顺序。
属性
RenderBin自身属性主要包括:
- binNum:任意整数,数越小越先被渲染。
- binName:名称,不同名称对应不同排序方式。
enum SortMode
{
SORT_BY_STATE,//按照状态排序
SORT_BY_STATE_THEN_FRONT_TO_BACK,//按照state排序
SORT_FRONT_TO_BACK,//从后往前排
SORT_BACK_TO_FRONT,//从前往后排
TRAVERSAL_ORDER//按照遍历顺序排
};
使用场景及用法:
场景
1.例如 我们的天空球肯定是要显示在模型的后方,并且会被任何模型所遮挡。所以天空就要在模型绘制之前绘制。
2.例如我们的标签框总是要浮在模型的最上面。
用法 (这是我工作时用到的,顺带outline的渲染实现)
osg::ref_ptr<osgFX::Outline> outline = new osgFX::Outline;
outline->setWidth(m_width);
outline->setColor(m_color);
outline->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
outline->getOrCreateStateSet()->setMode(GL_CULL_FACE, osg::StateAttribute::OFF | osg::StateAttribute::OVERRIDE);
//这个函数有两个传入参数,整型数表示渲染的顺序,
//以0 为标准,小于0 的渲染将排列在前(最前绘制,显示到屏幕后面);
//大于0 的则排列在后(最后绘制,显示在屏幕前);
//“RenderBin”表示在渲染树中新建分支进行渲染。还有DepthSortedBin,但是我目前没用到过。
outline->getOrCreateStateSet()->setRenderBinDetails(11, "RenderBin");
outline->addChild(copyNode);
当然,还有别的方法设置渲染顺序,等以后用到再做以补充。