2012-08-07 51 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