osg StateSet::setRenderBinDetails 用于控制对象绘制的顺序

StateSet::setRenderBinDetails 用于控制对象绘制的顺序,函数第一个参数表示绘制优先级

第二个参数

RenderBin 表示在渲染树中新建分支进行渲染

DepthSortedBin  表示新建分支,并且所有要渲染的数据将按照深度值降序进行排序。

注意,当字符串参数不为“RenderBin”或“DepthSortedBin”时,渲染顺序的设定也是
无效的;当字符串参数和整型参数均有效时,OSG 系统将尝试寻找同类型的渲染元节点并
将StateSet 记录到此“渲染元”中,或者创建新的“渲染元”节点。

实例代码

// 缺省渲染方式,渲染顺序0,此时状态节点直接置入“渲染台”
stateSet->setRenderBinDetails( 0, “” );

 

// 渲染顺序-1(先渲染),此时渲染树中将新建一个“渲染元”节点
stateSet->setRenderBinDetails( -1, “RenderBin” );

// 渲染顺序10,此时将新建一个“渲染元”,并按深度值降序排序各元素
stateSet->setRenderBinDetails( 10, “DepthSortedBin” );

StateSet::setRenderingHint 简化版设置

为了简化操作,用户程序还可以使用StateSet::setRenderingHint 来设置渲染的顺序,这
个函数的传入参数可以为枚举量OPAQUE_BIN 或TRANSPARENT_BIN。前者可以指定该
渲染状态用于不透明物体的渲染,后者则指定该渲染状态用于透明物体的渲染,此时OSG
自动将其渲染顺序置后,并设置它所管理的“状态节点”和“渲染叶”数据按照深度值降序
进行排序。

关于 setRenderBinDetails 与setRenderingHint 的关系,也可以这样解释:
stateSet->setRenderingHint ( OPAQUE_BIN );
stateSet->setRenderingHint ( TRANSPARENT_BIN );
分别等价于:
stateSet->setRenderBinDetails( 0, “RenderBin” );
stateSet->setRenderBinDetails( 10, “DepthSortedBin” );

 

 

posted @ 2022-03-23 14:46  fishpro  阅读(978)  评论(0编辑  收藏  举报