OpenGL:将RGBA转换为浮点数

问题描述 投票:0回答:1

我已将浮点数编码为纹理(float32的4个字节存储为RBGA值)。现在,我需要将它们解码回单个浮点数。

这是到目前为止我尝试过的方法,对我而言不起作用:

    float rgbaToFloat(vec4 rgba) {
      uint r = uint(rgba.x*255.);
      uint g = uint(rgba.y*255.);
      uint b = uint(rgba.z*255.);
      uint a = uint(rgba.w*255.);

      return uintBitsToFloat((r << 24) | (g << 16) | (b << 8) | a);
    }

我使用以下代码段(python)将浮点数打包成纹理图像:

import numpy as np

data_flat = [...]  #floats

dim = int(np.sqrt(len(data_flat))) + 1
image = np.zeros((dim, dim, 4), dtype='uint8')
for i, d in enumerate(data_flat):
    image[i // dim, i % dim] = np.array([d], dtype=np.float32).view(np.uint8)

对于单个浮点值,它将产生以下输出:

d = 0.06797099858522415;
np.array([d], dtype=np.float32).view(np.uint8)
>>> array([ 97,  52, 139,  61], dtype=uint8)

这似乎是正确的,因为二进制表示形式匹配。

似乎很难返回溢出的值,唯一的调试方式是比较图片,但是肯定不是我期望它输出的内容。

glsl webgl shader fragment-shader
1个回答
0
投票

感谢@LJᛃ将我引荐给此answer,它的作用就像是魅力。

© www.soinside.com 2019 - 2024. All rights reserved.