我需要对纹理的RGBA值进行采样,并且我正在使用alpha
通道来存储自定义数据,而不是真正的不透明性。问题是当alpha
接近0时,我的RGB值也会乘以0,但是我需要它们保持独立。
我的第一个渲染通道被渲染到WebGLRenderTarget
中,这就是我将GLSL中的数据存储到alpha
通道中的方式:
gl_FragColor.rgb = mainColor;
gl_FragColor.a = depthData;
我的第二个渲染通道被渲染到画布上,所以我从GLSL的第一个纹理中读取RGB值,alpha为1:
gl_FragColor.rgb = texture2D(tColor, vUv).rgb;
gl_FragColor.a = 1.0;
结果应该是球体的常规RGB值,但是当Alpha接近0时,似乎RGB值会逐渐变黑。
是否可以使用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,但无法重现该错误。看来我将不得不撕碎我的整个项目,直到我深入到此为止。