2012-08-07 55 views
2

我想兩個紋理着色器使用的OpenGL ES 2.0的如何兩個紋理沒有alpha混合使用GLSL

enter image description here

,你可以在截圖中看到合併合併,我想創建針對使用動態環境映射的後向對象的針反射。 但是,針的反射看起來是半透明的,它與我的環境地圖相融合。

這裏是我的片段着色器;

varying highp vec4 R; 

uniform samplerCube cube_map1; 
uniform samplerCube cube_map2; 

void main() 
{ 
    mediump vec3 output_color1; 
    mediump vec3 output_color2; 

    output_color1 = textureCube(cube_map1 , R.xyz).rgb; 
    output_color2 = textureCube(cube_map2 , R.xyz).rgb; 

    gl_FragColor = mix(vec4(output_color1,1.0),vec4(output_color2,1.0),0.5); 
} 

但是,「混合」方法導致混合兩個紋理。

我也檢查了Texture Combiners的例子,但它也沒有幫助。

有什麼辦法可以將兩種紋理結合起來,而不會相互混合。

謝謝。

+1

如何定義組合兩個紋理沒有alpha混合?應該輸出什麼,而不是你所得到的? – 2012-08-07 14:13:30

+0

這沒有什麼意義。你如何結合紋理而不混合它們? – Roest 2012-08-07 14:16:03

+0

我有兩個立方體貼圖和其中一個紋理動態創建,用於反射到場景中的其他對象。基本上我不想將動態地圖與我的環境地圖混合。好的,我會拍攝一個更好的解釋屏幕截圖。 – ytur 2012-08-07 14:17:04

回答

1

從評論來看,我的猜測是你想在風景圖上畫針。我只是把它作爲一個覆蓋,但因爲你想在着色器中做,也許這將工作:

void main() 
{ 
    mediump vec3 output_color1; 
    mediump vec3 output_color2; 

    output_color1 = textureCube(cube_map1 , R.xyz).rgb; 
    output_color2 = textureCube(cube_map2 , R.xyz).rgb; 

    if (length(output_color1) > 0.0) 
     gl_FragColor = vec4(output_color1,1.0); 
    else 
     gl_FragColor = vec4(output_color2,1.0); 
} 
+0

感謝您的回覆,我試過了,但沒有奏效。實際上我不明白你的解決方案。但是這啓發了我使用兩個不同的着色器程序分別發送紋理到片段着色器。我會試試這個,如果它的工作,我會在這裏分享。 – ytur 2012-08-07 15:11:15