【问题标题】:Reading a float texture with glGetTexImage as int output?使用 glGetTexImage 作为 int 输出读取浮点纹理?
【发布时间】:2012-06-01 00:49:04
【问题描述】:

我正在尝试使用用于读取图像的通用代码读取已加载浮点值的纹理,该代码尝试将其读取为(8 位)整数值。

我期待它将值限制在 0..1 并且基本上使它看起来非常可怕,但仍然可以识别。相反,它是完全黑色的,就好像它读取了所有黑色值一样。

纹理是 GL_R32F 格式,我正在尝试将其读取为 GL_UNSIGNED_BYTE,并以 GL_RGBA 作为输出。

这应该有效吗?如果没有,我应该寻找什么样的东西?

【问题讨论】:

  • 您想要完成的究竟是什么?为什么要 OpenGL 进行转换?你不能把它原样读回来然后自己转换吗?
  • 我正在尝试使用我的默认“读取此纹理并另存为 PNG”来读取该纹理。上传 (glTexImage) 会为您进行转换,所以我希望 glGetTexImage 也能这样做。如果这不起作用,我将不得不自己破解它,这是更多的代码和更多的工作......
  • 数学上,你在寻找什么转换?给定一个存储在纹理中的浮点值,你想取回什么整数值?您希望应用于这些值的数学方程式是什么?
  • 嗯...与加载带有浮点值的整数纹理相同。它将 0...1 转换为 0...。我期待 0...1 转换为 0...255 并获得具有过饱和区域的黑白图像。相反,它是黑色的。
  • glGetTexImage后glGetError()是否报错?

标签: opengl floating-point int textures


【解决方案1】:

glGetTexImage 应该能够返回你想要的(8 位无符号)。显然,由于精度损失(每个分量 32 位到 8 位),读回的图像不会像原始图像那样平滑。

但是,我必须说,我认为我从来没有专门使用 R32F 内部格式进行过此操作...尝试使用不同的格式,看看是否会得到不同的结果。此外,确保满足glGetTexImage 工作的所有条件(纹理绑定、没有缓冲区绑定到GL_PIXEL_PACK_BUFFER 等)。请参阅doc for glGetTexImage 了解所有条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多