首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sRGB对每个组件的位

sRGB对每个组件的位
EN

Stack Overflow用户
提问于 2022-04-06 15:50:29
回答 1查看 79关注 0票数 1

OpenGL为sRGB颜色空间定义了以下内部格式:

代码语言:javascript
复制
GL_SRGB
GL_SRGB8
GL_SRGB_ALPHA
GL_SRGB8_ALPHA8

请您解释一下,为什么没有sRGB/sRGBA等效的其他位精度的格式,例如RGB4RGB16

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-06 16:18:29

它们不存在是因为它们是不必要的。

sRGB可以被认为是一种压缩形式。通过在sRGB颜色空间中使用颜色,您可以更有效地使用每个组件8位,因为它实际上将更多的比特分配到场景中较轻的区域。如果您使用的是每组件16位,这种压缩是不必要的;您有足够的精度。

但更深层次的原因与硬件实现有关。当GPU通过纹理获取操作(例如GLSL的texture函数)从纹理读取数据时,它需要在着色器内将这些纹理值转换成有用的值。RGBA8存储无符号归一化整数,因此它必须将0,255个数据映射到0,1.0浮点范围。这很容易通过几个按位操作来完成。

将sRGB颜色空间值转换为0,1.0线性范围要复杂得多。但是有一个简单的出路:一个简单的查找表。毕竟,按每组件8位计算,您只需要256个条目.

但是如果你必须支持每部分16位的sRGB,你需要65,536个条目。那就更多了。鉴于上述观点,这是不值得的。

至于较小的组件格式,就没有意义了。这种格式是一种压缩形式;如果不试图保存存储,就永远不会使用它们。但是我们有更好的图像压缩形式:各种块压缩格式。它们提供更好的图像压缩(4bpp或更少,相对于32bpp),比16bpp更好的图像质量,或者两者兼而有之。

他们已经支持sRGB了。因此,没有理由为劣质的压缩格式提供此功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71769877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档