c++ - 来自后台缓冲区的 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 数字?
解决方案
精度受帧缓冲区(后台缓冲区)精度的限制。此精度不能单独设置,并且(很可能)限制为每通道 8 位。实际上,在生成 OpenGL 窗口和OpenGL 上下文时,会生成一次默认帧缓冲区。
因此,将缓冲区读取到 32 位浮点目标是没有意义的,因为源缓冲区只有 8 位。
无论如何,可以将场景渲染到一个命名的帧缓冲区对象,其中附加的渲染缓冲区的颜色平面具有浮点格式(例如)。请参阅LearnOpenGL - 帧缓冲区。GL_RGBA32F
推荐阅读
- javascript - 如何使用css同时向上滑动两个元素?
- sass - 如何将其转换为 sass?
- python-3.x - 预期 ndim=4 层的不兼容值错误,发现 ndim=5
- laravel - 在 Laravel 中延迟邮件有多可靠?
- java - JVM如何确保跨不同类型平台的数据类型固定大小?
- scala - GeoTrellis/Scala:为 Json 解析找到缺失的隐含证据
- ruby-on-rails - “update_attributes!”有什么区别!和“update_attributes”?
- java - 从java中的LinkedList读取对象的问题
- javascript - 查询 500 多个股票代码的 alpha vantage api 的最佳方法 - Javascript
- javascript - FCC 中间算法脚本:Pig Latin