GLSL按位vec4浮动副本

时间:2014-11-16 14:54:24

标签: copy glsl bits

(怎么样)可以按顺序将vec4(32位)按位复制到浮点数(32位)?

已经尝试过: Vec4ToFloat and Back Vec4ToFloat and Back

1 个答案:

答案 0 :(得分:2)

vec4 通常是 128位(4x32位浮点数),因此将其打包到单个浮点数中是有问题的。

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

修改

从您的评论中,您似乎会在着色器中将数字格式的缓冲区中的像素格式混淆。每当您从缓冲区或纹理中读取像素时,它将从像素格式转换为数字格式,具体取决于 您读取像素的方式。如果您对绑定到RGBA纹理的某种texture进行了正常的sampler查找,那么该纹理的每个通道都将被解压缩到该范围内的32位浮点数中0.0..1.0。您可以使用packUnorm4x8将其轻松打包回32位uint,然后将该32位uint转换为带intBitsToFloat的浮点数(在第二步可能会出现上述问题) )。或者你可以通过在设置采样器时使用适当的纹理元素类型将其作为32位int或float首先读取(这将影响插值,但你可能根本不想要插值,具体取决于关于你想做什么)。