关于纹理存取的问题

大家好,关于纹理存取可以选择cudaReadModeElementType或cudaReadModeNormalizedFloat,当我选择cudaReadModeNormalizedFloat并且输入数据为unsigned short的数据类型,我用tex3D获取线性插值后的值乘以65535都为整数,如实际结果为12.5,但输出的结果为13.0,这是正常现象吗?如何解释。文档上说0-65535之间的数,归一化为0.0-1.0,只是归一化0-65535之间的整数,而不是全部的实数。
所以取值后的最小精度是1/65535。

楼主您好,
(1)
您的描述有一些不清晰的地方:

2个浮点数相乘(一个数是您normalize后插值出来的,一个数是65535.0f),
只能得到浮点数。但是您说“都为整数”,因此这里无法理解您的意思。
请修正此段描述为清晰中文解答,然后论坛将为您解答。

(2)关于您询问unsigned char是否能使用表达0-65535外其他实数,这是不可以的。
因为unsigned char只有16位。一共有2^16种可能的值,已经全部用来表达0到65536这2^16个数了,无法再容纳其他值。
希望您能理解。

感谢莅临。

版主您好,当选择cudaReadModeNormalizedFloat的时候,可以将16位unsigned short类型的数据进行绑定,我想利用绑定的数据进行三维纹理取值,数据也是三维的,它的描述里改为cudaFilterModeLinear,即可以自动进行线性插值。由于此方法是将数值映射到[0,1]之间,所以把获取的值乘以65535后,应该为原来的值。但是,我验证的结果却是浮点数型的整数,即原本应该获得12.5000,插值的结果为13.0000,不存在小数位;若原本获得的为100.6000,它返回的却是101.0000.所以我推断是不是因为此方法把我原数据分为了65536份。返回的值也只能是0-65535的整数。
望版主回复,谢谢

楼主您好,

您这样将会导致在拾取+插值的过程中,使用Texture SFU进行计算的。
此过程的插值,精度较低
出现这种情况是有可能的。
如果需要较高的插值精度,建议使用SP进行插值。
(即:手工写代码插值)

感谢来访。

了解了,谢谢版主