片段着色器混合两个立方体纹理基于alpha不工作

时间:2013-03-29 18:30:29

标签: three.js

我有一个完全暗指我的问题。我想把两个立方体纹理混合在一起。但由于某些原因,我似乎无法根据alpha将一种纹理与另一种纹理混合。该函数如下所示:

vec4 baseColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );

vec4 atmosphereColor = textureCube( tAtmosphere, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );

vec4 texelColor = mix( atmosphereColor, baseColor, atmosphereColor.a );

gl_FragColor = texelColor;

所有相关材料都有depthWrite:true,depthTest:true和transparent:true。一个是具有6个图像的纹理,另一个是WebGLRenderTarget。 WebGLRenderTarget是使用Alpha通道创建的。

format: THREE.RGBAFormat

单独地,它们都按预期工作。例如,如果我使用gl_FragColor = atmosphereColor;,则alpha可见。但是一旦我尝试将一个与另一个混合,就不会应用alpha。例如,当我这样做时:

gl_FragColor = vec4( baseColor.r, baseColor.g, baseColor.b, atmosphereColor.a );

它仍然不会使用提供的alpha变量(它只是将其设置为1.0) - 即使我知道值存在并且变化,因为我只是将gl_FragColor设置为atmosphereColor并且可以看到它变化D:>

有什么想法吗? :(

1 个答案:

答案 0 :(得分:0)

我能够找到问题的根源。它与渲染器的clearAlpha参数有关。对于我的情况,这需要设置为0而不是1。