|
|
发表于 2004-11-4 14:01:00
|
显示全部楼层
Re:一个有关D3D9里的HLSL函数tex2D()用法的问题
我觉得你是有一个问题没有搞清楚。
tex2D采样的纹理,可以是任何一种纹理格式,他不会理会你是X8R8G8B8还是G16R16B16之类的格式,不管你是什么样的纹理格式,tex2D采样出来之后的颜色值总是在[0,1]之间。
哪怕你的纹理是X8R8G8B8的格式也一样的变成了[0-1],这也就是说,RGBA分别除以了255。
所以,你如果想得到整数值,那么就乘以255不就完了??为什么太大我实在想不明白,好象太大了这种说法太不负责任,除以255得来的值再乘以255不就恢复到原样了?哪来的什么好象???
还有一点,我不明白你为什么非得要得到0-255之间的值?在我所知,显卡的所有计算,最好基于浮点数,他是浮点能力强整数计算差的一个东西。如果你非得将其变成0-255之间,其实他保存的还是小数啊。只不过是0.0~255.0而已。你把他整体放大255倍又是何苦呢?
而且,最后PS输出的时候只能是输出一个COLOR啊,这个COLOR他也只能是[0,1]之间的值,所以最后你又得再除以255变回来,这不是多此一举么?
还有,再明确一点,tex2D采样出来的是一个颜色值,是你第二个参数给定位置的颜色值。至于第二个参数的范围是多少,这就无所谓了,要看你的sampler address state的设置,决定着采样出来的颜色到底是什么。总之不可能小于0也不可能大于1就是了。 |
|