来自后台缓冲区的 glReadPixels。浮动精度问题

glReadPixels from back buffer. Problem with float precision

我正在尝试为我的颜色选择器获取颜色,但我得到了一个浮点值,它与我存储的值不同。例如我设置 0.5,但我取 0.498039(这是实数)。 我不构建任何 FBO 并直接从 GL_BACK 读取颜色:

glReadBuffer(GL_BACK);
glReadPixels(x, y, 1, 1, GL_RGB, GL_FLOAT, &color);

如何保存浮点值的精度?是否可以将 GL_FLOAT 更改为另一个可以节省精度的值?是否可以输入大于 1.0 的颜色数?

精度受限于frambuffer(后台缓冲区)的精度。此精度不能单独设置,并且(很可能)限制为每个通道 8 位。实际上生成了Default framebuffer is generated once, when the OpenGL window and OpenGL Context
因此读取缓冲区到 32 位浮点目标是没有意义的,因为源缓冲区只有 8 位。
无论如何,可以将场景渲染到命名的 Framebuffer Object where the color plane of the attached Renderbuffer has a floating point format (e.g. GL_RGBA32F). See LearnOpenGL - Framebuffers.