0

glTexImage2D需要internalFormat(指定位数和数据类型/编码),format(没有位数和编码)和type.

例如,是否有可能让 OpenGL 将传递的包含 32 位整数的像素数据从格式GL_RGB_INTEGER和类型GL_INT转换为内部格式GL_RGB32F

wiki 文章https://www.khronos.org/opengl/wiki/Pixel_Transfer#Format_conversion向我建议可以通过说明:

用户指定的像素必须在用户指定的格式(带有格式​和类型​)和图像的图像格式控制的内部表示之间进行转换。

但是我无法从着色器中的浮点采样器中读取数据。

4

1 回答 1

2

_INTEGER像素传输格式用于将数据传输为整数图像格式。您正在填充浮点纹理,因此不符合条件。你应该得到一个 OpenGL 错误。

确实,您链接到的那篇文章清楚地说明了这一点:

此外,如果指定了“_INTEGER”但图像格式不是整数,则传输失败。

GL_RGBA32F不是完整的图像格式。

如果您移除该_INTEGER部分,那么像素传输将“起作用”。OpenGL 将假定整数数据是标准化值,因此您将获得范围 [-1, 1] 上的浮点值。也就是说,如果您传递一个 32 位整数值 1,则相应的浮点值将是1/(2^31-1),这是一个非常小的数字(因此,几乎可以肯定只是 0.0)。

如果您希望 OpenGL像通过 C 转换一样转换整数......(float)1好吧,实际上没有办法做到这一点。您只需要自己转换数据。

于 2017-08-05T14:12:45.840 回答