我的世界被劃分爲八叉樹(tris自動分割),每個chuck都有自己的索引緩衝區(vbo是共享的)。我已經建立了FBO,通過簡單的最小通道寫入深度紋理,但是我很難直觀地看到下一步。使用深度紋理進行深度遮擋OpenGL/GLSL(3.3/330)
我希望能夠從前面到後面組織塊體(從八叉樹返回),然後將其渲染到深度紋理。如果沒有寫入,則可以假定夾頭被隱藏。但是,我不知道在opengl中是否可以進行這樣的測試,因爲我一直認爲在FBO綁定時你無法讀取深度紋理。另外,我不知道如何進行這樣的比較測試(FBO可以以這種方式使用嗎?)
另一種方法是使用最終渲染的最終深度紋理(將其傳遞給片段着色器),並且排除被認爲在從預通道(早期Z?)獲得的深度紋理中確定的值之後的片段。
我可以解決第二種方法,但寧願忽略塊,以儘量減少繪製調用和材料綁定。
我希望有人能夠解決這個問題,因爲我已經找到了「最好的方法」來做到這一點,但是我對這些方法和FBO的知識相對有限,而且我只使用FBO進行陰影映射燈。
對不起,這是一個麻煩 - 我知道硬件遮擋測試,但希望實現一個更通用的深度遮擋系統,不需要「等待」。
編輯:只是一個說明,對於前傳我只是要呈現一個緊身邊界框開始。
這是不是很清楚你問的是什麼。你所談論的許多算法都沒有意義。例如,如果您有最終的深度緩衝區(又名:您進行了深度預處理),爲什麼您需要片段着色器來「解開碎片......」?這當然會發生,只需再次渲染對象即可。 –
嗨尼科爾,我想我明白你在說什麼。當GFX插件在片段着色器中進行插值時,GFX卡將自動消除未通過深度測試的片段,對嗎?如果是這種情況,那麼我甚至不需要進行預傳?然而,我想要弄清楚八叉樹返回的卡盤深度遮擋,以防止在最終渲染過程中綁定它們(包括紋理等)。可以把它看作是一個BSP系統,但只能用三角形塊,並在第二次傳遞之前使用深度緩衝區解散整個塊。 – Rebirth