1
我有節點保持變換和邊界在它盒,以及我建立從viewProjection matrix.However每幀視錐體一個場景圖,該盒具有其4個頂點局部空間中的框座標。我必須通過改造他們,讓他們在同一空間的視錐,這樣的話我可以視錐檢查交集?我試圖將它們納入世界空間,但很奇怪,因爲我有50點世界矩陣(我用實例和每個實例都有自己的世界/變換矩陣)如何轉換視錐體剔除的邊界框?
我有節點保持變換和邊界在它盒,以及我建立從viewProjection matrix.However每幀視錐體一個場景圖,該盒具有其4個頂點局部空間中的框座標。我必須通過改造他們,讓他們在同一空間的視錐,這樣的話我可以視錐檢查交集?我試圖將它們納入世界空間,但很奇怪,因爲我有50點世界矩陣(我用實例和每個實例都有自己的世界/變換矩陣)如何轉換視錐體剔除的邊界框?
通常要碰撞BB和視錐字的空間。原始算法中:
mtxViewProjTranspose = MtxTranspose(mtxView * mtxProj);
frustumViewWorld = frustumView * mtxViewProjTranspose;
foreach(i)
{
bbWorld[i] = bb[i] * mtxWorld;
bCull[i] = collide(BBWorld[i], frustumViewWorld);
}
你也可以做到這一點,鑑於空間(但它不是那麼好):
mtxProjTranspose = MtxTranspose(mtxProj);
frustumViewViewSpace = frustumView * mtxProjTranspose;
foreach(i)
{
bbView[i] = bb[i] * mtxWorld[i] * mtxView; // More calculations here
bCull[i] = collide(bbView[i], frustumViewViewSpace);
}
如果你認爲翻譯包圍盒(4名綠黨)以世界空間是怪異,想想在網格本身中有幾千個vert是如何奇怪的。 =)據我所知,碰撞檢測比這個簡單的乘法要貴得多。但是:
希望它的幫助!
但不剔除,以限制繪製調用量的意義呢?而且,由於繪製調用由CPU做,即使你剔除在GPU上,一定要仔細閱讀被剔除的數據傳回CPU?還是我沒有理解它嗎? – user1779802
我認爲這取決於。最少在場景中的頂點cout。也許cullung在GPU上不太好,但我的意思是整個碰撞檢測。矩陣運算在GPU上要快得多,因爲線程 – Drop
你犧牲一些PCI-E帶寬和GPU的負載和卸載CPU的遊戲邏輯,AI等,所以可以準備繪製調用更快。一如既往的性能必須針對每個引擎進行分析。 – Drop