有没有一种方法可以修改纹理中的alpha而不影响RGB值?

时间:2020-05-23 00:13:59

标签: three.js glsl

我需要对纹理的RGBA值进行采样,并且我正在使用alpha通道来存储自定义数据,而不是真正的不透明性。问题是当alpha接近0时,我的RGB值也会乘以0,但是我需要它们保持独立。

我的第一个渲染通道被渲染到WebGLRenderTarget中,这就是我将GLSL中的数据存储到alpha通道中的方式:

gl_FragColor.rgb = mainColor;
gl_FragColor.a = depthData;

结果显示Alpha逐渐淡出白色: enter image description here

我的第二个渲染通道被渲染到画布上,所以我从GLSL的第一个纹理中读取RGB值,alpha为1:

gl_FragColor.rgb = texture2D(tColor, vUv).rgb;
gl_FragColor.a = 1.0;

结果应该是球体的常规RGB值,但是当Alpha接近0时,似乎RGB值会逐渐变黑。

enter image description here

是否可以使用alpha通道作为数据存储而不影响RGB值?我尝试如下设置目标纹理的premultiplyAlpha = false,但它没有任何改变:

var target = new THREE.WebGLRenderTarget(
    window.innerWidth,
    window.innerHeight, {
        format: THREE.RGBAFormat,
        type: THREE.UnsignedByteType
});
target.texture.premultiplyAlpha = false;

更新:

我正在构建working demo here,但无法重现该错误。看来我将不得不撕碎我的整个项目,直到我深入到此为止。

0 个答案:

没有答案