在计算机中颜色信息有两个重要参数,一是通道,二是位深。 更多详见:glTexImage2D - OpenGL 4 Reference Pages

通道

指的是用于表示一个像素颜色所需独立数值的数量,决定了数据的存储格式,更多的通道能够表示更丰富的色彩。

单通道

每个像素用1个数值表示,常用于灰度图、位图等。在3D领域常用单通道图片存储某个材质属性数据。

双通道

虽然不存在广泛使用的“双通道”颜色模式,但在某些特定的应用场景下,可能会使用自定义的双通道模式来满足特殊需求。OpenGL有提供GL_RG

三通道

每个像素用3个数值表示,我们常见的彩色图像数据就是由RGB3个通道构成。在存储时也可以有反向顺序:BGR。 在3D领域也常将3张单通道的图片合并成1张三通道的图片以节省资源,3个通道可以分别表示不同的材质属性数据。

四通道

每个像素用4个数值表示,我们常见的透明彩色图像数据就是由RGBA4个通道构成。在存储时有反向顺序:ABGR。 在3D领域也常将4张单通道的图片合并成1张四通道的图片以节省资源,4个通道可以分别表示不同的材质属性数据。

OpenGL中的颜色通道(格式)

格式常量 分类 通道数 通道含义 主要用途
标准颜色格式
GL_RED 单通道 1 R = 红通道 灰度图/单通道纹理
GL_RG 双通道 2 R = 红, G = 绿 法线贴图/特殊效果纹理
GL_RGB 三通道 3 R = 红, G = 绿, B = 蓝 标准彩色纹理
GL_BGR 三通道 3 B = 蓝, G = 绿, R = 红 Windows兼容图像处理
GL_RGBA 四通道 4 R = 红, G = 绿, B = 蓝, A = 透明 带透明度纹理/UI元素
GL_BGRA 四通道 4 B = 蓝, G = 绿, R = 红, A = 透明 DirectX兼容图像处理
深度/模板格式
GL_STENCIL_INDEX 模板缓冲 1 模板值 模板测试/轮廓效果
GL_DEPTH_COMPONENT 深度缓冲 1 深度值 深度测试/阴影映射
GL_DEPTH_STENCIL 混合缓冲 2 D = 深度值, S = 模板值 延迟渲染/高精度深度+模板组合
标准颜色格式添加_INTEGER后缀可特指整数型颜色格式

位深

也称为色彩深度或像素深度,指的是存储每个颜色通道的信息所需的比特数,也决定了数据所使用的数据类型,更高的位深能够表示更精确的颜色。以下以OpenGL支持的位深为例

位数 数据类型 描述 值范围/标准 典型用途
1位 - 1比特(纯黑/纯白) True/False 二值化图像、掩码、字体位图
8位 GL_UNSIGNED_BYTE 8位无符号整数 0 到 255 8位RGB/RGBA图像、LUT索引
GL_BYTE 8位有符号整数 -128 到 127 法线贴图(部分格式)
16位 GL_UNSIGNED_SHORT 16位无符号整数 0 到 65535 深度缓冲、医学影像
GL_SHORT 16位有符号整数 -32768 到 32767 高度图、音频波形数据
GL_HALF_FLOAT 16位半精度浮点数 IEEE 754-2008 HDR图像、实时渲染中间缓冲
32位 GL_UNSIGNED_INT 32位无符号整数 0 到 4294967295 高精度掩码、体素数据
GL_INT 32位有符号整数 -2147483648 到 2147483647 科学计算数据
GL_FLOAT 32位单精度浮点数 IEEE 754 HDR渲染、物理模拟、深度计算

打包格式 Packed Formats

多个通道数据被打包到单个整数中,通过位掩码提取各通道。这样便可支持更多的位深。 命名规则<类型>_<通道1位数>_<通道2位数>_...[_REV] _REV 后缀:表示通道顺序反向存储。

格式名称 类型 位数分配 存储顺序(高位→低位)
RGB格式
GL_UNSIGNED_BYTE_3_3_2 8-bit R(3) G(3) B(2) [R7 R6 R5 G4 G3 G2 B1 B0]
GL_UNSIGNED_BYTE_2_3_3_REV 8-bit B(3) G(3) R(2) [B7 B6 B5 G4 G3 G2 R1 R0]
GL_UNSIGNED_SHORT_5_6_5 16-bit R(5) G(6) B(5) [R15-R11] [G10-G5] [B4-B0]
GL_UNSIGNED_SHORT_5_6_5_REV 16-bit B(5) G(6) R(5) [B15-B11] [G10-G5] [R4-R0]
RGBA格式
GL_UNSIGNED_SHORT_4_4_4_4 16-bit R(4) G(4) B(4) A(4) [R15-R12] [G11-G8] [B7-B4] [A3-A0]
GL_UNSIGNED_SHORT_4_4_4_4_REV 16-bit A(4) B(4) G(4) R(4) [A15-A12] [B11-B8] [G7-G4] [R3-R0]
GL_UNSIGNED_SHORT_5_5_5_1 16-bit R(5) G(5) B(5) A(1) [R15-R11] [G10-G6] [B5-B1] [A0]
GL_UNSIGNED_SHORT_1_5_5_5_REV 16-bit A(1) B(5) G(5) R(5) [A15] [B14-B10] [G9-G5] [R4-R0]
GL_UNSIGNED_INT_8_8_8_8 32-bit R(8) G(8) B(8) A(8) [R31-R24] [G23-G16] [B15-B8] [A7-A0]
GL_UNSIGNED_INT_8_8_8_8_REV 32-bit A(8) B(8) G(8) R(8) [A31-A24] [B23-B16] [G15-G8] [R7-R0]
GL_UNSIGNED_INT_10_10_10_2 32-bit R(10) G(10) B(10) A(2) [R31-R22] [G21-G12] [B11-B2] [A1-A0]
GL_UNSIGNED_INT_2_10_10_10_REV 32-bit A(2) B(10) G(10) R(10) [A31-A30] [B29-B20] [G19-G10] [R9-R0]

GPU内部颜色模式

版权声明

作者: Chaim

链接: https://chaim.eu.org/posts/%E9%A2%9C%E8%89%B2%E4%BF%A1%E6%81%AF/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键