人成免费a级毛片-黄色免费看片软件-欧美一级裸体视频,亚洲精品综合久久中文字幕,精品一区二区视频,久久www人成免费产片

資源中心

Resource Centers

2021-01-20

細數(shù)OSG中的“神來之剪”


“裁剪”



就是從大量的事務中進行挑選、刪除



對一個龐大的三維體而言,往往存在著大量無助于最終渲染結果的對象;將它們從場景中剔除后,將剩余的場景對象發(fā)送到OpenGL管線中,即可完成一幀的繪制工作。


這類型的裁剪工作通常稱為“可見性裁剪”,即只有真正能夠被終端用戶看到的對象才會被發(fā)送到渲染管線中。




常見de裁剪技術


背面裁剪


當我們觀察一個不透明物體時,通常大約有一半的物體表面是看不到的,因此完全可以省去這一半的繪制工作,場景的多邊形復雜度也將降低1/2左右。


osg本身提供了如下圖的背面裁剪的實現(xiàn)函數(shù):

圖片1.png




視椎體裁剪


視椎體裁剪就是將不在視椎體中的物體剔除掉不繪制,而在視椎體內部或與視椎體相交的物體繪制的方法,此舉對性能的提升有著巨大的幫助。


通常,物體是不規(guī)則的,為了方便,我們用該物體的包圍球與當前視錐體進行比較。


如果包圍球在視錐體外,那么不需要繪制此包圍球所表達的節(jié)點及其所有的子節(jié)點。如下圖所示,紅色方塊在視錐體外,該方塊將被裁剪。


圖片2.gif


視錐體裁剪包括近平面裁剪、遠平面裁剪以及視錐體側面裁剪三部分。


下圖中setProjectionMatrixAsPerspective中的參數(shù)zNear、zFar就是對在osg中對相機的遠近裁剪面的設置。


NEAR_PLANE_CULLING是近平面裁剪,將超出近平面范圍以外的對象裁剪:

圖片3.png




細節(jié)裁剪


場景中某些物體對于觀察者而言可能是極其微小的,足以忽略不計,此時可以用細節(jié)篩選特性將它們剔除。


判斷對象是否足夠細微,需要用一個像素閾值來決定!


注意,這種篩選可能會剔除一些必要的信息(比如用戶在屏幕上繪制了一些點,卻發(fā)現(xiàn)它們全部被吞噬掉了),因此它是一種通過犧牲質量來換取速度的技術~

圖片4.png




遮擋裁剪


判斷場景中的物體是否有互相遮擋關系,剔除那些被完全遮擋的對象,保留可見物體。但是,完全的遮擋測試算法往往具有過高的復雜度,需要判斷每個場景對象與其他對象的遮擋關系,導致計算帶來的開銷大于繪制帶來的開銷,并不實用!


比較常見的方法是定義一種“遮擋板”對象(在osg中使用OccluderNode節(jié)點),其形狀不固定,并且可以遮擋場景中的其他對象。


少量的遮擋板可以有效的增加場景的裁剪效率,尤其在室內景物的裁剪等場合,使用遮擋板來模擬墻面和門體是再好不過的選擇~


在osg中OccluderNode本身并不具備遮擋能力,需要指定一個遮擋面osg::ConvexPlanarOccluder來進行遮擋。

圖片5.png




聚集裁剪


這是一種類似于背面篩選的場景篩選方法,但是他可以將多個對象組合起來進行統(tǒng)一的背面篩選,從而加快背面篩選的速度。


其基本原理是使用一種截斷圓錐體來包含某組幾何體的所有法線方向和所有點。


圓錐的定點位于一個控制點cp,并使用法線n和半角A輔助進行定位。因此對于視點eye如果出現(xiàn)下面的條件:

微信圖片_20211019171605.png

則認為視點位于該截斷圓錐的背面,應當統(tǒng)一剔除它所包含的多個幾何體,如下圖所示:

圖片6.png


在osg中聚集裁剪相關的類名稱為ClusterCullingCallback,使用方法如下圖所示:

圖片7.png

更多服務

More services