OpenGL可以将整数像素数据转换为浮点数或UNORM吗?



glTexImage2D采用internalFormat(指定位数和数据类型/编码(,format(没有位数和编码(和type

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

维基文章 https://www.khronos.org/opengl/wiki/Pixel_Transfer#Format_conversion 向我建议,通过说明以下内容是可能的:

用户指定的

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

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

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

事实上,您链接到的文章详细说明了这一点:

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

GL_RGBA32F不是完整的图像格式。

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

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

相关内容

  • 没有找到相关文章

最新更新