2014-09-05 31 views
3

Hy! 我正在使用巨大的頂點對象,我能夠顯示很多modells,因爲我已經將它們分成了更小的部分(65K以下的頂點)。另外我正在使用三個js相機。我想通過使用優先級隊列來提高性能,並且當移動攝像頭的用戶只顯示前10位時,然後在移動停止位置顯示剩餘時間。這部分並不困難,但我不想讓modells渲染,當它們位於另一個對象的後面時,可能會從相機視圖中發出一些光線(檢查邊界框命中),並根據命中列表構建先行隊列。三個js性能

您認爲如何?

而且我怎麼能檢測到,如果我可以裝載下潛行或沒有(飛)

+1

遮擋剔除是你想要做的。 – gaitat 2014-09-05 16:21:16

+0

Thx,我很久以前就讀過它,但它已經退出了我的想法;) – 2014-09-05 16:29:47

+0

似乎所以我必須做我自己的遮擋剔除,我沒有找到它的解決方案,只是這個:https:// github .com/wivlaro/three.js/blob/master/examples/webgl_occlusion_culling.html – 2014-09-05 16:50:55

回答

5

選項A:遮擋剔除,你需要找到這個庫。

選項B:使用AABB平面測試與攝像機Frustum平面和對象邊界框,這會告訴你,如果一個對象是在攝像機的視野。 (不一定後面對象可見,因爲這樣的操作是不可能的,這最有可能已經完成了與WebGL的學位)

實施: 谷歌一下,三個JS可能支持該

選項C :使用最大物體渲染限制,根據距離攝像機的距離和物體的大小劃分優先級。例如計算哪些對象是可見的(選項B),然後優先考慮最接近和最大的對象,並禁用其餘對象。

僞代碼:

if(object is in frustum){ 
     var priority = (bounding.max - bounding.min)/distanceToCamera 
    } 

確保您的着色器只是做一個合格。如果他們都無法不使 對象光線投射到邊界框的八個角:因爲這將計算時間(大約視情況)

選項d一倍。這是相當準確的,但絕不是完美的。

選項A將是最好的肯定,使用選項C是巨大的,如果你不關心小物件遠沒有得到呈現。 選項D適用於具有很多頂點的物體,您可能需要根據具體情況對物體的更多點進行光線投射。 選項B可能對您的方案沒有用處,但它是c和其他優化方法的一部分。總之,從來沒有一個非常可靠和最佳的方式來判斷是否有其他東西背後。