0

我有一个问题完全在暗示我。我正在尝试将两个立方体纹理混合在一起。但由于某种原因,我似乎无法根据 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 设置为大气颜色并且可以看到它变化 D:>

有任何想法吗?:(

4

1 回答 1

0

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

于 2013-03-30T17:50:50.617 回答