|
tex是一张纹理图片,每个像素的三通道值是(237, 50, 29)等,大于1的值,
但是在GLSL片段着色器中,执行下面语句:
vec4 d = texture2D(tex, gl_TexCoord[0].st);
if(d.r > 1.0)
discard;
发现:没有片段被discard,而
if(d.r < 1.0)
discard;
发现:所有片段被discard
结论:输入的纹理数据像素值不管是否大于1,在被texture2D访问获得的返回值都是在0-1之间
问题:片段中需要用到很多参数值大于1的参数值(如某个参数的值在一千左右),通过纹理的方式
输入进来,但是这样一来,都被归一化到0-1之间了,数据精度会丢失……
请问这样一来,怎么将数据值较大的数据,以纹理的形式组织传入片段着色器进行计算呢?
比如有一些参数值,在1000左右,有的在10000左右,用texture2D一访问,全变成0-1之间了,请问怎么弄? |
|