片段着色器用于采样3个分量梯度与一个RGB

时间:2014-08-28 05:55:15

标签: opengl textures fragment shader sampling

我想采用分离的三个分量而不是一个组合渐变

来对渐变进行采样

我试过了:

 out.x = texture2D(inputTexture, vec2(color.x, 0)).x ;
 out.y = texture2D(inputTexture, vec2(color.y, 1)).y ;
 out.z = texture2D(inputTexture, vec2(color.z, 2)).z ;

但它会输出带有很多噪音的混乱颜色。

这是具有3像素高度的三分量梯度:

这些是我申请后的图片

out.x = texture2D(inputTexture, vec2(color.x, 0.0)).x ;
out.y = texture2D(inputTexture, vec2(color.y, 0.5)).y ;
out.z = texture2D(inputTexture, vec2(color.z, 0.9)).z ;

enter image description here => enter image description here

1 个答案:

答案 0 :(得分:2)

纹理坐标存储在0-1的范围内,而不是纹素空间中,所以当你要求一个像素为2的像素时,你要求的是纹理之外的东西,你得到的结果将是取决于你是否夹紧或包裹纹理。

尝试询问0.0,0.5和0.9

的y坐标

更好的解决方案可能是使用具有单个渐变的纹理,并从中单独采样通道。以下纹理和代码将给出相同的结果:

RampTexture

out.x = texture2D(inputTexture, vec2(color.x, 0)).x ;
out.y = texture2D(inputTexture, vec2(color.y, 0)).y ;
out.z = texture2D(inputTexture, vec2(color.z, 0)).z ;