2014-08-28 73 views
1

欲样品与分离三种组分梯度,而不是一个组合梯度片段着色器用于采样3个分量梯度VS一个RGB

我尝试:

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

回答

2

纹理坐标存储在0-范围1,不在texel空间中,所以当你要求一个像素的坐标为2的时候,你要求的是纹理上的东西,你得到的结果将取决于你是否夹紧或缠绕g纹理。

尝试请求的0.0,0.5和0.9

更好的解决方案在y COORDS可能是使用一个纹理具有单个梯度,且单独地采样来自该信道。下面的质地和代码将产生相同的结果:

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 ; 
+0

非常感谢您的回复,我已经使用在一个像素梯度提到的代码,它工作正常,但问题是,当我将3个像素合并为一个时,结果并不是预期的结果,所以我分别对x,y和z尝试了0.0,0.5和0.9,但结果与深色洋红色色调一样嘈杂。我要将两个示例图像添加到原始问题中。 – 2014-08-28 18:16:04

+0

是否有你想使用多个渐变而不是一个的原因? – ChrisWebb 2014-08-28 22:58:54

+0

我使用graphist他们有时给我这些地图,如果我找到一种方法来访问纹理中的其他梯度线,我也可以加载多个梯度作为一个纹理,并指向不同的y坐标,反对加载一个纹理为每个渐变。 – 2014-08-28 23:28:47