OSG RenderBin详细介绍以及使用方法

介绍
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);

当然,还有别的方法设置渲染顺序,等以后用到再做以补充。

发布了21 篇原创文章 · 获赞 3 · 访问量 615

猜你喜欢

转载自blog.csdn.net/W96866/article/details/105602072
今日推荐