我對WebGL的一個用法的問題。的WebGL - 二傳渲染
最近,我不得不實時渲染來自給定幾何體的後處理圖像。
我愛迪是:
- 的幾何形狀由頂點着色器
- 第一片段着色器用於呈現這種幾何形狀離屏
- 第二片段着色器後處理的投影在屏幕上離屏圖像,並在畫布上顯示結果。
我是如何實現它:
我寫了第一組兩個着色器的屏幕外渲染。它使我可以使用幀緩衝區將幾何圖形繪製到紋理。
對於第二部分,我創建了第二個glsl程序。 這裏,頂點着色器用於投影覆蓋整個屏幕的矩形。 片段着色器從挑選使用sample2D的幕後紋理合適的像素,並做了所有後期處理的東西。
這聽起來怪我,兩個認爲:
- 爲了「渲染」,屏幕外的紋理有與兩個大小功率產生,從而可以比顯著大畫布本身。
- 使用第二個頂點着色器似乎是多餘的。是否可以跳過這一步,直接進入第二個片段着色器,將畫外紋理繪製到畫布上?
所以,最大的問題是:什麼是實現這一目標的正確方法? 我做對了什麼,我做錯了什麼?
謝謝您的建議:)
>創建和渲染NPOT(非兩個電源)直線或最近過濾器材質是完全正常 真奇怪......如果我刪除了'gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,GL。 LINEAR); gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);',或者如果我不使用POT紋理,我得到這個錯誤: '[.Offscreen-For-WebGL-000001EA50628900] RENDER警告:綁定到紋理單元0的紋理無法渲染。它可能不是2的功率,並且具有不兼容的紋理過濾 有什麼問題? – paulinodjm
當您未設置縮小過濾器時,它默認爲'NEAREST_MIPMAP_LINEAR',因此需要使用mip映射。也許你的包裝模式關閉了,NPOT紋理(在WebGL 1中)不支持'REPEAT'或'MIRROR'包裝,只支持'CLAMP_TO_EDGE'。 –
的確,我手動將'TEXTURE_WRAP_ *'參數設置爲'CLAMP_TO_EDGE',它現在可以與NPOT紋理一起使用。 因此,對於第二部分,我必須使用第二個網格將紋理投影到屏幕上。這是不是有點矯枉過正? – paulinodjm