因此,我的應用程序主要使用rgba紋理進行渲染,但在少數情況下,我使用alpha蒙版來渲染文本。使用相同的着色器處理GL_RGBA和GL_ALPHA紋理?
我想我的片段着色器的輸出是在給定的座標乘以我傳入的顏色統一的紋理採樣器的值。問題是我找不到一個簡單的解決方案來處理案例。
所以對於RGBA紋理這給期望的結果:
gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0) * color;
但對於阿爾法紋理,輸出始終是黑色的。我假定紋理採樣器將alpha紋理的每個像素視爲:rgba(0,0,0,alpha),並且我希望它被視爲rgba(1,1,1,alpha)。我可以通過以下方式在alpha紋理上獲得理想的效果:
gl_FragColor = texture2D(diffuseTexture, varTexcoord.st, 0.0).w * color;
但是,顯然這打破了rgba紋理。
我對GLSL相當陌生,我想知道是否有一種很好的方法來處理這兩種情況,或者如果我將必須有2個不同的着色器,或者將我所有的aplha紋理轉換爲rgba 。
編輯:
我想我會加載資產時,最終重新包裝我的阿爾法紋理作爲GL_LUMINANCE_ALPHA紋理。
簡單你的假設是正確的,GL_ALPHA映射到RGBA爲{R = 0,G = 0,B = 0,A = A} –
您使用的桌面OpenGL或OpenGL的ES? –
這是用於OpenGL ES – sak