2014-11-16 44 views

回答

1

甲vec4是通常 128位(4x32位浮点),所以它包装成一个单一的浮动是有问题的。

也许你的意思是打包一个任意的32位值到浮点数?您可以使用内置的intBitsToFloat以按位方式将int的32位复制到float。但是,得到的浮点值可能是某种类型的南,在这种情况下将其转换回与int int floatBitsToInt可能不会给你相同的结果。

编辑

从你的评论,你似乎令人困惑的像素格式与着色器数字格式缓冲区。每当您从缓冲区或纹理中读取像素时,都会将其从像素格式转换为数字格式,具体取决于如何读取像素。如果您已经在绑定到RGBA纹理的某种sampler上执行了正常的texture查找,则texure的每个通道都将被解压缩到一个32位浮点,范围为0.0..1.0。你可以用packUnorm4x8轻松地将它打包回32位uint中,然后将该32位uint转换为浮点数intBitsToFloat(在第二步中,Nan可能存在上述问题)。或者,您可以在设置采样器时使用适当的texel类型将其读取为32位int或浮点数(这会影响插值,但根本不需要插值)你正在尝试做)。

+0

但是,图像的像素值是32位RGBA,我怎样才能将这个值按位转换为浮点数? – schwenk