Opengl 在颜色混合过程中,当颜色超出范围时会发生什么情况

Opengl 在颜色混合过程中,当颜色超出范围时会发生什么情况,opengl,blending,Opengl,Blending,比如说,我有这样的混合方程和系数,颜色超出了范围 Source color: (0.8f, 0.8f, 0.8f, 1.0) Destination color: (0.8f, 0.8f, 0.8f, 1.0) glBlendFunc(GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); 颜色应该在计算后标准化还是被钳制?GL标准定义了什么,我找不到它。一般来说,颜色向量在GL中永远不会自动“标准化”。如果该操作对颜色缓冲区的当前格式有意义,则在各个片

比如说,我有这样的混合方程和系数,颜色超出了范围

Source color: (0.8f, 0.8f, 0.8f, 1.0)
Destination color: (0.8f, 0.8f, 0.8f, 1.0) 
glBlendFunc(GL_ONE, GL_ONE);
glBlendEquation(GL_FUNC_ADD);

颜色应该在计算后标准化还是被钳制?GL标准定义了什么,我找不到它。

一般来说,颜色向量在GL中永远不会自动“标准化”。如果该操作对颜色缓冲区的当前格式有意义,则在各个片段处理阶段对它们进行钳制,并且在使用浮点格式时,它们从不被钳制

:

第17.3.6节混合:

如果颜色缓冲区是定点的,则源和 目标值和混合因子均被钳制为[0,1]或 [−1,1]分别用于无符号规范化或有符号规范化 在计算混合方程之前使用颜色缓冲区。如果颜色 缓冲区是浮点型的,不会发生钳位结果为四 将值发送到下一个操作。

因此,如果启用了混合,则输入值将被钳制,除非使用非规范化浮点颜色缓冲区。混合的结果不是钳制的

下一个操作是 第17.3.7节sRGB转换

[注:
cl
是操作的输入值(这是混合阶段的结果值),
cs
是sRGB转换的结果值,如果禁用sRGB转换,
cs=cl

生成的R、G和B的
cs
值以及未修改的A形成新的RGBA颜色值如果颜色缓冲区是定点的,则每个组件都被钳制 到范围[0,1],然后使用方程2.3转换为定点值。得到的四个值被发送到后续抖动操作


我猜在混合过程中不会发生任何事情。随后将转换为帧缓冲区的数据格式。同样的事情也会发生,就像你从片段着色器中写入的输出大于可能的数据(钳制)。具体发生什么主要取决于颜色缓冲区的格式。对于RGB32F缓冲区,不会发生太多。@BDL,“不会发生太多”是什么意思?如果有
(1.0f,0.0f,0.0f,1.0f)
我有红色。如果出现
(2.0f,0.0f,0.0f,1.0f)
,我有什么颜色?