1. 程式人生 > 其它 >osg StateSet::setRenderBinDetails 用於控制物件繪製的順序

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” );