首页 > 解决方案 > 来自后台缓冲区的 glReadPixels。浮点精度问题

问题描述

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

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

如何保存浮点值的精度?是否可以将 GL_FLOAT 更改为另一个可以节省精度的?是否有可能获得大于 1.0 的 &color 数字?

标签: c++openglfloating-pointprecision

解决方案


精度受帧缓冲区(后台缓冲区)精度的限制。此精度不能单独设置,并且(很可能)限制为每通道 8 位。实际上,在生成 OpenGL 窗口和OpenGL 上下文时,会生成一次默认帧缓冲区。 因此,将缓冲区读取到 32 位浮点目标是没有意义的,因为源缓冲区只有 8 位。 无论如何,可以将场景渲染到一个命名的帧缓冲区对象,其中附加的渲染缓冲区的颜色平面具有浮点格式(例如)。请参阅LearnOpenGL - 帧缓冲区

GL_RGBA32F


推荐阅读